| 摘要 BootLoader(引導(dǎo)裝載程序)是嵌入式系統(tǒng)軟件開發(fā)的第一個環(huán)節(jié),它把操作系統(tǒng)和硬件平臺銜接在一起,對于嵌入式系統(tǒng)的后續(xù)軟件開發(fā)十分重要,在整個開發(fā)中也占有相當(dāng)大的比例。U-BOOT是當(dāng)前比較流行、功能強(qiáng)大的BootLoader,可以支持多種體系結(jié)構(gòu)。LH7A400是Sharp公司生產(chǎn)的一款基于ARM922T內(nèi)核的32位RISC芯片,本文詳細(xì)介紹U-BOOT的功能、特點(diǎn)以及在LH7A400處理器上的移植過程。 關(guān)鍵詞 BootLoader U-BOOT移植 LH7A400 ARM922T 引言 本文以U-BOOT為例,介紹了如何在ARM9開發(fā)板上移植BootLoader的過程。LH7A400學(xué)習(xí)板是旋極公司推出的一款高性能嵌入式開發(fā)板,其采用的處理器LH7A400是Sharp公司生產(chǎn)的一款基于ARM922T內(nèi)核的32位RISC芯片。該芯片集成了高性能的32位RISC處理器核ARM922T(運(yùn)算速度200MHz,總線速度100MHz) ,能使處理速度達(dá)到每秒220百萬條指令(MIPS),能耗為1.33mW/MIPS,可以在低電壓狀態(tài)下工作(核心1.8V,輸入/輸出3.3 V),片內(nèi)帶有鎖相回路(PLL)和低能耗核心。此外該芯片還包括: 16KB 高速緩存(Cache), 存儲器管理單元(MMU), 80KB 靜態(tài)存儲器(SRAM), 彩色液晶顯示控制器(LCD), 直接存儲控制器(10通道DMA), 異步串行口控制器(UART), 同步串行口控制器(SSP), PCMCIA控制器, AC97聲音控制器, 智能卡控制器, 多媒體卡控制器, 電池控制器, USB控制器和時鐘/供電管理器。值得一提的是,LH7A400是一款寬溫芯片,其工作溫度范圍為-40℃~+85℃(降低時鐘頻率),可廣泛應(yīng)用于無線手持設(shè)備、智能電話、PDA、家庭娛樂控制器、PocketPC及各種工控設(shè)備。 該學(xué)習(xí)板還包括如下硬件:由2片16位Flash (32MB)和2片16位的SDRAM(64M)構(gòu)成32位寬的高速存儲器結(jié)構(gòu);10/100M自適應(yīng)網(wǎng)絡(luò)芯片DM9000;Sharp 3.5’TFT LCD彩屏;觸摸屏;USB Host/Device;CF卡插槽;全功能JTAG接口等。 1 U-BOOT簡介 U-BOOT是由德國的工程師Wolfgang Denk從8XXROM代碼發(fā)展而來的,它支持很多處理器,比如PowerPC、ARM、MIPS和x86。目前,U-BOOT源代碼在sourceforge網(wǎng)站的社區(qū)服務(wù)器中,Internet上有一群自由開發(fā)人員對其進(jìn)行維護(hù)和開發(fā),它的項(xiàng)目主頁是http://sourceforge.net/projects/U-BOOT。U-BOOT的最新版本源代碼可以在Sourceforge的CVS服務(wù)器中匿名獲得。 #cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/U-BOOT login #cvs -z6 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/U-BOOT \ co -P modulename 1.1 U-BOOT源代碼目錄結(jié)構(gòu) ◆ board:和一些已有開發(fā)板有關(guān)的文件,比如Makefile和u-boot.lds等都和具體開發(fā)板的硬件和地址分配有關(guān)。 ◆ common:與體系結(jié)構(gòu)無關(guān)的文件,實(shí)現(xiàn)各種命令的C文件。 ◆ cpu:CPU相關(guān)文件,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設(shè)置指令Cache和數(shù)據(jù)Cache等;interrupt.c設(shè)置系統(tǒng)的各種中斷和異常,比如快速中斷、開關(guān)中斷、時鐘中斷、軟件中斷、預(yù)取中止和未定義指令等;start.S是U-BOOT啟動時執(zhí)行的第一個文件,它主要是設(shè)置系統(tǒng)堆棧和工作方式,為進(jìn)入C程序奠定基礎(chǔ)。 ◆ disk:disk驅(qū)動的分區(qū)處理代碼。 ◆ doc:文檔。 ◆ drivers:通用設(shè)備驅(qū)動程序,比如各種網(wǎng)卡、支持CFI的Flash、串口和USB總線等。 ◆ fs:支持文件系統(tǒng)的文件,U-BOOT現(xiàn)在支持cramfs、fat、fdos、jffs2和registerfs。 ◆ include:頭文件,還有對各種硬件平臺支持的匯編文件,系統(tǒng)的配置文件和對文件系統(tǒng)支持的文件。 ◆ net:與網(wǎng)絡(luò)有關(guān)的代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)的實(shí)現(xiàn)。 ◆ lib_arm:與ARM體系結(jié)構(gòu)相關(guān)的代碼。 ◆ tools:創(chuàng)建S-Record格式文件 和U-BOOT images的工具。 1.2 U-BOOT的特點(diǎn) U-BOOT支持SCC/FEC以太網(wǎng)、OOTP/TFTP引導(dǎo)、IP和MAC的預(yù)置功能,這一點(diǎn)和其它BootLoader(如BLOB和RedBoot等)類似。但U-BOOT還具有一些特有的功能。 ◆ 在線讀寫Flash、DOC、IDE、IIC、EEROM、RTC,其它的BootLoader根本不支持IDE和DOC的在線讀寫。 ◆ 支持串行口kermit和S-record下載代碼,U-BOOT本身的工具可以把ELF32格式的可執(zhí)行文件轉(zhuǎn)換成為 S-record格式,直接從串口下載并執(zhí)行。 ◆ 識別二進(jìn)制、ELF32、uImage格式的Image,對Linux引導(dǎo)有特別的支持。U-BOOT對Linux 內(nèi)核進(jìn)一步封裝為uImage。封裝如下: #{CROSS_COMPILE}-objcopy -O binary -R.note -R.comment -S vmlinux \ linux.bin #gzip -9 linux.bin #tools/mkimage -A arm -O linux -T kernel -C gzip -a 0xc0008000 -e\0xc0008000 -n “Linux-2.4.20” -d linux.bin.gz /tftpboot/uImage 即在Linux內(nèi)核鏡像vmLinux前添加了一個特殊的頭,這個頭在include/image.h中定義,包括目標(biāo)操作系統(tǒng)的種類(比如Linux,VxWorks等)、目標(biāo)CPU的體系機(jī)構(gòu)(比如ARM、PowerPC等)、映像文件壓縮類型(比如gzip、bzip2等)、加載地址、入口地址、映像名稱和映像的生成時間。當(dāng)系統(tǒng)引導(dǎo)時,U-BOOT會對這個文件頭進(jìn)行CRC校驗(yàn),如果正確,才會跳到內(nèi)核執(zhí)行。如下所示: WT-ARM9# bootm 0xc1000000 |