嵌入式linux加載引導內核和根文件系統的方法


總體來說,嵌入式Linux內核和根文件的引導與PC機差不多。
嵌入式linux內核和根文件系統可以存放在各種可能的存儲設備中,一般情況下我 們將內核和根文件系統直接燒入到Flash中(包括NOR和NAND flash),這種方法的缺點是在內核和根文件系統出現修改時我們就不得不得重新對flash進行擦除和燒寫工作,這個非常耗時,在產品開發調試階段非常 不適合,只有在最終成品時才比較適用。哪在開發階段采用哪種方式比較好呢?先還是看看現在都有些常用的存儲設備吧。我們常見的存儲設備有:硬盤,U 盤,SD卡,Flash,還有一種其實是借助網絡而將其存儲到遠程機器上的方法,我們常聽說的網絡硬盤,就是借助TCP/IP協議從遠處將數據下載到機器 來進行工作,很多網吧就采用這樣的“無盤系統”技術,其實並不是沒有盤,而只是這個存儲設備不在本地機器上而已。

從上面這些我們可以得出幾種加載引導linux內核的方法:
1.網絡。即將內核和根文件系統存儲在PC機上,通過網絡協議來將數據下載到開發板中。內核和根文件系統都可以通過tftp或者ftp下載到目標板上,當然根文件系統其實是沒有必要下載到目標板上,我們可以采用NFS文件系統來掛載。

2.SD/MMC 卡引導。將內核和根文件系統存儲在SD卡中,在啟動時通過讀SD卡,來將內核讀入到內存中。根文件可以讀到內存中,也可以由內核直接將SD卡直接掛載為根 文件系統。這里需要文件系統的支持,常用的有FAT和EXT2。這樣在內核和根文件系統更新時,只需要從新寫SD卡就可以了。

3.U盤引導。這個需要目標板有USB HOST接口。同時也需要文件系統支持。其操作與SD卡引導類似。

4.硬盤/CF卡引導。這個也前面兩個類似,只需要其操作起來也不方便。主要因為硬盤目前不支持熱拔插,而且對目標板也有要求,一般的嵌入式設備很少需要硬盤。

5.flash引導。這個就是我們最常用的,可以常用非常多中方式和多種文件系統,包括ext2,jffs2,yaffs2,cramfs等等。

另外一種引導的方式就是通過串口直接下載內核和文件系統到內存中,或者使用調試器與仿真器通過調試通道將內核和根文件系統加載到內核,然后在調試器中通過命令引導內核。

要實現這些引導方式,那么bootloader就必須要支持上面需要的功能,我們來看看這個bootloader可能的需求:
1.支持TCP/IP協議,並實現tftp或者ftp協議。
2.文件系統的支持。可能需要支持fat,ext2,jffs2,yaffs2,cramfs等。
3.SD/MMC協議支持
4.USB Host驅動代碼
5.基於MTD的Flash驅動和設備的支持。
6.IDE/CF接口的支持(不必要)。
要完成這些功能並不簡單,從零開發的話,可以說是非常大的項目,如果再加一個調度器的話那就是一個小的操作系統了,還是先看看現有的各種bootloader吧。常見的有:
1.uboot
2.redboot
3.vivi

其 實uboot中就已經實現了我們需要的所有功能了,而且它支持非常多的目標板和體系結構。redboot是ecos的一部分,其功能沒有uboot那么強 大,而且其移植也並不那么簡單,支持的開發板也少,而且資料不怎么太好找。vivi主要從的三星的芯片上,功能也不多,而且局限很多。所以推薦使用 uboot,最新的uboot應該是u-boot-2009.08。其與原來的uboot-1.1.6修改很多,配置方面有所修改。

上面 這幾種引導方式,在開發階段選擇一種就好了。把一種調試好了就進行內核和驅動的開發吧。當然花費在其上的時間是不會浪費的。“磨刀不誤砍柴工”。推薦使用 網絡引導方案,先通過tftp下載內核到內存,再通過NFS掛載根文件系統,調試和開發都方便。如果沒有網絡可用,可以考慮SD或U盤引導,SD卡引導要 簡單點,最后實在沒辦法那就直接燒寫flash吧。對於學習我們可以試嘗用這幾種方法來比較一下,並好好總結,等到上戰場的時候就可以用上了。最好要有積 累。如果我們做的好的話,各種功能都是模塊化,就算開發開發一個bootloader也只是一個各種模塊的組裝和平台相關的移植。

最后當 然也可以自己動手去實現一個bootloader,這個雖然很費時間,但意義還是很重大的。各種功能可以慢慢的加上,先設計可以基本功能的 bootloader,可以邊做邊參考uboot,你會發現自己在寫代碼的水平會有一個很大的飛躍。像如何編寫平台無關代碼;怎樣進行代碼抽象;如何編寫 可移植性,適應性強,健壯的代碼;C語言的各種特性的使用特別是指針和函數的使用;學會如何實現程序的可配置等等。

 
1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM