當(dāng)前在嵌入式系統(tǒng)開發(fā)中有哪些常用的bootloader
當(dāng)前在嵌入式系統(tǒng)開發(fā)中有哪些常用的bootloader
常見bootloader介紹 1.U-BOOT介紹 uboot是一個龐大的公開源碼的軟件。他支持一些系列的arm體系,包含常見的外設(shè)的驅(qū)動,是一個功能強(qiáng)大的板極支持包。
其代碼可以從http://sourceforge.net/projects/u-boot下載 U-BOOT是由PPCBOOT發(fā)展起來的,是PowerPC、ARM9、Xscale、X86等系統(tǒng)通用的Boot方案,從**版本 0.3.2開始全面支持SC系列單板機(jī)。
u-boot是一個open source的bootloader,目前版本是0.4.0。u-boot是在ppcboot以及armboot的基礎(chǔ)上發(fā)展而來,雖然宣稱是0.4.0版本,卻相當(dāng)?shù)某墒旌头€(wěn)定,已經(jīng)在許多嵌入式系統(tǒng)開發(fā)過程中被采用。由于其開發(fā)源代碼,其支持的開發(fā)板眾多。**遺憾的是并不支持我們現(xiàn)在學(xué)習(xí)所用samsung 44B0X的開發(fā)板。
為什么我們需要u-boot?顯然可以將ucLinux直接燒入flash,從而不需要額外的引導(dǎo)裝載程序(bootloader)。但是從軟件升級的角度以及程序修補(bǔ)的來說,軟件的自動更新非常重要。事實(shí)上,引導(dǎo)裝載程序(bootloader)的用途不僅如此,但僅從軟件的自動更新的需要就說明我們的開發(fā)是必要的。
同時,u-boot移植的過程也是一個對嵌入式系統(tǒng)包括軟硬件以及操作系統(tǒng)加深理解的一個過程。 2.vivi介紹(****http://www.mizi.com/developer) vivi是韓國mizi 公司開發(fā)的bootloader, 適用于ARM9處理器。 Vivi有兩種工作模式:啟動加載模式和下載模式。
啟動加載模式可以在一段時間后(這個時間可更改)自行啟動linux內(nèi)核,這時vivi的默認(rèn)模式。在下載模式下,vivi為用戶提供一個命令行接口,通過接口可以使用vivi提供的一些命令,如下: 命令 功能 Load 把二進(jìn)制文件載入Flash或RAM Part 操作MTD分區(qū)信息。顯示、增加、刪除、復(fù)位、保存MTD分區(qū) Param 設(shè)置參數(shù) Boot 啟動系統(tǒng) Flash 管理Flash,如刪除Flash的數(shù)據(jù) vivi代碼分析 vivi的代碼包括arch,init,lib,drivers和include等幾個目錄,共200多條文件。
Vivi主要包括下面幾個目錄: arch:此目錄包括了所有vivi支持的目標(biāo)板的子目錄,例如s3c2410目錄。 drivers:其中包括了引導(dǎo)內(nèi)核需要的設(shè)備的驅(qū)動程序(MTD和串口)。MTD目錄下分map、nand和nor三個目錄。 init:這個目錄只有main.c和version.c兩個文件。
和普通的C程序一樣,vivi將從main函數(shù)開始執(zhí)行。 lib:一些平臺公共的接口代碼,比如time.c里的udelay()和mdelay()。 include:頭文件的公共目錄,其中的s3c2410.h定義了這塊處理器的一些寄存器。Platform/**dk2410.h定義了與開發(fā)板相關(guān)的資源配置參數(shù),我們往往只需要修改這個文件就可以配置目標(biāo)板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。
bootloader
ARM Linux啟動流程大致為:bootloader —->kernel—->root filesystem。bootloader 是一上電就拿到cpu 的控制權(quán)的,而bootloader實(shí)現(xiàn)了硬件的初始化,為kernel的運(yùn)行創(chuàng)造好條件。
那么bootloader一般都會做些什么 / ====================================================== / 【 實(shí)現(xiàn)細(xì)節(jié) 】 工作在啟動加載模式時,uboot會自動執(zhí)行bootcmd命令, 比如: uboot首先把內(nèi)核鏡像拷貝到內(nèi)存地址為0x80000000的地方,然后執(zhí)行bootm 0x80000000命令。
bootm命令實(shí)際上調(diào)用的是do_bootm_linux函數(shù): 內(nèi)核調(diào)用函數(shù):theKernel (0,bd->bi_arch_number, bd->bi_boot_params); the kernel其實(shí)不是個函數(shù),而是指向內(nèi)核入口地址的指針,把它強(qiáng)行轉(zhuǎn)化為帶三個參數(shù)的函數(shù)指針,會把三個參數(shù)保存到通用寄存器中,實(shí)現(xiàn)了向kernel傳遞信息的功能,在這個例子里,會把R0賦值為0,R1賦值為機(jī)器號 R2賦值為啟動參數(shù)數(shù)據(jù)結(jié)構(gòu)的首地址。 這里的machine id,是讓內(nèi)核知道是哪個CPU,從而調(diào)用對應(yīng)的初始化函數(shù)。 【 繼續(xù)深入 】 1、需要在設(shè)備樹文件中聲明,單板需要什么樣的machine_desc,(可以是一系列的字符串,kernel會從左到右匹配這些字符串,一直找到匹配的為止); 2、kernel中需要表明每個machine_desc需要表明它能支持哪些單板,用字符串表明支持哪些單板。 MACHINE_START和 MACHINE_END實(shí)際上被展開成一個結(jié)構(gòu)體 3、 kernel有多個machine_desc跟設(shè)備樹文件dts中的compatible 吻合,選擇哪個? 設(shè)備樹文件dts中compatible(屬性值)從左到右的屬性值與kernel中的machine_desc結(jié)構(gòu)體中的dt_compat成員進(jìn)行比較,匹配成功之后就不會再進(jìn)行匹配(設(shè)備書的屬性值從左右匹配優(yōu)先級依次降低百科)。
boot block的主要功能有哪些?
請教boot block到底是什么?1.對于zlg的開發(fā)板,boot block的內(nèi)容是否就是開發(fā)模板里的那些文件編譯成ELF再傳到Flash中?2.還有用戶程序是放在Flash的哪個地方?Flash開始64字節(jié)和結(jié)尾8k字節(jié)之間?ZLGARM: boot block 是芯片設(shè)計(jì)廠家在LPC2000系列微控制器內(nèi)部固化的一段代碼,用戶無法對其修改和刪除。這段代碼在芯片復(fù)位后首先被運(yùn)行,其功能主要是判斷運(yùn)行那個存儲器上的程序、檢查用戶代碼是否有效、判斷芯片是否被加密、芯片的在應(yīng)用以及在系統(tǒng)編程功能。
——————————————————————–ARM上的Bootloader的具體實(shí)現(xiàn)BootLoader簡介: 當(dāng)完成用戶程序的編譯并下載到目標(biāo)板上運(yùn)行時,總是要首先進(jìn)行存儲器的映射,然后通過 ADS(或 SDT)調(diào)試環(huán)境下載,顯然,這個過程對普通用戶來說顯得特別煩瑣,然而,要在裸板(沒有任何程序的系統(tǒng)板)上調(diào)試運(yùn)行程序,也只能采用這種方法。
如果能在用戶設(shè)計(jì)的系統(tǒng)板上燒寫一段 BootLoader程序,就可以將該過程屏蔽起來,讓用戶通過一些簡單的操作,就可完成程序的下載、調(diào)試等工作。在嵌入式系統(tǒng)中,BootLoader的作用與 PC 機(jī)上的 BIOS 類似,通過 BootlLoader可以完成對系統(tǒng)板上的主要部件如 CPU、SDRAM、Flash、串行口等進(jìn)行初始化,也可以下載文件到系統(tǒng)板、對 Flash 進(jìn)行擦除與編程。事實(shí)上,一個功能完善的 BootLoader 已經(jīng)相當(dāng)于一個微型的操作系統(tǒng)了。
怎么知道手機(jī)BootLoader沒有
每個手機(jī)里面都有bootloader,要不廠商生產(chǎn)的時候怎么往里面燒錄內(nèi)核及文件系統(tǒng)呢;bootloader有兩種模式:1.下載模式,就是廠商可以往里燒程序的那種,這是開發(fā)調(diào)試模式。2.自舉引導(dǎo)模式,就是手機(jī)啟動的時候引導(dǎo)操作系統(tǒng)的模式。
通常每個廠家都有相應(yīng)的switch或者按鍵等功能區(qū)分進(jìn)入那個模式。