摘 要:Bootloader是ARM嵌入式系統(tǒng)的重要組成部分。對于不同內(nèi)核的系統(tǒng)板,其Bootloader也不盡相同,針對每個裸板都要對其燒寫針對自己的Bootloader。在此簡要介紹S3C2410及其兩種啟動方式,著重分析S3C2410從NAND FLASH啟動的過程中,對各個內(nèi)部功能模塊進行的初始化過程,并設(shè)計出基于S3C2410嵌入式系統(tǒng)的Bootloader。通過在線仿真及實際測試表明,該Bootloader具有良好的穩(wěn)定性、實時性和可移植性。
關(guān)鍵詞:ARM;Bootloader;嵌入式系統(tǒng);啟動方式
中圖分類號:TP311文獻標識碼:B
文章編號:1004-373X(2010)02-044-03
Analysis and Design of Bootloader Based on ARM9
WANG Jingcun,GAO Feng
(College of Information Science and Engineering,Wuhan University of Science and Technology,Wuhan,430081,China)
Abstract:Bootloader is an important part of ARM embedded system.For different kernel system board,its Bootloader is also different.Each bare_board should programmer its own Bootloader.Therefore,the development of specific Bootloader is particularly important,the superiority of Bootloader directly affects on the performance of embedded systems.The S3C2410 and its two start_up mode are introduced,focusing on analysing the process during the S3C2410 starts from NAND FLASH,the initializing process of each internal modules.A Bootloader based on S3C2410 embedded system is designed.Through online simulation and practical tests show that the Bootloader has good stability,real_time performance and portability.
Keywords:ARM;Bootloader;embedded system;start_up mode
0 引 言
Bootloader是在嵌入式操作系統(tǒng)內(nèi)核運行之前運行的一小段程序,它相當于PC機中的BIOS(Basic Input/Output System)。但在嵌入式系統(tǒng)中,出于對經(jīng)濟性方面的考慮,一般不配置像BIOS那樣的固件程序,因此就需要自己完成這部分的工作,這就是所必需的開機程序。通過Bootloader這一程序,可以初始化硬件設(shè)備,建立系統(tǒng)的內(nèi)存空間映射圖,從而將系統(tǒng)的軟、硬件環(huán)境設(shè)定在一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核、運行用戶應(yīng)用程序準備好正確的環(huán)境。
1 S3C2410開發(fā)板
該系統(tǒng)以S3C2410為開發(fā)版,S3C2410是三星公司的一款基于ARM920T內(nèi)核的16/32位RISC嵌入式微處理器,主要面向手持設(shè)備以高性價比、低功耗的應(yīng)用。運行頻率可達到203 MHz。其內(nèi)部資源包括了LCD控制器、SDRAM控制器、NAND FLASH控制器、SD卡接口、USB Host和USB Device接口、IIS總線接口、SPI總線接口以及內(nèi)部PLL時鐘倍頻器等[1]。
2 啟動方式
S3C2410支持從NOR FLASH啟動和從NAND FLASH啟動兩種方式。但比較而言,NAND FLASH具有容量大、比NOR FLASH價格低等特點。系統(tǒng)采用NAND FLASH與SDRAM組合,可以獲得非常高的性價比,應(yīng)用面也較廣。故該系統(tǒng)采用從NAND FLASH啟動的方式[2]。
S3C2410具有四種啟動方式可以通過OM[1:0]管腳進行選擇,如表1所示。
表1 OM0,OM1管教邏輯組合的作用
OM1(操作模式1)OM0(操作模式0)導入ROM數(shù)據(jù)寬度OM1(操作模式1)OM0(操作模式0)導入ROM數(shù)據(jù)寬度
00NAND
FLASH Mode1032 b
0116 b11Test Mode
因此選擇將OM[1:0]管腳置為00,將引導代碼和操作系統(tǒng)鏡像存放在外部的NAND FLASH中,并從NAND FLASH啟動。為了支持從NAND FLASH啟動,S3C2410具備一個內(nèi)部SRAM緩沖區(qū),叫作“Steppingstone”。當處理器在這種啟動模式下復位時,內(nèi)置的NAND FLASH將訪問控制接口,并將代碼自動加載到這個內(nèi)部SRAM(此時該SRAM定位于起始地址空間0x00000000,容量為4 KB)上運行。之后,SRAM中的引導程序?qū)⒉僮飨到y(tǒng)內(nèi)核加載到SDRAM中,使其在SDRAM中運行。啟動完畢后,4 KB的“Steppingstone”就可以用于其他用途。如果從其他方式啟動,啟動ROM就要定位于內(nèi)存的起始地址空間0x00000000,處理器直接在ROM上運行啟動程序,而4 KB啟動SRAM被定位于內(nèi)存地址的0x40000000處。
3 啟動流程及具體實現(xiàn)
3.1 啟動流程分析
Bootloader程序由匯編代碼和C代碼兩部分組成,執(zhí)行過程也分為兩個階段。第一階段是匯編部分,這部分程序與硬件聯(lián)系密切且不便于移植,要完成的工作包括:設(shè)置中斷異常向量表、初始化看門狗等硬件設(shè)備、配置存儲器、設(shè)置堆棧等,然后跳轉(zhuǎn)到C語言程序的入口處。第二階段即C代碼部分,這部分的主要任務(wù)是:初始化本階段所需要的外部設(shè)備,配置SDRAM空間、調(diào)用NAND FLASH的API函數(shù),并將用戶程序代碼從NAND FLASH存儲器中拷貝到SDRAM中,最后跳轉(zhuǎn)到用戶程序的入口處[3]。啟動流程如圖1所示。
圖1 S3C2410的啟動流程
3.2 Bootloader具體分析及實現(xiàn)
3.2.1 Bootloader的第一階段
(1) 設(shè)置中斷向量表
b ResetHandler;復位異常中斷,被定位在起始地址
b HandlerUndef;未定義指令中斷
b HandlerSWI ;軟件中斷服務(wù)
b HandlerPabort;指令預(yù)取異常中斷
b HandlerDabort;數(shù)據(jù)異常中斷
b.;保留
b HandlerFIQ;快速中斷服務(wù)程序
在ARM體系中,從地址0x0~0x1C的32 B是中斷異常向量表[4]。每個中斷占據(jù)向量表中4 B的存儲空間。一旦有異常中斷發(fā)生,ARM處理器便把PC指針強制置為向量表中對應(yīng)中斷類型的地址值,使程序跳轉(zhuǎn)到相應(yīng)的中斷處理程序處執(zhí)行。當有多個中斷發(fā)生時,處理器優(yōu)先處理優(yōu)先級高的中斷[5]。當硬件系統(tǒng)啟動時,程序從0x0地址處跳轉(zhuǎn)到標號為ResetHandler的程序處,使CPU進入引導程序。
(2) 初始化看門狗和外圍電路。
主要實現(xiàn)S3C2410的看門狗、中斷、MPLL和UPLL配置寄存器的初始化[6]。根據(jù)工作頻率設(shè)置PLL寄存器,S3C2410的CPU默認的工作主頻為12 MHz,使用PLL電路可以產(chǎn)生更高的主頻供CPU及外圍器件使用。S3C2410有兩個PLL:MPLL和UPLL。其中UPLL用于USB設(shè)備,MPLL用于CPU及其他外圍器件[7]。
ldr r0,=WTCON ;關(guān)閉看門狗
ldr r1,=0x0
str r1,[r0]
ldr r0,=INTMSK
ldr r1,=0xffffffff;屏蔽所有中斷
str r1,[r0]
ldr r0,=INTSUBMSK
ldr r1,=0x7ff ;屏蔽所有子中斷
str r1,[r0]
;調(diào)節(jié)LOCKTIME寄存器,減少PLL鎖時間
ldr r0,=LOCKTIME
ldr r1,=0xffffff
str r1,[r0]
;配置MPLL控制寄存器
ldr r0,=MPLLCON
ldr r1,=((0x5c<<12)+(0x4<<4)+0x0);
Fin=12 MHz,F(xiàn)out=200 MHz
str r1,[r0]
;配置UPLL控制寄存器
ldrr0,=UPLLCON
ldrr1,=((0x48<<12)+(0x3<<4)+0x2);
Fin=12 MHz,F(xiàn)out=48 MHz
strr1,[r0]
(3) 配置存儲控制器,為BootLoader的第二個階段的代碼準備內(nèi)存空間
addr0,pc,#SMRDATA _ (.+ 8)
ldr r1,=BWSCON;存儲控制寄存器地址
add r2,r0,#52;SMRDATA結(jié)束地址
0
ldr r3,[r0],#4
str r3,[r1],#4
cmp r2,r0
bne %B0
(4) 初始化堆棧
ldr sp,=SVCStack;初始化管理模式下的堆棧寄存器
(5) 初始化數(shù)據(jù)區(qū)。
ARM的數(shù)據(jù)由RO,RW,ZI三個段組成。其中,RO為代碼段,RW為已經(jīng)初始化的全局變量,ZI是未初始化的全局變量[8]。RO部分可以在FLASH中執(zhí)行,也可以轉(zhuǎn)移到RAM中執(zhí)行,而RW和ZI必須在RAM中執(zhí)行。數(shù)據(jù)區(qū)的初始化就是要把RW段從FLASH復制到RAM中,并將ZI段清零[9]。
ldr r0,=|ImageMYMMYMROMYMMYMLimit|;RO段的末地址
ldr r1,=|ImageMYMMYMRWMYMMYMBase|;RW段的起始地址
ldr r3,=|ImageMYMMYMZIMYMMYMBase|;Zero初始化區(qū)的起始地址
cmp r0,r1 ;檢查裝載地址和執(zhí)行地址是否相同
beq %F2;相同則不拷貝
1
cmp r1,r3 ;執(zhí)行拷貝操作
ldrcc r2,[r0],#4
strcc r2,[r1],#4
bcc %B1
2
ldr r1,=|ImageMYMMYMZIMYMMYMLimit|
mov r2,#0
3
cmp r3,r1 ;數(shù)據(jù)區(qū)清零
strcc r2,[r3],#4
bcc %B3
(6) 跳轉(zhuǎn)到第二個階段的C語言入口
b main
3.2.2 Bootloader的第二階段
這部分是main()函數(shù)的具體實現(xiàn),其主要功能為初始化系統(tǒng)頻率、使能指令緩存、初始化串口、其他硬件的初始化以及加載操作系統(tǒng)內(nèi)核[10]。main()函數(shù)的主要代碼如下:
MMU_EnableICache();//使能ICache(指令緩存)
ChangeClockDivider(1,1);//設(shè)置FCLK∶HCLK∶PCLK=1∶2∶4
ChangeMPllValue(0xal,0x3,0x1);//FCLK=202.8 MHz
Uart_Init();//初始化串口
NF_Init();//初始化NAND FLASH
…
Launch(JumpAddr);//加載操作系統(tǒng)內(nèi)核
while (1);
4 結(jié) 語
這里給出的Bootloader已經(jīng)順利通過了調(diào)試,可以正常加載操作系統(tǒng)。通過對S3C2410的Bootloader的分析可以看出,設(shè)計一個性能優(yōu)良的Bootloader可以提高系統(tǒng)的穩(wěn)定性及實時性,它是嵌入式開發(fā)中不可或缺的一部分。只有設(shè)計出一個穩(wěn)定的Bootloader,才能進行下一步的系統(tǒng)開發(fā)工作,直至完成整個嵌入式系統(tǒng)的開發(fā)。
參考文獻
[1]Samsung公司.S3C2410X User′s Manual[EB/OL].http://www.samsungsemi.com,2003.
[2]馬忠梅.ARM嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ)[M].北京:北京航空航天大學出版社,2003.
[3]王田苗.嵌入式系統(tǒng)設(shè)計與實例開發(fā)[M].北京:清華大學出版社,2003.
[4]陳海軍,申衛(wèi)昌,史穎.嵌入式系統(tǒng)引導程序詳探[J].計算機技術(shù)與發(fā)展,2006,16(1):123_125.
[5]田澤.嵌入式系統(tǒng)開發(fā)與應(yīng)用[M].北京:北京航空航天大學出版社,2005.
[6]田澤.嵌入式系統(tǒng)開發(fā)與應(yīng)用實驗教程[M].北京:北京航空航天大學出版社,2004.
[7]吳健,張華,胡天鏈.基于NAND FLASH存儲器的嵌入式系統(tǒng)啟動引導程序設(shè)計[J].西南科技大學學報,2006,21(4):54_57.
[8]黃智偉,鄧月明,王彥.ARM 9嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程[M].北京:北京航空航天大學出版社,2008.
[9]王黎明,陳雙橋,閆曉玲,等.ARM 9嵌入式系統(tǒng)開發(fā)與實踐[M].北京:北京航空航天大學出版社,2008.
[10]郭志,江秀臣,曾奕.一個嵌入式系統(tǒng)的啟動分析[J].微計算機信息,2005,21(11):28_30.
作者簡介 王景存 男,1965年出生,碩士生導師。研究方向為嵌入式系統(tǒng)與應(yīng)用。
高 峰 男,1985年出生,碩士研究生。研究方向為嵌入式系統(tǒng)與應(yīng)用。