2012年2月11日 星期六

開機流程

bootloader在載入kernel之後,kernel會連帶載入initrd,也就是busybox打包起來的image檔案,理由在於kernel為了精簡,他只處哩cpu排程、記憶體管理...等重要功能,並沒有root file system,且沒有drivers的部分,driver的捨棄是因為全部包起來太過龐大了,所以把這部分委託給另外一個initrd去建立一個虛擬的root file system,並且載入記憶體當作root file system,這樣就可以順利把drivers載入了
bootloader把initrd載入記憶體後,kernel就排程,並且安排initrd中的一個init的行程去工作,init主要就是呼叫一個scripts(/etc/init.d/rcS),把其他工作完成,然後接手許多工作,底下是script大致紹的工作

  • 建立/proc跟/sys
  • 建立必要的/dev裝置,可以看到有許多mknod指令,乃至於hotplug
  • 載入drivers,會看到一堆insmod xxx.ko
  • 真的引入linux的file system
  • 一些類似網路設定等等也可以寫死在這裡

可以用之前的busybox觀察,因為只有建立一個shell,先用ls觀察,發現目錄少的可憐,也因為沒執行script,所以上面列出的功能都沒有做,當使用ps指令的時候,系統會抱怨找不到/proc,/proc的意思是process file system,原意是用來儲存process資訊的地方,使用手動指令把掛載起來
mkdir /proc
mount -t proc none /proc
這時候在執行ps,就可以看到畫面了,kernel就不會再抱怨找不到這個file system

其實使用/proc的人都知道,裡面其實還可以找到很多裝置的資訊,乃至於其他有用資訊,本來單純的process file system也變複雜
為此Linus決定在2.6引入另外一個/sys目錄,意思是system file system來儲存其他有用資訊,這個目錄會用來重新整理一些有用的資訊如/sys/block用來儲存區塊裝置,如硬碟的資料,/sys/bus則用來找尋硬體裝置,使得hotplug功能更容易實踐。
所以掛載/sys也是必須的
mkdir /sys
mount -t sys none /sys
其實還缺少了不少東西
/dev這個重要目錄,它是用來儲存裝置資訊了
/etc這個設定檔案的目錄,且重要的/etc/init.d/rcS這個script檔案就是放在這裡啊
/etc/inittab這個filesystme的分割紀錄檔案
/tmp暫存目錄


沒有留言:

張貼留言