Bootloader的基本概念以及內(nèi)部原理
u-boot是一種普遍用于嵌入式系統(tǒng)中的Bootloader。
Bootloader是進(jìn)行嵌入式開(kāi)發(fā)必然會(huì)接觸的一個(gè)概念,它是嵌入式學(xué)院嵌入式工程師職業(yè)培訓(xùn)班>二期課程中嵌入式linux系統(tǒng)開(kāi)發(fā)方面的重要內(nèi)容。本篇文章主要講解Bootloader的基本概念以及內(nèi)部原理,這部分內(nèi)容的掌握將對(duì)嵌入式linux系統(tǒng)開(kāi)發(fā)的學(xué)習(xí)非常有幫助!
Bootloader的定義:Bootloader是在操作系統(tǒng)運(yùn)行之前執(zhí)行的一小段程序,通過(guò)這一小段程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表,從而建立適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。意思就是說(shuō)如果我們要想讓一個(gè)操作系統(tǒng)在我們的板子上運(yùn)轉(zhuǎn)起來(lái),我們就必須首先對(duì)我們的板子進(jìn)行一些基本配置和初始化,然后才可以將操作系統(tǒng)引導(dǎo)進(jìn)來(lái)運(yùn)行。具體在Bootloader中完成了哪些操作我們會(huì)在后面分析到,這里我們先來(lái)回憶一下PC的體系結(jié)構(gòu):PC機(jī)中的引導(dǎo)加載程序是由BIOS和位于硬盤MBR中的OS Boot Loader(比如LILO和GRUB等)一起組成的,BIOS在完成硬件檢測(cè)和資源分配后,將硬盤MBR中的Boot Loader讀到系統(tǒng)的RAM中,然后將控制權(quán)交給OS Boot Loader。Boot Loader的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開(kāi)始啟動(dòng)操作系統(tǒng)。在嵌入式系統(tǒng)中,通常并沒(méi)有像BIOS那樣的固件程序(注:有的嵌入式cpu也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Boot Loader來(lái)完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開(kāi)始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的Boot Loader程序。(先想一下,通用PC和嵌入式系統(tǒng)為何會(huì)在此處存在如此的差異呢?)
Bootloader是基于特定硬件平臺(tái)來(lái)實(shí)現(xiàn)的,因此幾乎不可能為所有的嵌入式系統(tǒng)建立一個(gè)通用的Bootloader,不同的處理器架構(gòu)都有不同的Bootloader,Bootloader不但依賴于cpu的體系結(jié)構(gòu),還依賴于嵌入式系統(tǒng)板級(jí)設(shè)備的配置。對(duì)于2塊不同的板子而言,即使他們使用的是相同的處理器,要想讓運(yùn)行在一塊板子上的Bootloader程序也能運(yùn)行在另一塊板子上,一般也需要修改Bootloader的源程序。
Bootloader的啟動(dòng)方式
Bootloader的啟動(dòng)方式主要有網(wǎng)絡(luò)啟動(dòng)方式、磁盤啟動(dòng)方式和Flash啟動(dòng)方式。
1、網(wǎng)絡(luò)啟動(dòng)方式
圖1 Bootloader網(wǎng)絡(luò)啟動(dòng)方式示意圖
如圖1所示,里面主機(jī)和目標(biāo)板,他們中間通過(guò)網(wǎng)絡(luò)來(lái)連接,首先目標(biāo)板的DHCP/BIOS通過(guò)BOOTP服務(wù)來(lái)為Bootloader分配IP地址,配置網(wǎng)絡(luò)參數(shù),這樣才能支持網(wǎng)絡(luò)傳輸功能。我們使用的u-boot可以直接設(shè)置網(wǎng)絡(luò)參數(shù),因此這里就不用使用DHCP的方式動(dòng)態(tài)分配IP了。接下來(lái)目標(biāo)板的Bootloader通過(guò)TFTP服務(wù)將內(nèi)核映像下載到目標(biāo)板上,然后通過(guò)網(wǎng)絡(luò)文件系統(tǒng)來(lái)建立主機(jī)與目標(biāo)板之間的文件通信過(guò)程,之后的系統(tǒng)更新通常也是使用Boot Loader的這種工作模式。工作于這種模式下的Boot Loader通常都會(huì)向它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口。
2、磁盤啟動(dòng)方式
這種方式主要是用在臺(tái)式機(jī)和服務(wù)器上的,這些計(jì)算機(jī)都使用BIOS引導(dǎo),并且使用磁盤作為存儲(chǔ)介質(zhì),這里面兩個(gè)重要的用來(lái)啟動(dòng)linux的有LILO和GRUB,這里就不再具體說(shuō)明了。
3、flash啟動(dòng)方式
這是我們最常用的方式。Flash有NOR Flash和NAND Flash兩種。NOR Flash可以支持隨機(jī)訪問(wèn),所以代碼可以直接在Flash上執(zhí)行,Bootloader一般是存儲(chǔ)在Flash芯片上的。另外Flash上還存儲(chǔ)著參數(shù)、內(nèi)核映像和文件系統(tǒng)。這種啟動(dòng)方式與網(wǎng)絡(luò)啟動(dòng)方式之間的不同之處就在于,在網(wǎng)絡(luò)啟動(dòng)方式中,內(nèi)核映像和文件系統(tǒng)首先是放在主機(jī)上的,然后經(jīng)過(guò)網(wǎng)絡(luò)傳輸下載進(jìn)目標(biāo)板的,而這種啟動(dòng)方式中內(nèi)核映像和文件系統(tǒng)則直接是放在Flash中的,這兩點(diǎn)在我們u-boot的使用過(guò)程中都用到了。
U-boot的定義
U-boot,全稱Universal Boot Loader,是由DENX小組的開(kāi)發(fā)的遵循GPL條款的開(kāi)放源碼項(xiàng)目,它的主要功能是完成硬件設(shè)備初始化、操作系統(tǒng)代碼搬運(yùn),并提供一個(gè)控制臺(tái)及一個(gè)指令集在操作系統(tǒng)運(yùn)行前操控硬件設(shè)備。U-boot之所以這么通用,原因是他具有很多特點(diǎn):開(kāi)放源代碼、支持多種嵌入式操作系統(tǒng)內(nèi)核、支持多種處理器系列、較高的穩(wěn)定性、高度靈活的功能設(shè)置、豐富的設(shè)備驅(qū)動(dòng)源碼以及較為豐富的開(kāi)發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持。另外u-boot對(duì)操作系統(tǒng)和產(chǎn)品研發(fā)提供了靈活豐富的支持,主要表現(xiàn)在:可以引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核,可以靈活設(shè)置/傳遞多個(gè)關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開(kāi)發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,支持多種文件系統(tǒng),支持多種目標(biāo)板環(huán)境參數(shù)存儲(chǔ)介質(zhì),采用CRC32校驗(yàn),可校驗(yàn)內(nèi)核及鏡像文件是否完好,提供多種控制臺(tái)接口,使用戶可以在不需要ICE的情況下通過(guò)串口/以太網(wǎng)/USB等接口下載數(shù)據(jù)并燒錄到存儲(chǔ)設(shè)備中去(這個(gè)功能在實(shí)際的產(chǎn)品中是很實(shí)用的,尤其是在軟件現(xiàn)場(chǎng)升級(jí)的時(shí)候),以及提供豐富的設(shè)備驅(qū)動(dòng)等。
u-boot源代碼的目錄結(jié)構(gòu)
1、board中存放于開(kāi)發(fā)板相關(guān)的配置文件,每一個(gè)開(kāi)發(fā)板都以子文件夾的形式出現(xiàn)。
2、Commom文件夾實(shí)現(xiàn)u-boot行下支持的命令,每一個(gè)命令對(duì)應(yīng)一個(gè)文件。
3、cpu中存放特定cpu架構(gòu)相關(guān)的目錄,每一款cpu架構(gòu)都對(duì)應(yīng)了一個(gè)子目錄。
4、Doc是文檔目錄,有u-boot非常完善的文檔。
5、Drivers中是u-boot支持的各種設(shè)備的驅(qū)動(dòng)程序。
6、Fs是支持的文件系統(tǒng),其中最常用的是JFFS2文件系統(tǒng)。
7、Include文件夾是u-boot使用的頭文件,還有各種硬件平臺(tái)支持的匯編文件,系統(tǒng)配置文件和文件系統(tǒng)支持的文件。
8、Net是與網(wǎng)絡(luò)協(xié)議相關(guān)的代碼,bootp協(xié)議、TFTP協(xié)議、NFS文件系統(tǒng)得實(shí)現(xiàn)。
9、Tooles是生成U-boot的工具。
對(duì)u-boot的目錄有了一些了解后,分析啟動(dòng)代碼的過(guò)程就方便多了,其中比較重要的目錄就是/board、/cpu、/drivers和/include目錄,如果想實(shí)現(xiàn)u-boot在一個(gè)平臺(tái)上的移植,就要對(duì)這些目錄進(jìn)行深入的分析。
u-boot的啟動(dòng)過(guò)程
相關(guān)推薦
-
-
-
amine | 2002-05-27
-
-
dailzh | 2003-10-15
-
★被水淹死的魚(yú)★ | 2003-10-21
-
twentyone | 2004-02-07
-
-
-
-
dailzh | 2003-05-26
-
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論