用U-BOOT構建嵌入式系統的引導裝載程序

admin @ 2014-03-14 , reply:0

摘 要:BootLoader(引導裝載程序)是嵌入式系統軟體開發的第一個環節,它把操作系統和硬體平台銜接在一起,對於嵌入式系統的後續軟體開發十分重要,在整個開發中也佔有相當大的比例。U-BOOT是當前比較流行、功能強大的BootLoader,可以支持多種體系結構。LH7A400是Sharp公司生產的一款基於ARM922T內核的32位RISC晶元,本文詳細介紹U-BOOT的功能、特點以及在LH7A400處理器上的移植過程。


關鍵詞:BootLoader U-BOOT移植 LH7A400 ARM922T


引 言:

  本文以U-BOOT為例,介紹了如何在ARM9開發板上移植BootLoader的過程。LH7A400學習板是旋極公司推出的一款高性能嵌入式開發板,其採用的處理器LH7A400是Sharp公司生產的一款基於ARM922T內核的32位RISC晶元。該晶元集成了高性能的32位RISC處理器核ARM922T(運算速度200MHz,匯流排速度100MHz) ,能使處理速度達到每秒220百萬條指令(MIPS),能耗為1.33mW/MIPS,可以在低電壓狀態下工作(核心1.8V,輸入/輸出3.3 V),片內帶有鎖相迴路(PLL)和低能耗核心。此外該晶元還包括: 16KB 高速緩存(Cache), 存儲器管理單元(MMU), 80KB 靜態存儲器(SRAM), 彩色液晶顯示控制器(LCD), 直接存儲控制器(10通道DMA), 非同步串列口控制器(UART), 同步串列口控制器(SSP), PCMCIA控制器, AC97聲音控制器, 智能卡控制器, 多媒體卡控制器, 電池控制器, USB控制器和時鐘/供電管理器。值得一提的是,LH7A400是一款寬溫晶元,其工作溫度範圍為-40℃~+85℃(降低時鐘頻率),可廣泛應用於無線手持設備、智能電督、PDA、家庭娛樂控制器、PocketPC及各種工控設備。
該學習板還包括如下硬體:由2片16位Flash (32MB)和2片16位的SDRAM(64M)構成32位寬的高速存儲器結構;10/100M自適應網路晶元DM9000;Sharp 3.5’TFT LCD彩屏;觸摸屏;USB Host/Device;CF卡插槽;全功能JTAG介面等。

1 U-BOOT簡介

  U-BOOT是由德國的工程師Wolfgang Denk從8XXROM代碼發展而來的,它支持很多處理器,比如PowerPC、ARM、MIPS和x86。目前,U-BOOT源代碼在sourceforge網站的社區伺服器中,Internet上有一群自由開發人員對其進行維護和開發。U-BOOT的最新版本源代碼可以在Sourceforge的CVS伺服器中匿名獲得。
#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源代碼目錄結構

◆ board:和一些已有開發板有關的文件,比如Makefile和u-boot.lds等都和具體開發板的硬體和地址分配有關。
◆ common:與體系結構無關的文件,實現各種命令的C文件。
◆ cpu:CPU相關文件,其中的子目錄都是以U-BOOT所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設置指令Cache和數據Cache等;interrupt.c設置系統的各種中斷和異常,比如快速中斷、開關中斷、時鐘中斷、軟體中斷、預取中止和未定義指令等;start.S是U-BOOT啟動時執行的第一個文件,它主要是設置系統堆棧和工作方式,為進入C程序奠定基礎。
◆ disk:disk驅動的分區處理代碼。
◆ doc:文檔。
◆ drivers:通用設備驅動程序,比如各種網卡、支持CFI的Flash、串口和USB匯流排等。
◆fs:支持文件系統的文件,U-BOOT現在支持cramfs、fat、fdos、jffs2和registerfs。
◆ include:頭文件,還有對各種硬體平台支持的彙編文件,系統的配置文件和對文件系統支持的文件。
◆ net:與網路有關的代碼,BOOTP協議、TFTP協議、RARP協議和NFS文件系統的實現。
◆ lib_arm:與ARM體系結構相關的代碼。
◆ tools:創建S-Record格式文件 和U-BOOT images的工具。

1.2 U-BOOT的特點

  U-BOOT支持SCC/FEC乙太網、OOTP/TFTP引導、IP和MAC的預置功能,這一點和其它BootLoader(如BLOB和RedBoot等)類似。但U-BOOT還具有一些特有的功能。

◆ 在線讀寫Flash、DOC、IDE、IIC、EEROM、RTC,其它的BootLoader根本不支持IDE和DOC的在線讀寫。
◆ 支持串列口kermit和S-record下載代碼,U-BOOT本身的工具可以把ELF32格式的可執行文件轉換成為 S-record格式,直接從串口下載並執行。
◆ 識別二進位、ELF32、uImage格式的Image,對Linux引導有特別的支持。U-BOOT對Linux 內核進一步封裝為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內核鏡像vmLinux前添加了一個特殊的頭,這個頭在include/image.h中定義,包括目標操作系統的種類(比如Linux,VxWorks等)、目標CPU的體系機構(比如ARM、PowerPC等)、映像文件壓縮類型(比如gzip、bzip2等)、載入地址、入口地址、映像名稱和映像的生成時間。當系統引導時,U-BOOT會對這個文件頭進行CRC校驗,如果正確,才會跳到內核執行。如下所示:
WT-ARM9# bootm 0xc1000000
## Checking Image at 0xc100000 ...
Image Name: Linux-2.4.20
Created: 2004-07-02 22:10:11 UTC
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 550196 Bytes = 537 kB = 0 MB
Load Address: 0xc0008000
Entry Point: 0xc0008000
Verifying Checksum ... OK
Uncompressing Kernel Image ……… OK
◆ 單任務軟體運行環境。U-BOOT可以動態載入和運行獨立的應用程序,這些獨立的應用程序可以利用U-BOOT控制台的I/O函數、內存申請和中斷服務等。這些應用程序還可以在沒有操作系統的情況下運行,是測試硬體系統很好的工具。
◆ 監控(minitor)命令集:讀寫I/O,內存,寄存器、內存エ外設測試功能等
◆ 腳本語言支持(類似BASH腳本)。利用U-BOOT中的autoscr命令,可以在U-BOOT中運行“腳本”。首先在文本文件中輸入需要執行的命令,然後用tools/mkimage封裝,然後下載到開發板上,用autoscr執行就可以了。



[admin via 研發互助社區 ] 用U-BOOT構建嵌入式系統的引導裝載程序已經有3209次圍觀

http://cocdig.com/docs/show-post-670.html