基于AT91RM9200的BootLoader設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于AT91RM9200的BootLoader設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于AT91RM9200的BootLoader設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于AT91RM9200的BootLoader設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于AT91RM9200的BootLoader設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于AT91RM9200的BootLoader設(shè)計(jì)與實(shí)現(xiàn)

摘要:隨著微技術(shù)和機(jī)技術(shù)的,微處理器芯片的功能越來(lái)越強(qiáng)大,嵌入式技術(shù)也越來(lái)越受到人們的關(guān)注。但是在嵌入式系統(tǒng)設(shè)計(jì)過(guò)程中,BootLoader的設(shè)計(jì)是遇到的第一個(gè)難點(diǎn)。本文以AT91RM9200為例,介紹BootLoader的一般實(shí)現(xiàn)流程以及功能更為強(qiáng)大的u-boot的移植。

關(guān)鍵詞:BootLoaderAT91RM9200u-boot移植嵌入式系統(tǒng)

一、引言

嵌入式系統(tǒng)是以為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁減來(lái)適應(yīng)系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗要求嚴(yán)格的專用計(jì)算機(jī)系統(tǒng)。隨著各種微處理器功能越來(lái)越強(qiáng)大以及軟件上操作系統(tǒng)的支持,使得整個(gè)嵌入式系統(tǒng)擁有了完整構(gòu)架。近年來(lái)各種嵌如式操作系統(tǒng)也是層出不窮以適應(yīng)各種不同功能的微處理器。然而如何加載操作系統(tǒng)卻成了大家嵌入式系統(tǒng)遇到的第一個(gè)攔路虎。這就是BootLoader,他把嵌入式硬件和嵌入式操作系統(tǒng)銜接起來(lái),對(duì)于嵌入式系統(tǒng)后續(xù)軟件的開發(fā)十分重要,在整個(gè)開發(fā)中也占有相當(dāng)大的比例。BootLoader的功能是引導(dǎo)和加載內(nèi)核鏡像,是在系統(tǒng)復(fù)位后執(zhí)行的第一段代碼,BootLoader首先完成系統(tǒng)硬件的初始化,包括時(shí)鐘的設(shè)置、存儲(chǔ)區(qū)映射、設(shè)置堆棧指針,以及完成處理器和周邊電路和設(shè)備正常運(yùn)行所要的初始化工作,創(chuàng)建內(nèi)核需要的信息并將系統(tǒng)的軟硬件帶到一個(gè)合適的狀態(tài),然后跳轉(zhuǎn)到操作系統(tǒng)內(nèi)核入口,將系統(tǒng)控制權(quán)交給操作系統(tǒng),在此之后系統(tǒng)的運(yùn)行和BootLoader再無(wú)任何關(guān)系。u-boot是當(dāng)前比較流行、功能強(qiáng)大的BootLoader,可以支持多種體系結(jié)構(gòu)。

二、BootLoader主要任務(wù)及典型結(jié)構(gòu)

一個(gè)嵌入式Linux系統(tǒng)從軟件的角度看通??梢苑譃樗膫€(gè)層次:引導(dǎo)加載程序、Linux內(nèi)核、文件系統(tǒng)、用戶應(yīng)用程序。如圖2.1所示

BootLoader是依賴于硬件實(shí)現(xiàn)的,特別是在嵌入式系統(tǒng)中。不同的體系結(jié)構(gòu)需求的BootLoader是不同的;除了體系結(jié)構(gòu),BootLoader還依賴于具體的嵌入式板級(jí)設(shè)備的配置。也就是說(shuō),對(duì)于兩塊不同的嵌入式板而言,即使它們基于相同的CPU構(gòu)建,運(yùn)行在其中一塊電路板上的BootLoader,未必能夠運(yùn)行在另一塊電路開發(fā)板上。

BootLoader的啟動(dòng)過(guò)程可以是單階段的,也可以是多階段的。通常多階段的BootLoader能提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的BootLoader大多數(shù)是二階段的啟動(dòng)過(guò)程,也即啟動(dòng)過(guò)程可以分為stage1和stage2兩部分。

用戶應(yīng)用程序

文件系統(tǒng)

Linux內(nèi)核

引導(dǎo)加載程序

圖2.1

依賴于CPU體系結(jié)構(gòu)的代碼,比如設(shè)備初始化、開關(guān)中斷、初始化時(shí)鐘等,通常都放在stage1中,而且都用匯編來(lái)實(shí)現(xiàn),以達(dá)到短小精悍的目的。而stage2通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)較復(fù)雜的功能,而且代碼有較好的可讀性和可移植性。

