一文了解u-boot !
U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目。U-Boot的作用是系統(tǒng)引導(dǎo)。
U-Boot從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實上,不少U-Boot源碼就是根據(jù)相應(yīng)的Linux內(nèi)核源程序進行簡化而形成的,尤其是一些設(shè)備的驅(qū)動程序,這從U-Boot源碼的注釋中能體現(xiàn)這一點。
一、uboot的最終目的
在說uboot之前,先看一下PC機是怎么啟動的?
pc上電,bios(引導(dǎo)操作系統(tǒng))、識別C盤、運行應(yīng)用程序。
同樣的在嵌入系統(tǒng)里面,啟動過程:一上電的時候,uboot(引導(dǎo)Linux內(nèi)核)、掛接根文件系統(tǒng)、運行應(yīng)用程序。
小結(jié):uboot的最終的目的->啟動內(nèi)核
二、怎么讓嵌入式系統(tǒng)使用uboot
① 先來介紹一下補?。?
什么是補???
所謂的補丁就是我們在原碼包上做了什么修改,我們將這些修改單獨列出來放到一個文件,然后發(fā)布的時候,把補丁文件給別人家即可。
怎么打補???
?tar?xjf?u-boot-1.1.6.tar.bz2 ?cd?u-boot-1.1.6/ ?patch?-p1?<?../u-boot-1.1.6_jz2440.patch
-p1 是忽略配置文件中的第一個參數(shù),即,u-boot-1.1.6/和u-boot-1.1.6_jz2440/
補丁文件中的 ---
表示原來的代碼,+++
表示修改后的代碼;比如: ?
② 打完補丁之后,要想uboot支持哪些單板,需要配置。通過make 100ask24x0_config
來配置我們此款JZ2440V3單板,然后再make
編譯uboot。
總結(jié)一下:
tar?xjf?u-boot-1.1.6.tar.bz2?//解壓縮 patch?-p1?<?../u-boot-1.1.6_jz2440.patch?//打補丁 make?100ask24x0_config?//配置 make?//編譯
③ 編譯完成以后,會生成一個u-boot.bin的文件,如圖:
然后通過dnw或者eop將這個bin文件燒寫到開發(fā)板上面,燒寫完成以后在串口上可以看到它的啟動信息;
三、uboot命令使用
在嵌入式操作系統(tǒng)中,bootloader有很多種,我們這里使用的是uboot;
① 輸入help或?可以查看uboot有哪些命令;
如果想查看具體哪個命令的用法,可以輸入“? 命令名”即可。
如何查看uboot有哪些環(huán)境變量?
使用print
命令
② 怎么設(shè)置環(huán)境變量?
使用set
命令
總結(jié)一下:
?/help?+?命令?//查詢命令的用法 print????????//查看當前環(huán)境變量 set??????????//修改環(huán)境變量 save?????????//保存環(huán)境變量 reset????????//重啟uboot boot?????????//引導(dǎo)內(nèi)核
四、uboot功能介紹 ① 對于PC機來說windows操作系統(tǒng)存在于硬盤上面,BIOS從硬盤上讀出windows操作系統(tǒng),然后放到DDR(SDRAM的一種 DDR SDRAM); ② 而對于嵌入linux來說,一般從flash中讀取出內(nèi)核,然后放到SDRAM中去。 可以看出,uboot要具備的基本功能:能夠讀取flash、寫入SDRAM之前要初始化SDRAM、啟動內(nèi)核。 在開發(fā)階段,我們想讓它增加更多的功能,比如說加入寫flash的功能,因為在開發(fā)中(為了開發(fā)方便),內(nèi)核也是通過uboot利用網(wǎng)絡(luò)或USB下載把內(nèi)核燒寫到開發(fā)板中去的。
總結(jié)一下uboot的功能:
五、uboot的源碼結(jié)構(gòu):board ?開發(fā)板相關(guān) ?對應(yīng)不同配置的(即使CPU相同),smdk2410、sbc2410x ?cpu ?平臺相關(guān) ?對應(yīng)不同的CPU,arm920t、arm925t、i386等;在它們的子目錄下仍可以細分,比如arm920t就有at91rm9200、s3c24x0 ?lib_i386 類似 ?平臺相關(guān) ?某一架構(gòu)下通用的文件 ?include ?通用的函數(shù) ?頭文件和開發(fā)板配置文件,開發(fā)板的配置文件都放在include/configs目錄下,U-boot沒有make menuconfig類似的菜單來進行可視化配置,需要手動地修改配置文件中的宏定義 ?lib_generic ?通用的函數(shù) ?通用的庫函數(shù),比如printf等 ?common ?通用的函數(shù) ?通用的函數(shù),多是對下一層驅(qū)動程序的進一步封裝 ?disk ?通用的設(shè)備驅(qū)動程序 ?硬盤接口程序 ?drivers ?通用的設(shè)備驅(qū)動程序 ?各類具體設(shè)備的驅(qū)動程序,基本上可以通用,它們通過宏從外面引入平臺/開發(fā)板相關(guān)的函數(shù) ?dtt ?通用的設(shè)備驅(qū)動程序 ?數(shù)字溫度測量器或者傳感器的驅(qū)動 ?fs ?通用的設(shè)備驅(qū)動程序 ?文件系統(tǒng) ?nand_spl ?通用的設(shè)備驅(qū)動程序 ?U-Boot一半從ROM、NOR Flash等設(shè)備啟動,現(xiàn)在開始支持從NAND Flash啟動,但是支持的CPU種類還不多 ?net ?通用的設(shè)備驅(qū)動程序 ?各種網(wǎng)絡(luò)協(xié)議 ?post ?通用的設(shè)備驅(qū)動程序 ?上電自檢程序 ?rtc ?通用的設(shè)備驅(qū)動程序 ?實時時鐘的驅(qū)動 ?doc ?文檔 ?開發(fā)、使用文檔 ?examples ?示例程序 ?一些測試程序,可以使用U-Boot下載后運行 ?tools ?工具 ?制作S-Record、U-Boot格式映象的工具,比如mkimage U-boot中各目錄間也是有層次結(jié)構(gòu)的,雖然這種分法不是絕對的,但是在移植過程中可以提供一些指導(dǎo)意義
這些源碼是怎么組織起來構(gòu)成一個uboot的,最簡單的方法就是分析它的makefile文件。