0.Boot Loader的概念和功能


轉載:http://blog.chinaunix.net/uid-20543672-id-94371.html
1、嵌入式Linux軟件結構與分布
在一般情況下嵌入式Linux系統中的軟件主要分為以下及部分:
(1)引導加載程序:其中包括內部ROM中的固化啟動代碼和Boot Loader兩部分。
而這個內部固化ROM是廠家在芯片生產時候固化的,作用基本上是引導Boot Loader。有的芯片比較復雜,比如Omap3,他在flash中沒有代碼的時候有許多啟動方式:USB、UART或以太網等等。而S3C24x0則很簡單,只有Norboot和Nandboot。
(2)Linux kernel 和drivers。
(3)文件系統。包括根文件系統和建立於Flash內存設備之上的文件系統(EXT4、UBI、CRAMFS等等)。它是提供管理系統的各種配置文件以及系統執行用戶應用程序的良好運行環境的載體。
(4)應用程序。用戶自定義的應用程序,存放於文件系統之中。

在linux內核的啟動運行除了內核映像必須在主存的適當位置,CPU還必須具備一定的條件:
1. CPU 寄存器的設置:
R0=0;
R1=Machine ID(即Machine Type Number,定義在linux/arch/arm/tools/mach-types);
R2=內核啟動參數在 RAM 中起始基地址;
2. CPU 模式:
必須禁止中斷(IRQs和FIQs);
CPU 必須 SVC 模式;
3. Cache 和 MMU 的設置:
MMU 必須關閉;
指令 Cache 可以打開也可以關閉;
數據 Cache 必須關閉;

但是在CPU剛上電啟動的時候,一般連內存控制器都沒有配置過,根本無法在內存中運行程序,更不可能處在Linux內核的啟動環境中。為了初始化CPU和其他外設,使得Linux內核可以在系統主存中跑起來,並讓系統符合Linux內核啟動的必備條件,必須要由一個先於內核運行的程序,他就是所謂的引導加載程序(Boot Loader)。
而Boot Loader並不是Linux才需要,是幾乎所有的運行操作系統的設備都具備的。我們的PC的BOIS就是Boot Loader的一部分(只是前期引導,后面一般還有外存中的各種Boot Loader),對於Linux PC來說,Boot Loader = BIOS + GRUB/LILO。

3、Boot Loader的功能和選擇
通過上面的講述,我們可以知道:bootloader是在OS內核運行之前的一段小程序。通過這段小程序,我們可以初始化硬件設備,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用OS內核准備好正確的環境,最后從別處(flash/以太網/UART)載入內核映像並跳到入口地址。
由於BootLoader直接操作硬件,所以她嚴重依賴於硬件,而且依據所引導的操作系統的不同,也有不同的選擇對於嵌入式世界中更是如此。就S3C24x0而言,如果是引導Linux,一般選用韓國的mizi公司設計的vivi或者DENX軟件工程中心的U-boot,如果是引導Win CE,就選用Eboot。如果是開發StrongARM 構架下的LART,就可選用由Jan-Derk Bakker 和 Erik Mouw發布的Blob(Boot Loader Object)。如果是要引導eCos系統,就可以選用同是Redhat公司開發的Redboot。
所以在嵌入式世界中建立一個通用的 BootLoader 幾乎是不可能的,而有可能的是讓一個 Boot Loader代碼支持多種不同的構架和操作系統,並讓她方便移植。U-boot就是支持多平台多操作系統的一個傑出代表。這也是為什么我喜歡用U-boot的原因,因為如果在開發S3C2440時熟悉了U-boot,再轉到別的平台的時候就可以很快地完成這個平台下的U-boot移植,而且U-boot的代碼結構越來越合理,對於新功能的添加也十分容易。
值得一提的是國內的一個開源項目maxwit中的g-bios也是一個不錯的開源BootLoader,同樣支持多平台。


免責聲明!

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



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