BootLoader的stage1通常包括以下步驟:

(1)初始化各種模式的堆棧和寄存器。

(2)初始化系統(tǒng)時(shí)鐘、系統(tǒng)總線速率及一些系統(tǒng)常量。

(3)初始化存儲(chǔ)控制器,如FLASH和SDRAM的大小、類型、數(shù)據(jù)寬度、地址范圍等

(4)初始化各種I/O口和各種控制器。

(5)為stage2做準(zhǔn)備。

BootLoader的stage2通常包括以下步驟:

(1)初始化本階段要使用到的硬件設(shè)備。

(2)檢測(cè)系統(tǒng)內(nèi)存映射(memorymap).

(3)將內(nèi)核映像和根文件系統(tǒng)映像從flash拷貝SDRAM中。

(4)為內(nèi)核設(shè)置啟動(dòng)參數(shù)。

(5)調(diào)用內(nèi)核。

綜合起來(lái),整個(gè)BootLoader的實(shí)現(xiàn)流程如圖2.2所示:

基本硬件初始化

拷貝階段2鏡像至RAM

擴(kuò)展功能所需硬件初始化

圖2.2

三、BootLoader的實(shí)現(xiàn)

u-boot是當(dāng)前比較流行、功能強(qiáng)大的BootLoader,而且是通用的免費(fèi)開放源碼的BootLoader程序,可以支持多種體系結(jié)構(gòu)。u-boot是由德國(guó)的工程師WolfgangDenk從8XXROM代碼發(fā)展而來(lái)的。最新版本是u-boot-1.1.4?,F(xiàn)以ATMEL公司生產(chǎn)的AT91RM9200為例,介紹如何在以AT91RM9200為核心處理器的最小系統(tǒng)上的u-boot-1.1.0的移植。本系統(tǒng)包括:

flash:4MB

sdram:32MB

1.u-boot源代碼目錄結(jié)構(gòu)

(1)board:和一些已有開發(fā)板的文件,比如Makefile和u-boot.lds等都和具體開發(fā)板的硬件和地址分配有關(guān)。

(2)common:與體系結(jié)構(gòu)無(wú)關(guān)文件,實(shí)現(xiàn)各種命令的C文件。

(3)cpu:CPU相關(guān)文件,其中的子目錄都是以u(píng)-boot所支持的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個(gè)特定的子目錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設(shè)置指令Cache和數(shù)據(jù)Cache等;interrupt.c設(shè)置系統(tǒng)的各種中斷和異常,比如快速中斷、開關(guān)中斷、時(shí)鐘中斷、軟件中斷、預(yù)取中止和未定義指令等;start.S是U-BOOT啟動(dòng)時(shí)執(zhí)行的第一個(gè)文件,它主要是設(shè)置系統(tǒng)堆棧和工作方式,為進(jìn)入C程序奠定基礎(chǔ)。

(4)disk:disk驅(qū)動(dòng)的分區(qū)處理代碼。

(5)doc:u-boot的說(shuō)明文檔。

(6)drivers:通用設(shè)備驅(qū)動(dòng)程序,比如各種網(wǎng)卡、支持CFI的Flash、串口和USB總線等。

(7)fs:支持文件系統(tǒng)的文件,U-BOOT現(xiàn)在支持cramfs、fat、fdos、jffs2和registerfs。

(8)include:頭文件,還有對(duì)各種硬件平臺(tái)支持的匯編文件,系統(tǒng)的配置文件和對(duì)文件系統(tǒng)支持的文件。

(9)net:與有關(guān)的代碼,BOOTP協(xié)議、TFTP協(xié)議、RARP協(xié)議和NFS文件系統(tǒng)的實(shí)現(xiàn)。

(10)lib_arm:與ARM體系結(jié)構(gòu)相關(guān)的代碼。

(11)tools:創(chuàng)建S-Record格式文件和U-BOOTimages的工具。

2.對(duì)u-boot-1.1.0的修改和移植

為了使u-boot-1.1.0支持新的開發(fā)板,u-boot已經(jīng)支持的開發(fā)板中選擇一種接近的進(jìn)行修改。由于u-boot-1.1.0已經(jīng)支持ARM-920T內(nèi)核,所以選擇基于ARM-920T內(nèi)核的at91rm9200為模板。相關(guān)的源代碼在board/at91rm9200/下。

(1)與at91rm9200相關(guān)的u-boot代碼

①在include/configs/at91rm9200dk.h它包括開發(fā)板的CPU、系統(tǒng)時(shí)鐘、SDRAM、Flash系統(tǒng)及其它相關(guān)配置信息。

