Linux中bootloader介紹
一個(gè)嵌入式Linux系統(tǒng)從軟件的角度通常分為以下四個(gè)層次:
引導(dǎo)加載程序。包括固化在firmware中的boot代碼(可選),和Bootloader兩大部分。
Linux內(nèi)核。
文件系統(tǒng)。
應(yīng)用程序。
在嵌入式操作系統(tǒng)中,Bootloader是硬件啟動(dòng)的引導(dǎo)程序,是運(yùn)行操作系統(tǒng)的前提;在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一小段代碼,對(duì)軟硬件進(jìn)行相應(yīng)的初始化和設(shè)定,為最終運(yùn)行操作系統(tǒng)準(zhǔn)備好環(huán)境,類似于X86計(jì)算機(jī)中的BIOS固件;Bootloader不屬于操作系統(tǒng),一般采用匯編語(yǔ)言和C語(yǔ)言開發(fā),需要針對(duì)特定的硬件平臺(tái)(比如arm、powerpc、MIPS等)編寫,Bootloader不但依賴于CPU的體系結(jié)構(gòu),而且依賴于嵌入式系統(tǒng)板級(jí)設(shè)備的配置。對(duì)于2塊不同的嵌入式板而言,即使它們使用同一種處理器,要想讓運(yùn)行在一塊板子上的Bootloader程序也能運(yùn)行在另一塊板子上,一般也都需要修改Bootloader的源程序。
Bootloader的兩種操作模式自啟動(dòng)模式:在這種模式下,Bootloader從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)(kernel)加載到RAM中運(yùn)行(讀取bootcmd參數(shù)),整個(gè)過(guò)程并沒(méi)有用戶的介入。
交互模式:在這種模式下(uboot可在倒計(jì)時(shí)按任意鍵進(jìn)入到這種模式),目標(biāo)機(jī)上的Bootloader將通過(guò)串口或網(wǎng)絡(luò)等方式從開發(fā)主機(jī)(Host)上下載內(nèi)核映像和根文件系統(tǒng)映像等到RAM中,可以被 Bootloader寫到目標(biāo)機(jī)上的固態(tài)存儲(chǔ)媒質(zhì)中,或者直接進(jìn)行系統(tǒng)的引導(dǎo)。也可以通過(guò)串口接收用戶的命令。
Bootloader的基本功能初始化相關(guān)硬件
把bootloader自搬運(yùn)到RAM中
執(zhí)行用戶的命令
訪問(wèn)環(huán)境變量
通過(guò)網(wǎng)絡(luò)/串口通信
讀寫RAM/FLASH
加載并執(zhí)行內(nèi)核
Redboot:Redhat公司隨eCos發(fā)布的一個(gè)BOOT方案,是一個(gè)開源項(xiàng)目,Linux操作系統(tǒng)引導(dǎo),在線讀寫Flash。
ARMboot:ARM平臺(tái)的開源固件項(xiàng)目,2002年ARMboot終止了維護(hù)。
U-Boot:ARMboot并入了PPCBoot,和其他一些平臺(tái)的Loader合稱U-Boot,是目前最常用的bootloader。
Blob、Bios-lt、Bootldr、vivi等
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。