資源描述:
《引導(dǎo)加載程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、1.引言在專用的嵌入式板子運行GNU/Linux系統(tǒng)已經(jīng)變得越來越流行。一個嵌入式Linux系統(tǒng)從軟件的角度看通常可以分為四個層次:1.引導(dǎo)加載程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。2.Linux內(nèi)核。特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動參數(shù)。3.文件系統(tǒng)。包括根文件系統(tǒng)和建立于Flash內(nèi)存設(shè)備之上文件系統(tǒng)。通常用ramdisk來作為rootfs。4.用戶應(yīng)用程序。特定于用戶的應(yīng)用程序。有時在用戶應(yīng)用程序和內(nèi)核層之間可能還會包括一
2、個嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI懂。引導(dǎo)加載程序是系統(tǒng)加電后運行的第一段軟件代碼。回憶一下PC的體系結(jié)構(gòu)我們可以知道,PC機中的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤MBR中的OSBootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤MBR中的BootLoader讀到系統(tǒng)的RAM中,然后將控制權(quán)交給OSBootLoader。BootLoader的主要運行任務(wù)就是將內(nèi)核映象從硬盤
3、上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,也即開始啟動操作系統(tǒng)。而在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(注,有的嵌入式CPU也會內(nèi)嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務(wù)就完全由BootLoader來完成。比如在一個基于ARM7TDMIcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時通常都從地址0x00000000處開始執(zhí)行,而在這個地址處安排的通常就是系統(tǒng)的BootLoader程序。本文將從BootLoader的概念、BootLoader的主要任務(wù)、BootLoader的
4、框架結(jié)構(gòu)以及BootLoader的安裝等四個方面來討論嵌入式系統(tǒng)的BootLoader。2.BootLoader的概念簡單地說,BootLoader就是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。通常,BootLoader是嚴(yán)重地依賴于硬件而實現(xiàn)的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們?nèi)?/p>
5、然可以對BootLoader歸納出一些通用的概念來,以指導(dǎo)用戶特定的BootLoader設(shè)計與實現(xiàn)。1.BootLoader所支持的CPU和嵌入式板每種不同的CPU體系結(jié)構(gòu)都有不同的BootLoader。有些BootLoader也支持多種體系結(jié)構(gòu)的CPU,比如U-Boot就同時支持ARM體系結(jié)構(gòu)和MIPS體系結(jié)構(gòu)。除了依賴于CPU的體系結(jié)構(gòu)外,BootLoader實際上也依賴于具體的嵌入式板級設(shè)備的配置。這也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,要想讓運行在一塊
6、板子上的BootLoader程序也能運行在另一塊板子上,通常也都需要修改BootLoader的源程序。2.BootLoader的安裝媒介(InstallationMedium)系統(tǒng)加電或復(fù)位后,所有的CPU通常都從某個由CPU制造商預(yù)先安排的地址上取指令。比如,基于ARM7TDMIcore的CPU在復(fù)位時通常都從地址0x00000000取它的第一條指令。而基于CPU構(gòu)建的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設(shè)備(比如:ROM、EEPROM或FLASH等)被映射到這個預(yù)先安排的地址上。因此在系統(tǒng)加
7、電后,CPU將首先執(zhí)行BootLoader程序。下圖1就是一個同時裝有BootLoader、內(nèi)核的啟動參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲設(shè)備的典型空間分配結(jié)構(gòu)圖。圖1固態(tài)存儲設(shè)備的典型空間分配結(jié)構(gòu)[img]mhtml:file://C:DocumentsandSettingsAdministratorLocalSettingsTempRar$DI00.531嵌入式系統(tǒng)BootLoader技術(shù)內(nèi)幕.mht![/img]3.用來控制BootLoader的設(shè)備或機制主機和目標(biāo)機之間一
8、般通過串口建立連接,BootLoader軟件在執(zhí)行時通常會通過串口來進(jìn)行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。4.BootLoader的啟動過程是單階段(SingleStage)還是多階段(Multi-Stage)通常多階段的BootLoader能提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲設(shè)備上啟動的BootLoader大多都是2階段的啟動過程,也即啟動過程可以分為stage1和stage2兩部分。而至于在stage1和stage2具體完成哪些任務(wù)將在下面討論。5.