#definePHYS_SDRAM0X20000000

#definePHYS_SDRAM_SIZE0X2000000

#definePHYS_FLASH_10x10000000

#definePHYS_FLASH_SIZE0x400000

②在include/asm-arm/AT91RM9200.h,該文件描述了at91rm9200寄存器的結(jié)構(gòu)及若干宏定義。具體要4。暫不用修改。

③在include/flash.h中,該文件定義了flash的屬性

④)在cpu/at91rm9200/目錄下別為cpu.c、interrupts.c和serial.c等文件。

⑤在board/at91rm9200dk/目錄下分別為flash.c、at91rm9200dk.c,config.mk,Makefile,u-boot.lds。

⑥flash.c:u-boot讀、寫和刪除Flash設(shè)備的源代碼文件。由于不同開發(fā)板中Flash存儲(chǔ)器的種類各不相同,所以,修改flash.c時(shí)需參考相應(yīng)的Flash芯片手冊(cè)。它包括如下幾個(gè)函數(shù):

unsignedlongflash_init(void),F(xiàn)lash初始化;

voidflash_print_info(flash_info_t*info),打印Flash信息;

intflash_erase(flash_info_t*info,ints_first,ints_last),F(xiàn)lash擦除;

volatilestaticintwrite_dword(flash_info_t*info,ulongdest,ulongdata),F(xiàn)lash寫入;

intwrite_buff(flash_info_t*info,uchar*src,ulongaddr,ulongcnt),從內(nèi)存復(fù)制數(shù)據(jù)。

⑦u-boot.lds:linkerscripte,設(shè)置u-boot中各個(gè)目標(biāo)文件的連接地址。

(2)網(wǎng)卡設(shè)備控制程序

在drivers/目錄中網(wǎng)口設(shè)備控制程序cs8900,bcm570x等,還可以添加其他網(wǎng)卡驅(qū)

inteth_init(bd_t*bd):初始化設(shè)備;

voideth_halt(void):關(guān)閉網(wǎng)絡(luò)設(shè)備;

inteth_send(volatilevoid*packet,intlen):發(fā)送數(shù)據(jù)包;

inteth_rx(void):接收數(shù)據(jù)包。

(3)修改Makefile文件

在u-boot-1.0.0/Makefile中加入

at91rm9200dk_config:unconfig

./mkconfig$(@:_config=)armat91rm9200at91rm9200dk

其中“arm”是CPU的種類,at91rm9200是ARMCPU對(duì)應(yīng)的代碼目

at91rm9200dk是自己開發(fā)板對(duì)應(yīng)的目錄。

四、生成目標(biāo)文件

先運(yùn)行makeclean,

[zeng@localhostu-boot-1.1.0]$makeclean

然后運(yùn)行at91rm9200dk_config,

[zeng@localhostu-boot-1.1.0]$makeat91rm9200dk_config

Configuringforat91rm9200board...

再運(yùn)行make,

[zeng@localhostu-boot-1.1.0]$make

之后會(huì)生成三個(gè)文件:

1.u-boot——ELF格式的文件,可以被大多數(shù)Debug程序識(shí)別;

2.u-boot.bin——二進(jìn)制bin文件,純粹的U-BOOT二進(jìn)制執(zhí)行代碼,不保存ELF格式和調(diào)試信息。這個(gè)文件一般用于燒錄到用戶開發(fā)板中;

3.u-boot.srec——MotorolaS-Record格式,可以通過(guò)串行口下載到開發(fā)板中。

以上工作完成我們可以通過(guò)串口將u-boot.bin下載到主板的SDRAM中,它會(huì)自動(dòng)執(zhí)行,并出現(xiàn)uboot>,這里我們可以通過(guò)串口把u-boot.bin,u-boot.bin.gz下載到主板,再用u-boot的提供的寫flash功能分別把u-boot.bin,u-boot.bin.gz寫入到flash中,完成以上工作后,對(duì)主板跳線選擇片外啟動(dòng),板子復(fù)位后會(huì)自動(dòng)啟動(dòng)u-boot

五、結(jié)語(yǔ)

BootLoader是操作系統(tǒng)和硬件的樞紐,它為操作系統(tǒng)內(nèi)核的啟動(dòng)提供了必要的條件和參數(shù)。在移植過(guò)程中,開發(fā)人員除了要掌握BootLoader的結(jié)構(gòu)和工作流程外,還要對(duì)相關(guān)硬件有一定了解。,移植的u-boot已經(jīng)能夠穩(wěn)定地運(yùn)行在開發(fā)板上,而且可以通過(guò)F

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論