U-BOOT之一:BootLoader 的概念与功能
U-BOOT之一:BootLoader 的概念與功能
???????????????????????????? ——轉(zhuǎn)自《U-BOOT移植S3C2440完全手冊》
1.1嵌入式Linux 軟件結(jié)構(gòu)與分布
一般情況下嵌入式Linux 系統(tǒng)中的軟件主要分為以下幾部分:
1) 引導(dǎo)加載程序:其中包括內(nèi)部ROM 中的固化啟動代碼和BootLoader 兩部分。內(nèi)部固化ROM 是廠家在芯片生產(chǎn)時候固化的,作用基本上是引導(dǎo)BootLoader。有的芯片比較復(fù)雜,比如Omap3 在flash 中沒有代碼的時候有許多啟動方式:USB、UART 或以太網(wǎng)等等。而S3C24x0 則很簡單,只有Norboot 和Nandboot。
2) Linux kernel 和drivers。
3) 文件系統(tǒng)。包括根文件系統(tǒng)和建立于Flash 內(nèi)存設(shè)備之上的文件系統(tǒng)(EXT4、UBI、CRAMFS 等等)。它是提供管理系統(tǒng)的各種配置文件以及系統(tǒng)執(zhí)行用戶應(yīng)用程序的良好運(yùn)行環(huán)境及載體。
4) 應(yīng)用程序。用戶自定義的應(yīng)用程序,存放于文件系統(tǒng)之中。
在Flash 存儲器中,他們的分布一般如下:
但是以上只是大部分情況下的分布,也有一些可能根文件系統(tǒng)是initramfs,被一起壓縮到了內(nèi)核映像里,或者沒有Bootloader 參數(shù)區(qū),等等。
1.2 在嵌入式Linux 中BootLoader 的必要性
Linux 內(nèi)核的啟動除了內(nèi)核映像必須在主存的適當(dāng)位置,CPU 還必須具備一定的條件:
| 1. CPU 寄存器的設(shè)置: | R0=0; R1=Machine ID(即Machine Type Number,定義在 linux/arch/arm/tools/mach-types); R2=內(nèi)核啟動參數(shù)在 RAM 中起始基地址; |
| 2. CPU 模式: | 必須禁止中斷(IRQs 和FIQs); CPU 必須 SVC 模式; |
| 3. Cache 和 MMU 的設(shè)置: | MMU 必須關(guān)閉; 指令 Cache 可以打開也可以關(guān)閉; 數(shù)據(jù) Cache 必須關(guān)閉; |
但是在CPU 剛上電啟動的時候,一般連內(nèi)存控制器都沒有初始化過,根本無法在主存中運(yùn)行程序,更不可能處在Linux 內(nèi)核啟動環(huán)境中。為了初始化CPU 及其他外設(shè),使得Linux內(nèi)核可以在系統(tǒng)主存中運(yùn)行,并讓系統(tǒng)符合Linux 內(nèi)核啟動的必備條件,必須要有一個先于內(nèi)核運(yùn)行的程序,他就是所謂的引導(dǎo)加載程序(Boot Loader)。
而BootLoader 并不是Linux 才需要,而是幾乎所有運(yùn)行操作系統(tǒng)的設(shè)備都需要。我們的PC 的BOIS 就是Boot Loader 的一部分(只是前期引導(dǎo),后面一般還有外存中的各種BootLoader),對于Linux PC 來說,Boot Loader = BIOS + GRUB/LILO。
1.3 Boot Loader 的功能和選擇
綜上所述:BootLoader 是在操作系統(tǒng)內(nèi)核啟動之前運(yùn)行的一段小程序。通過這段程序,我們可以初始化硬件設(shè)備,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境,最后從別處(Flash、以太網(wǎng)、UART)載入內(nèi)核映像到主存并跳到入口地址。
由于BootLoader 需要直接操作硬件,所以它嚴(yán)重依賴于硬件,而且依據(jù)所引導(dǎo)的操作系統(tǒng)的不同,也有不同的選擇。對于嵌入式世界中更是如此。就S3C24x0 而言,如果是引導(dǎo)Linux,一般選用韓國的mizi 公司設(shè)計(jì)的vivi 或者DENX 軟件工程中心的Das U-boot,如果是引導(dǎo)Win CE,就選用Eboot。如果是開發(fā)StrongARM 構(gòu)架下的LART,就可選用由Jan-Derk Bakker 和 Erik Mouw 發(fā)布的Blob(Boot Loader Object)。如果是要引導(dǎo)eCos 系統(tǒng),可
以選用同是Redhat 公司開發(fā)的Redboot。
所以在嵌入式世界中建立一個通用的 BootLoader 幾乎是不可能的,而可能的是讓一個Boot Loader 代碼支持多種不同的構(gòu)架和操作系統(tǒng),并讓她有很好的可移植性。U-boot 就是支持多平臺多操作系統(tǒng)的一個杰出代表。這也是U-boot 的優(yōu)勢所在,因?yàn)槿绻陂_發(fā)S3C2440 時熟悉了U-boot,再轉(zhuǎn)到別的平臺的時候,就可以很快地完成這個平臺下U-boot的移植。而且U-boot 的代碼結(jié)構(gòu)越來越合理,對于新功能的添加也十分容易。
總結(jié)
以上是生活随笔為你收集整理的U-BOOT之一:BootLoader 的概念与功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu gedit出错:Faile
- 下一篇: A20 看门狗驱动