摘要:該文介紹了U-Boot的頂層目錄結(jié)構(gòu)及其特點(diǎn),并以S3C2410為例子說明了U-Boot在ARM平臺(tái)下的移植。
關(guān)鍵詞:ARM平臺(tái);U-Boot移植
中圖分類號(hào):TP316文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)04-0837-02
Transplanting of U-Boot under the ARM Platform
FENG Zhong-ling1, TONG Ying-hua2
(1.Department of Physics,Qinghai Normal University, Xining 810008, China; 2.Department of Computer, Qinghai Normal University, Xining 810008, China)
Abrstract: In this paper, U-Boot top-level directory structure and its characteristics are discriped, and the transplanting of U-Boot in the ARM platform be showed for the S3C2410 as special examples.
Key words: ARM platform; U-Boot transplanting
1 引言
Bootloader是嵌入式操作系統(tǒng)內(nèi)核運(yùn)行之前的一段程序,它類似于PC機(jī)中的BIOS程序,可以完成硬件的初始化,并建立內(nèi)存空間的映射圖的功能,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),為最終調(diào)用系統(tǒng)內(nèi)核做好準(zhǔn)備,是嵌入式系統(tǒng)中非常重要的一部分,也是系統(tǒng)運(yùn)行工作的必要組成部分。在嵌入式系統(tǒng)中常見的Bootloader有:VIVI、Blob、RedBoot、ARMboot、U-Boot等。本文將對(duì)U-Boot及其在ARM平臺(tái)下的移植作較詳細(xì)的介紹。
2U-boot工程簡(jiǎn)介
最早,德國(guó)DENX軟件工程中心的Wolfgang Denk基于8xxrom的源碼創(chuàng)建了PPCBOOT工程,并且不斷添加處理器的支持。后來,Sysgo Gmbh把ppcboot移植到ARM平臺(tái)上,創(chuàng)建了ARMboot工程。然后以PPCBOOT工程和ARMboot工程為基礎(chǔ),創(chuàng)建了U-Boot工程。
現(xiàn)在U-Boot已經(jīng)能支持PowerPC、ARM、X86、MIPS體系結(jié)構(gòu)的上百種開發(fā)板,已經(jīng)成為功能最多、靈活性最強(qiáng)并且開發(fā)最積極的開放源代碼Bootloader。目前仍由DENX的Wolfgang Denk維護(hù)。
U-Boot的源碼包可以從http://sourceforge.net/project/u-boot下載,還可以訂閱該網(wǎng)站活躍的U-Boot Users郵件論壇,這個(gè)郵件論壇對(duì)于U-Boot的開發(fā)和使用都很有幫助。
3U-Boot源碼結(jié)構(gòu)
U-Boot源程序包在頂層目錄下有18個(gè)子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規(guī)則,可以分為三類:
第一類目錄與處理處理器體系結(jié)構(gòu)或者開發(fā)板硬件直接相關(guān);
第地類目錄是一些通用的函數(shù)或者驅(qū)動(dòng)程序;
第三類目錄是U-Boot的應(yīng)用程序、工具或者文檔。
表1列出了U-Boot頂層目錄下各級(jí)目錄存放原則。
U-Boot的源代碼包含對(duì)幾十種處理器、數(shù)百種開發(fā)板的支持。可是對(duì)于特定的開始板,配置編譯過程只需其中的部分程序。
4 ARM平臺(tái)下的U-Boot移植
移植需在事先已建立好硬件開發(fā)環(huán)境并在PC上安裝好針對(duì)ARM的交叉編譯工具的情況下進(jìn)行。
在移植前,首先需要先分析一下U-Boot已經(jīng)支持的開發(fā)板,為了使U-Boot支持新的開發(fā)板,一種簡(jiǎn)便的做法是在U-Boot已經(jīng)支持的開發(fā)板中選擇一種和目標(biāo)板接近的,并在其基礎(chǔ)上進(jìn)行修改,選擇的原則是:首先處理器相同,其次處理結(jié)構(gòu)相同,然后是以太網(wǎng)等外圍接口。這里具體以S3C2410 arm920t處理器為例,具體分析其移植過程。
U-Boot-1.1.2版本已支持S3C2410,移植主要步驟如下:
4.1 下載U-Boot包并解壓到指定目錄
$ cd/u-boot
$ tarjxvfu-boot-1.1.2.tar.bz2
$ cdu-boot-1.1.2
4.2 配置Makefile文件
1) 在Makefile中修改交叉編譯工具鏈前綴CROSS_COMPILE:
CROSS_COMPILE = arm–linux–
2) 修改Makefile文件,開發(fā)板添加新的配置選項(xiàng),使用已有的配置項(xiàng)目為例。
smdk2410_config : unconfig
@ . /mkconfig $(@ : _config = )armarm920tNULLs3c2410
參考上面兩行,添加下面兩行。
s3c2410_config : unconfig
@ . /mkconfig $(@ : _config = )armarm920tNULLS3C2410
4.3 移植U-Boot-1.1.2支持開發(fā)板
1) 在board目錄中建立s3c2410目錄,并復(fù)制smdk2410目錄中的內(nèi)容。
$ cpsmdk2410/* s3c2410
并將部分文件重命名。如下:
board/s3c2410/config.mk
board/s3c2410/flash.c
board/s3c2410/s3c2410.c
board/s3c2410/Makefile
board/s3c2410/memsetup.S
board/s3c2410/u-boot.lds
2) 為開發(fā)板添加新的配置文件,再修改。
$ cpinclude/configs/smdk2410.h include/configs/s3c2410.h
如果是為一顆新的CPU移植,還要?jiǎng)?chuàng)建一個(gè)新的目錄存放CPU相關(guān)的代碼。
4.4 配置開發(fā)板
$ make s3c2410_config
4.5 編譯U-Boot
$ make
執(zhí)行make命令,編譯成功可以得到U-Boot映像。有些錯(cuò)誤是跟配置選項(xiàng)有關(guān)系的,通常打開一些功能選項(xiàng)會(huì)帶來一些錯(cuò)誤,一開始可以盡量跟參考板配置相同。
4.6 添加驅(qū)動(dòng)或者功能選項(xiàng)
在能編譯通過的基礎(chǔ)上,還要實(shí)現(xiàn)U-Boot的以太網(wǎng)接口,F(xiàn)lash擦寫等。
4.7 調(diào)試U-Boot源代碼
直到U-Boot在開發(fā)板上正常啟動(dòng)。
4.8 通過JTAG 電纜將目標(biāo)板與計(jì)算機(jī)并口連接
燒寫U-Boot到flash,燒寫完成后,復(fù)位實(shí)驗(yàn)板,串口終端就會(huì)顯示U-Boot的啟動(dòng)信息。
5 結(jié)束語
本文較為詳細(xì)地介紹了U-Boot源代碼構(gòu)成,以及為開發(fā)者提供了在ARM平臺(tái)下移植U-Boot的過程與方法,在移植過程中強(qiáng)調(diào)其可操作,步驟清晰,對(duì)嵌入式系統(tǒng)的Bootloader開發(fā)有重要的參考意義。
參考文獻(xiàn):
[1] 李亞鋒,歐文盛.ARM嵌入式Linux系統(tǒng)開發(fā)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[2] 馬忠梅,李善平.ARM Linux嵌入式系統(tǒng)教程[M].北京:北京航空航天大學(xué)出版社,2006.
[3] 孫紀(jì)坤,張小全.嵌入式Linux系統(tǒng)開發(fā)——基于ARM[M].北京:人民郵電出版社,2006.
[4] 李巖,榮盤祥.基于S3C44B0X嵌入式uCLinux系統(tǒng)原理及應(yīng)用[M].北京:清華大學(xué)出版社,2005.