新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Bootloader在AT91RM9200系統(tǒng)中的實(shí)現(xiàn)

Bootloader在AT91RM9200系統(tǒng)中的實(shí)現(xiàn)

作者: 時間:2012-05-21 來源:網(wǎng)絡(luò) 收藏

基于ARM920T核的芯片以其豐富的內(nèi)部外設(shè),高達(dá)200MIPS的處理速度,以及它溫度范圍寬的特點(diǎn),在工業(yè)控制領(lǐng)域嵌入式開發(fā)中大有應(yīng)用的空間。Bootloader是用來引導(dǎo)操作系統(tǒng)的引導(dǎo)裝載程序,用來初始化硬件設(shè)備、確立內(nèi)存空間的映射,為最終引導(dǎo)操作系統(tǒng)內(nèi)核提供一個合適的軟硬件環(huán)境。它嚴(yán)重地依賴硬件環(huán)境,往往因使用的芯片、外部設(shè)備、操作系統(tǒng)的內(nèi)核配置而不同,它的實(shí)現(xiàn)是嵌入式開發(fā)中必不可少的環(huán)節(jié)。

實(shí)現(xiàn)適合本系統(tǒng)的引導(dǎo)程序方法有兩種:一是自行開發(fā)的,其特點(diǎn)是可以使這個程序在滿足要求的基礎(chǔ)上占用盡量的小的空間,但是工作量較大,開發(fā)周期延長,除了一些特殊要求的情況,工程開發(fā)中一般不會自行編寫;二是使用已有的代碼進(jìn)行移植,特點(diǎn)是工作量小,有vivi、U- boot、Blob等很多開源的可用,這些程序支持的PowerPC,ARM,MIPS等多種平臺,開發(fā)者只需做相對較少的移植工作就可以,出于工程開發(fā)角度,往往采取這種方式。

筆者開發(fā)了基于的雷達(dá)監(jiān)控分機(jī)測試板,本文將以此嵌入式板為例,介紹用GNU工具開發(fā)ARM程序的方法,探討如何利用這種方法編寫自己的,并詳細(xì)地介紹了的移植步驟和要點(diǎn)。

1硬件特點(diǎn)

1.1處理器啟動特點(diǎn)

AT91系列處理器有片內(nèi)和片外兩種啟動模式[1],支持地址的重映射,在ARM芯片中具有代表性。

AT91RM9200內(nèi)部集成有16K字節(jié)的SRAM和128K字節(jié)的ROM。若是BMS引腳為低電平則從NCS0所接的外部的Flash芯片啟動。若BMS引腳為高電平則從內(nèi)部ROM啟動,ROM中固化了FirmWare,這段固化的程序先后自動檢測SPI連接的DataFlash,TWI連接的EEPROM的,EBI連接的8位的并行Flash芯片是否有合法的程序,如果有則放入SRAM中執(zhí)行,如果沒有檢測到,便初始化調(diào)試串口和USB的設(shè)備端口,分別支持Xmodem和DFU協(xié)議的文件下載,可以將用戶傳送的文件放入內(nèi)部SRAM中[2]。

由于本芯片支持地址Remap(地址重映射),在下載完后將SRAM的地址由0x0020_0000重新映射到0x0000_0000,將內(nèi)部ROM地址由0x0000_0000映射到0x0010_0000,然后從地址0x0000_0000的內(nèi)部SRAM開始執(zhí)行。

1.2 Bootloader的下載和燒寫

很多ARM芯片同AT91系列芯片一樣,支持Remap,這就為使用串口下載程序和對Flash的燒寫提供了方便。這種芯片在使用 bootloader之前一般需要兩個前期的引導(dǎo)程序。本系統(tǒng)中使用了loader.bin和boot.bin兩個程序:其中l(wèi)oader.bin運(yùn)行于內(nèi)部RAM,用來向SDRAM下載程序并運(yùn)行;boot.bin固化在flash的起始地址下(如圖1所示)用來解壓引導(dǎo)Flash中的程序。

設(shè)置跳線,使系統(tǒng)上電后從內(nèi)部啟動,通過串口下載loader.bin程序,該程序的大小一定要小于16K字節(jié),即內(nèi)部SRAM的容量。如上文所述,下載后會運(yùn)行它,由這個程序負(fù)責(zé)通過Xmodem協(xié)議將u-boot.bin程序下載到SDRAM中并運(yùn)行,開發(fā)者再通過的cp命令將 boot.bin和u-boot.bin的壓縮文件u-boot.gz燒寫入Flash,下次從外部啟動時就可以直接啟動U-boot了。其中 boot.bin,實(shí)現(xiàn)將u-boot.gz的解壓裝入SDRAM并且執(zhí)行。

ATMEL公司提供了針對他們出的該款芯片開發(fā)板的boot和loader的代碼,可以從網(wǎng)上下載到,開發(fā)者可以對比一下參數(shù)設(shè)置,如果必要的話要對一些參數(shù)進(jìn)行修改。

下面是這兩個程序中比較關(guān)鍵的參數(shù)。loader當(dāng)中的關(guān)鍵參數(shù)是AT91C_UBOOT_BASE_ADDRESS,用Xmodem協(xié)議接收的文件將存放在這個地址下。它的宏定義在main.h中:

#define AT91C_UBOOT_BASE_ADDRESS 0x21F00000 。

Boot中的關(guān)鍵的參數(shù)是:

#define SRC 0x10010000

/*在flash中的u-boot.gz的地址*/

#define DST 0x21F00000

/*uboot.gz解壓后要copy到SDRAM中的地址*/

#define LEN 0x020000

/*解壓后的大小(字節(jié))*/

這些參數(shù)根據(jù)具體情況可能需要修改,特別是SRC要和U-boot中的相關(guān)設(shè)置一致,具體參數(shù)將在3中介紹。圖1是Flash存儲器的空間分配情況,分別列出了各個地址段的用途。


上一頁 1 2 3 下一頁

關(guān)鍵詞: bootloader U-boot AT91RM9200

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