U-Boot在LPC2210上的移植分析
5.4 board/dx2210開發(fā)板相關文件
在這個目錄中主要包含dx2210.c、config.mk、flash.c、memsetup.S、u-boot.lds幾個文件。在 dx2210.c文件中主要工作為初始化開發(fā)板,在文件中編寫int board_init(void)函數(shù)定義各個復用I/O端口的信息、初始化RAM芯片等完成初始化工作。由于在u-boot代碼中是用抽象成一種結構體來描述開發(fā)板硬件信息以便于移植工作,因此在文件中修改:
gd->bd->bi_arch_number=MACH_TYPE_LPC2210; //開發(fā)板架構ID號
gd->bd->bi_boot_params=0x81000100; //傳遞給ucinux內核的參數(shù)
gd->bd->bi_dram[0].start=PHYS_SDRAM_1;
gd->bd->bi_dram[0].size=PHYS_SDRAM_1_SIZE; //RAM內存配置
u-boot.lds是給Linker程序使用的配置文件,主要修改部分:
SECTIONS
{ .=0x80000000; //起始地址為0x80000000
.=ALIGN(4); //4字節(jié)對齊
.text :
{ cpu/LPC2210/start.o (.text)
*(.text) //text段的起始是start.S的text段
memsetup.S匯編文件主要是用來初始化RAM,在memsetup.S文件中配置開發(fā)板用到的存儲器組,然后根據(jù)MT45W4MW16芯片手冊驅動RAM;Flash芯片的驅動代碼在flash.c文件中,由于開發(fā)板的Flash芯片SST39VF160與B2開發(fā)板芯片相同,直接復制后即可。
6.生成目標文件完成移植工作
移植工作完成后在SHELL環(huán)境下依次運行如下命令:make clean; make dx2210_config;make。成功編譯后生成4個映像文件分別是:u-boot.hex文件: U-Boot映像原始的INTEL HEX格式文件;u-boot.map文件:U-Booty映像的符號表;u-boot.srec文件:U-Boot映像的S-Record格式文件;System.map文件: U-Boot映像的符號表。使用Flash燒寫工具將u-boot.hex文件按照16進制格式下載到Nor Flash中,再將uclinux內核映像文件和根文件系統(tǒng)影響文件init.img燒寫到Nor Flash的指定地址后,可以看到如圖2所示的存儲空間分布:
圖2 存儲空間映射
其中u-boot映像文件存放在Flash的起始地址0x80000000處,相當于程序的邏輯地址0x0處與硬件確定的復位向量相符合;u-boot在stage2部分將Flash中的內核映像和根文件系統(tǒng)映像復制到從0x81008000開始的2MB內存范圍內,空出來的32K內存空間主要來存放uclinux內核的一些全局的數(shù)據(jù)結構,如啟動參數(shù)和內核頁表等信息。
7.結束語
本文首先闡述了Bootloader引導程序得基本原理,在介紹了開放源代碼Bootloader程序U-Boot軟件基礎上,以LPC2210 ARM7處理器及其相關開發(fā)板為例,完成了U-Boot軟件的移植工作。前期的啟動引導程序的移植工作是嵌入式系統(tǒng)開發(fā)的重要環(huán)節(jié),在此基礎上可以更加深入的進行嵌入式系統(tǒng)開發(fā)。
本文作者創(chuàng)新點:本文在詳細的分析U-Boot軟件的基礎上,針對U-Boot軟件本身并不支持的ARM7 LPC2210,本文介紹了在U-Boot軟件中添加相關代碼的方法并完成移植的實例,為更加深入的后續(xù)嵌入式開發(fā)打下良好基礎。
參考文獻:
[1] The Denx U-Boot and Linux Guide. http://www.denx.de/twiki/bin/view/DULG/Manual.
[3] 周立功等.ARM嵌入式系統(tǒng)基礎教程[M].北京航空航天大學出版社.2005.1; 129-154
[4] 孫瓊.嵌入式Linux應用程序開發(fā)詳解[M].人民郵電出版社.2006.7; 108-128
[5] 白偉平,包啟亮.基于ARM的嵌入式Boot Loader淺析[J].微計算機信息,2006,4:99-100
評論