寄件者:老貢生 (letsgo@ms6.url.com.tw)
主旨:Re: [問題]floppy linux如何執行linuxrc?
View this article only
網上論壇:tw.bbs.comp.linux
日期:2003-04-09 18:19:42 PST
frank wrote:
> ※ 引述《letsgo@ms6.url.com.tw (老貢生)》之銘言:
>
>>frank wrote:
>>
>>>我用busybox做了一個floppy linux
>>>在/bin下讓init指向linuxrc
>>>ln -sf /linuxrc init
>>>但是開機時,卻不會去執行linuxrc
>>>請問是不是我的init ram disk有少了什麼東西?
>>>
>>跟你啟動參數 root=whatdevice 設定可能有關係,你說說看 root 怎設定的。
>>此外你 linuxrc 怎寫的也 post 上來看看。
>>
>
> 我的 root=/dev/ram0
> 我發現只要我把ln -sf /linuxrc init 換成
> ln -sf ../linuxrc init
> 它就會跑我的linuxrc
> 請問是為什麼?
還是我上篇 post 的觀念,如果 kernel 發覺了 root=device 的設定,
並且這個 device 被正確掛入,那他會執行 /sbin/init ,
而不是 /linuxrc ,要他執行 /linuxrc 很簡單,就是把你啟動時,
把 root=/dev/ram0 的設定拿掉,因為 initrd.img 用的就是 /dev/ram0,
所以 kernel 就拿你的 initrd fs 當 root fs ,而去執行 /sbin/init 了。
所以 /linuxrc 只有在缺乏 root 設定,或有 root 設定,但尚未被正確掛入時,
才會被執行。
至於你要以 initrd fs 當 root fs ,但又希望 /linuxrc 先執行時,
那就不要先給 root=/dev/ram0 參數,然後在 /linuxrc 的適當處加下面的敘述:
mount none /proc -t proc
echo 0x100 > /proc/sys/kernel/real-root-dev
去告訴 kernel ,真正的 root fs 是 0x100 (/dev/ram0 的 mknod 編號)。
總之你要有個概念,kernel 執行,一定要有個 root fs ,和一個 init ,
/linuxrc 只是 /sbin/init 的前置處理,/linuxrc 結束後,
kernel 還是會去找 /sbin/init 來執行的。所以你
ln -sf /linuxrc init
的結果,
在有 root=/dev/ram0
時會執行不到,而在沒有 root=/dev/ram0 時,/sbin/init 會執行兩次。
而 ln -sf ../linuxrc init,在有 root fs 設定時,/linuxrc 不執行,
執行 /sbin/init ,無 root fs ,執行 /linuxrc ,但 linuxrc 結束後,
kernel 會回應 panic 訊息。
要觀察上列現象,建議不要用 linuxrc 和 init 的連結方式,你把 linuxrc
改用個 shell script 代替,就看得出來了。