根文件系統,關於linuxrc的困惑

做嵌入式根文件系統時,有linuxrc如下:
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mount -n -t ramfs ramfs /etc         
這裏的ramfs是從哪兒來,做的根目錄沒有這個,掛這個的目的是幹嗎
/bin/cp -a /mnt/etc/* /etc

echo "re-create the /etc/mtab entries"
# re-create the /etc/mtab entries
/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /
/bin/mount -f -t ramfs ramfs /etc

exec /sbin/init 這裏是映象的還是根目錄下的?
-----------------------------------------------------------------------------------
內核運行時是不是會自己生成一個根文件系統,通過linux command line找到*.cramfs,ram,romfs等
映象文件,再掛到內核生成的根文件解構下?

總是掛不上去,只能發現ram映象及其filetype
 

 

首先你要看懂這個linuxrc,
1. /bin/mount -n -t ramfs ramfs /etc  

這句話的作用加載一個ramfs作爲/etc目錄。這樣/etc就是一個可寫目錄。
看這個腳本,得出你的根文件系統是一個cramfs,是一個只讀文件系統中,而/etc作爲系統運行配置文件的存放地點,可能會寫一些運行狀態在這裏,linuxrc第一件事情就是將一個ramfs mount 到/etc只讀目錄中,使得/etc/目錄可寫,指定參數 -n的目的是告訴mount不要寫/etc/mtab, 這個文件存放當前系統mount了的所有文件系統中。 因爲現在/etc/目錄還是隻讀,所以這次mount不要寫這個文件,否則會失敗。

而你問到的 ramfs在哪裏,這個在你的 /etc/fstab文件中應該有ramfs一項, mount 會去找這項,如果沒有,mount會失敗。後面就執行不下去。

2. /bin/cp -a /mnt/etc/* /etc
/etc成爲可寫目錄後,將所有/mnt/etc中的配置文件拷貝到/etc/中,這說明你的ramfs可能是一個空的ramfs,沒有配置文件,或者配置文件比較老。 同時也說明你這個系統是一個只讀系統,每次系統運行中寫入的配置不會保留。

將以前mount的那些信息重新寫到/etc/mtab中,命令就是下面這些。
3. /bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /
   /bin/mount -f -t ramfs ramfs /etc

這些命令只是將這些mount信息寫到/etc/mtab中,不會實際去mount這些block device,說明你的根文件系統依然是以前的那個/dev/bon/2

4. exec /sbin/init
執行根文件系統中的init執行程序,使其成爲1號進程。shell正式運行。


你的shell運行不起來,可能是因爲/etc/fstab有問題,注意看一下你的cramfs中的這個文件內容是否正確。
腳本不全,無法做出更進一步判斷。最好把你的腳本和cramfs中的文件結構貼出來。


 

發佈了9 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章