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

下載本文檔

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

文檔簡介

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

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

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

一、引言

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

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

一個嵌入式Linux系統(tǒng)從軟件的角度看通常可以分為四個層次:引導(dǎo)加載程序、Linux內(nèi)核、文件系統(tǒng)、用戶應(yīng)用程序。如圖2.1所示

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

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

用戶應(yīng)用程序

文件系統(tǒng)

Linux內(nèi)核

引導(dǎo)加載程序

圖2.1

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

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

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

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

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

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

(5)為stage2做準備。

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

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

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

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

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

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

綜合起來,整個BootLoader的實現(xiàn)流程如圖2.2所示:

基本硬件初始化

拷貝階段2鏡像至RAM

擴展功能所需硬件初始化

圖2.2

三、BootLoader的實現(xiàn)

u-boot是當前比較流行、功能強大的BootLoader,而且是通用的免費開放源碼的BootLoader程序,可以支持多種體系結(jié)構(gòu)。u-boot是由德國的工程師WolfgangDenk從8XXROM代碼發(fā)展而來的。最新版本是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)無關(guān)文件,實現(xiàn)各種命令的C文件。

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

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

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

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

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

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

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

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

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

2.對u-boot-1.1.0的修改和移植

為了使u-boot-1.1.0支持新的開發(fā)板,u-boot已經(jīng)支持的開發(fā)板中選擇一種接近的進行修改。由于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)時鐘、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存儲器的種類各不相同,所以,修改flash.c時需參考相應(yīng)的Flash芯片手冊。它包括如下幾個函數(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中各個目標文件的連接地址。

(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對應(yīng)的代碼目

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

四、生成目標文件

先運行makeclean,

[zeng@localhostu-boot-1.1.0]$makeclean

然后運行at91rm9200dk_config,

[zeng@localhostu-boot-1.1.0]$makeat91rm9200dk_config

Configuringforat91rm9200board...

再運行make,

[zeng@localhostu-boot-1.1.0]$make

之后會生成三個文件:

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

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

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

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

五、結(jié)語

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

溫馨提示

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

評論

0/150

提交評論