首頁 首頁首頁
首頁 關於我們關於我們關於我們關於我們 新聞動態新聞動態新聞動態新聞動態 產品專區產品專區產品專區產品專區 ARMARMARMARM開發板開發板開發板 解決方案開發板解決方案解決方案解決方案 技術支持技術支持技術支持技術支持 下載中心下載中心下載中心 聯繫我們下載中心聯繫我們聯繫我們聯繫我們
‖
‖
‖
‖技術支持技術支持技術支持技術支持 ARM開發資料
ARM選型指導 DSP開發資料 入門文檔 嵌入式研究 嵌入式操作系統 常見問題
‖
‖
‖
‖產品快速通道產品快速通道產品快速通道產品快速通道 --請選擇產品-- --請選擇產品--
當前位置 當前位置 當前位置
當前位置::::首頁 >> 技術支持 >>在ARM9開發板上移植BootLoader
在 在 在
在ARM9開發板上移植 開發板上移植 開發板上移植BootLoader 開發板上移植
作者:admin添加時間:2008-2-3點擊數: 238
摘要摘要
摘要摘要:::: 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上有一群自由開發人員對其進行維護和開發,它的項目
主頁是http://sourceforge.net/projects/U-BOOT 。 U-BOOT的最新版本源代碼可以在 Sourceforge的CVS服務器中匿名獲得。
#cvs -d:pserver:[email protected]:/cvsroot/U-BOOT login
#cvs -z6 -d:pserver:[email protected]:/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執行就可以了。
①編輯如下的腳本example.script。
echo
echo Network Configuration:
echo --- echo Target:
printenv ipaddr hostname echo
echo Server:
printenv serverip rootpath echo
②用tools/mkimage對腳本進行封裝。
# mkimage -A ARM -O linux -T script -C none -a 0 -e 0 -n "autoscr example script" -d example.script /tftpboot/example.img
Image Name: autoscr example script Created: Wes Sep 8 01:15:02 2004
Image Type: ARM Linux Script (uncompressed) Data Size: 157 Bytes = 0.15 kB = 0.00 MB Load Address: 0x00000000
Entry Point: 0x00000000 Contents:
Image 0: 149 Bytes = 0 kB = 0 MB
③在U-BOOT中加載並執行這個腳本。
WT-ARM9# tftp 100000 /tftpboot/example.img ARP broadcast 1
TFTP from server 10.0.0.2; our IP address is 10.0.0.99 Filename "/tftpboot/TQM860L/example.img".
Load address: 0x100000 Loading: #
done
Bytes transferred = 221 (dd hex) WT-ARM9# autoscr 100000
## Executing script at 00100000
Network Configuration:
--- Target:
ipaddr=10.0.0.99 hostname=ARM Server:
serverip=10.0.0.2 rootpath=/nfsroot WT-ARM9#
◆支持WatchDog、LCD logo和狀態指示功能等。 如果系統支持splash screen,U- BOOT啟動時,會把這個圖像顯示到LCD上,給用戶更友好的感覺。
◆支持MTD和文件系統。 U-BOOT作為一種強大的BootLoader,它不僅支持MTD,而 且可以在MTD基礎上實現多種文件系統,比如cramfs、fat和jffs2等。
◆支持中斷。 由於傳統的BootLoader都分為stage1和stage2,所以在stage2中添加中 斷處理服務十分困難,比如BLOB;而U-BOOT是把兩個部分放到了一起,所以添加中 斷服務程序就很方便。
◆詳細的開發文檔。 由於大多數BootLoader都是開源項目,所以文檔都不是很充分。
U-BOOT的維護人員意識到了這個問題,充分記錄了開發文檔,所以它的移植要比 BLOB等缺少文檔的BootLoader方便。
2對對對對U-BOOT-1.1.0的修改的修改的修改的修改
為了使U-BOOT-1.1.0支持新的開發板,一種簡便的做法是在U-BOOT已經支持的開發 板中選擇一種接近的進行修改。 由於U-BOOT-1.10不支持ARM-922T內核,所以選擇 基於ARM-920T內核的smdk2400為模板。 相關的源代碼在board/smdk2400/下。
2.1支持ARM-922T內核的代碼修改
修改以下代碼,使U-BOOT支持ARM-922t內核。
①在include/目錄下新建文件ARM922t.h,內容如下:
#ifndef __ARM922T_H__
#define __ARM922T_H__
#endif
②在include/目錄下新建文件wt-ARM9.h,該文件描述了ARM922T中Timer、UART等 寄存器的結構及若干宏定義。 具體內容要參考相關處理器手冊。
③在cpu/目錄下新建目錄ARM922t,將目錄ARM920t下的內容複製後,參考手冊分別 修改cpu.c、interrupts.c和serial.c,其它文件不修改。
2.2開發板的支持
建立自己開發板的目錄和相關文件。
①在include/configs目錄中添加頭文件lh7a400.h。 這個文件是lh7a400開發板的配置 文件,它包括開發板的CPU、系統時鐘、RAM、Flash系統及其它相關的配置信息。
其格式可參考include/configs/smdk2400.h。
②在board/目錄下新建wt-ARM9目錄,創建如下文件:flash.c、lhmemsetup.c、wt- ARM9.c、Makefile和u-boot.lds。
◆ flash.c。 U-BOOT讀、寫和刪除Flash設備的源代碼文件。 由於不同開發板中Flash 存儲器的種類各不相同,所以,修改flash.c時需參考相應的Flash芯片手冊。 它包括如 下幾個函數:
unsigned long flash_init (void ),Flash初始化;
void flash_print_info (flash_info_t *info),打印Flash信息;
int flash_erase (flash_info_t *info, int s_first, int s_last),Flash擦除;
volatile static int write_dword (flash_info_t *info, ulong dest, ulong data),Flash寫 入;
int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt),從內存複製 數據。
◆ lhmemsetup.c。 初始化時鐘、SMC控制器和SDRAM控制器。
◆ wt-ARM9.c。 設置各種總線時鐘,打開數據Cache和指令Cache,並設置相關內存 參數。
◆ Makefile。 直接拷貝board/smdk2400/Makefile,作如下修改:
OBJS := wt-ARM9.o flash.o lhmemsetup.o
◆ u-boot.lds。 設置U-BOOT中各個目標文件的連接地址,直接拷貝 board/smdk2400/u-boot.lds,作如下修改:
.text {
cpu/ARM922t/start.o (.text)
*(.text) }
2.3添加網口設備控製程序
在drivers/目錄中添加網口設備控製程序dm9000.c和dm9000.h,其中dm9000.c主要包 括以下函數:
int eth_init (bd_t *bd),初始化網絡設備;
void eth_halt (void),關閉網絡設備;
int eth_send (volatile void *packet,int len),發送數據包;
int eth_rx (void)接收數據包。
用中斷方式處理數據包的收發,因此還定義了另外兩個函數:
void InitInterrupt (void) ,中斷初始化;
void dm9000_irq (void) ,中斷處理。
以上兩個函數在cpu/ARM922t/interrupts.c中被調用,最後在drivers/Makefile中加入 dm9000.o。
2.4修改Makefile
在u-boot-1.1.0/Makefile中加入lh7a400_config : unconfig
@./mkconfig $(@:_config=) ARM ARM922t wt-ARM9
其中“ARM”是CPU的種類, ARM922t是ARM CPU對應的代碼目錄,wt-ARM9是自己 開發闆對應的目錄。
交叉編譯器安裝在/opt/ARM/3.3/bin/目錄下,所以把CROSS_COMPILE設置成相應的 路徑:
export CROSS_COMPILE = /opt/ARM/3.3/bin/ARM-elf-
2.5生成目標文件
先運行make clean,
[zeng@localhost u-boot-1.1.0]$make clean 然後運行make lh7a400_config,
[zeng@localhost u-boot-1.1.0]$ make lh7a400_config Configuring for lh7a400 board...
再運行make,
[zeng@localhost u-boot-1.1.0]$make 之後會生成三個文件:
u-boot——ELF格式的文件,可以被大多數Debug程序識別;
u-boot.bin——二進制bin文件,純粹的U-BOOT二進制執行代碼,不保存ELF格式和調 試信息。 這個文件一般用於燒錄到用戶開發板中;
u-boot.srec——Motorola S-Record格式,可以通過串行口下載到開發板中。
2.6測試
通過JTAG口將u-boot.bin燒寫到Flash的零地址,復位後執行u-boot。 若運行正常,會 從串口返回如下信息:
U-Boot 1.1.0 (Aug 21 2004 ?18:44:37)
U-BooT code: C3F80000 -> C3FA51A0 BSS: -> C3FA96EC IRQ Stack: c3f1ff7c
FIQ Stack: c3f1ef7c RAM Configuration:
Bank #0: c0000000 8 MB Bank #1: c1000000 8 MB
……
Flash: 32 MB In: serial Out: serial Err: serial WT-ARM9 #
輸入help得到所有命令列表,help command列出該命令的功能。 緊接著測試Flash和 網卡,如果都正常工作的話,表明移植U-BOOT的工作基本完成,可以接著調試內核 和文件系統。
結語結語 結語結語
BootLoader是操作系統和硬件的樞紐,它為操作系統內核的啟動提供了必要的條件和 參數。 在移植過程中,開發人員除了要掌握BootLoader的結構和工作流程外,還要對 相關硬件有一定的了解。 目前,筆者移植的U-BOOT已經能夠穩定地運行在開發板 上,而且可以通過Flash和網絡加載內核和文件系統,為後續開發,特別是驅動程序的 開發奠定了良好的基礎。
參考文獻參考文獻 參考文獻參考文獻
1杜春雷. ARM體系結構與編程.北京:清華大學出版社,2003
2 LH7A400 Universal SOC Advance User’s Guide: SHARP Inc,2002 3 Karim Yaghmour. Building Embedded Linux System. O’Reilly, 2004
聯繫我們 | 人才招聘 | 責任聲明 | 網站地圖
中國·深圳深圳市福田區福虹路世界貿易廣場B座12F/13F聯繫電話:+86-83346939,83662100,83676393/6323 Copyright©1993-2008 Dragonmen.net All Right Reserved.深圳龍人嵌入式產品事業部版權所有粵ICP備08012900號