2012年2月8日 星期三

名詞解釋boot loader、kernel、root file system

我野人獻曝一下,雖然對嵌入式系統還不是很了解,但是先記錄一下我所看到的東西,因為網路上實在太多名詞,讓人有點頭昏眼花
這些東西都是牽涉到整個嵌入式系統從硬體開始啟動到載入OS的過程,我想可以參考鳥哥的網站的內容,流程大致上應該是
BIOS=>boot loader=>kernel=>root file system,底下是鳥哥畫的示意圖

底下是節錄鳥哥的開機流程
=======
當我們藉由 boot loader 的管理而開始讀取核心檔案後,接下來, Linux 就會將核心解壓縮到主記憶體當中, 並且利用核心的功能,開始測試與驅動各個周邊裝置,包括儲存裝置、CPU、網路卡、音效卡等等。 此時 Linux 核心會以自己的功能重新偵測一次硬體,而不一定會使用 BIOS 偵測到的硬體資訊喔!也就是說,核心此時才開始接管 BIOS 後的工作了。 那麼核心檔案在哪裡啊?一般來說,他會被放置到 /boot 裡面,並且取名為 /boot/vmlinuz 才對!
從上表我們也可以知道此版本的 Linux 核心為 2.6.18-92.el5 這個版本!為了硬體開發商與其他核心功能開發者的便利, 因此 Linux 核心是可以透過動態載入核心模組的 (就請想成驅動程式即可),這些核心模組就放置在 /lib/modules/ 目錄內。 由於模組放置到磁碟根目錄內 (要記得 /lib 不可以與 / 分別放在不同的 partition !), 因此在開機的過程中核心必須要掛載根目錄,這樣才能夠讀取核心模組提供載入驅動程式的功能。 而且為了擔心影響到磁碟內的檔案系統,因此開機過程中根目錄是以唯讀的方式來掛載的喔。
一般來說,非必要的功能且可以編譯成為模組的核心功能,目前的 Linux distributions 都會將他編譯成為模組。 因此 USB, SATA, SCSI... 等磁碟裝置的驅動程式通常都是以模組的方式來存在的。 現在來思考一種情況,假設你的 linux 是安裝在 SATA 磁碟上面的,你可以透過 BIOS 的 INT 13 取得 boot loader 與 kernel 檔案來開機,然後 kernel 會開始接管系統並且偵測硬體及嘗試掛載根目錄來取得額外的驅動程式。
問題是,核心根本不認識 SATA 磁碟,所以需要載入 SATA 磁碟的驅動程式, 否則根本就無法掛載根目錄。但是 SATA 的驅動程式在 /lib/modules 內,你根本無法掛載根目錄又怎麼讀取到 /lib/modules/ 內的驅動程式?是吧!非常的兩難吧!在這個情況之下,你的 Linux 是無法順利開機的! 那怎辦?沒關係,我們可以透過虛擬檔案系統來處理這個問題。
虛擬檔案系統 (Initial RAM Disk) 一般使用的檔名為 /boot/initrd ,這個檔案的特色是,他也能夠透過 boot loader 來載入到記憶體中, 然後這個檔案會被解壓縮並且在記憶體當中模擬成一個根目錄, 且此模擬在記憶體當中的檔案系統能夠提供一支可執行的程式,透過該程式來載入開機過程中所最需要的核心模組, 通常這些模組就是 USB, RAID, LVM, SCSI 等檔案系統與磁碟介面的驅動程式啦!等載入完成後, 會幫助核心重新呼叫 /sbin/init 來開始後續的正常開機流程。
如上圖所示,boot loader 可以載入 kernel 與 initrd ,然後在記憶體中讓 initrd 解壓縮成為根目錄, kernel 就能夠藉此載入適當的驅動程式,最終釋放虛擬檔案系統,並掛載實際的根目錄檔案系統, 就能夠開始後續的正常開機流程。更詳細的 initrd 說明,你可以自行使用 man initrd 去查閱看看。 底下讓我們來瞭解一下 CentOS 5.x 的 initrd 檔案內容有什麼吧! ^_^
=======

因為一般PC上的linux實在太大了,所以有很多精簡化的東西,也有許多因為某些目的發展出來的專案,嵌入式系統比較少從無到有的,所以大多講究porting
boot loader : u boot
kernel : uClinux
root file system : uClinux、busybox

最後是兩篇人家網路上對新手的建議
http://phorum.study-area.org/index.php?topic=58481.0
http://jslinux.pixnet.net/blog/post/12065743-%E5%A6%82%E4%BD%95%E9%80%B2%E5%85%A5linux%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%28embedded-linux-system%29

相關連結:
http://hi.baidu.com/serial_story/blog/item/4bc67da7ed44f49fd0435807.html
http://www.ibm.com/developerworks/cn/linux/l-btloader/
http://gaznjang.blogspot.com/2008/04/u-boot-u-boot-bootloader-bootloader.html

沒有留言:

張貼留言