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