<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM bootloader程序的理解

ARM bootloader程序的理解

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
作為一個(gè)嵌入式工程師,如果不能寫(xiě)bootloader程序,那就不能成為一個(gè)真正的嵌入式工程師.以前做linux driver,常對bootloader程序是一知半解,其實(shí)要寫(xiě)好bootloader程序還得好好去研讀一下處理器 architecture.

ARM 處理器是一種很熱門(mén)的嵌入式處理器,現在絕大部分的嵌入式產(chǎn)品都用到了ARM處理器,其低廉的價(jià)格和豐富的性能都受到的消費者的青睞.下面針對ARM處理器來(lái)具體談一下ARM bootloader程序.

本文引用地址:http://dyxdggzs.com/article/201611/317085.htm

首先簡(jiǎn)單的了解一下ARM architecture.ARM主要由ARM內核單元,vector interface ,coprocessor,兩種cache(instruction and data),兩種TCM(instruction and data), MMU, power management等. cache是為了平衡數據之間的速度而使用的,而TCM是為了存儲一些頻繁使用的數據,如中斷向量等,MMU主要處理虛擬地址到物理地址的轉換,起到了對數據的保護作用,用在操作系統的體系中,很顯然,bootloader程序就是要為后來(lái)的程序提供一個(gè)良好的運行環(huán)境,這里對ARM architecture的幾個(gè)組成單元進(jìn)行必要的配置.

綜上所述,ARM bootloader程序主要完成下面幾個(gè)功能:

1)初始化棧.

2)中斷向量表的復制.

3)TCM 和cache的配置,如果有操作系統的話(huà),就應該設置MMU.

4)建立一個(gè)程序執行文境.(具體一點(diǎn),就是根據image文件的屬性來(lái)處理image段的數據).

5)對內存如mddr,sram進(jìn)行簡(jiǎn)單的測試.

6)需要設置一些外圍設備,一般來(lái)說(shuō)需要配置一下串口.

一、初始化棧:

應該對irq,firq,svc的棧進(jìn)行指定,分別操作這幾中模式的寄存器。如對irq模式.

mov r0 , #0x12; irq mode

msrCPSR , r0; set irq mode

ldr sp, =0x800; irq steak address

二、中斷向量表的復制:

Boot_Def
ldrPC,Arm_Addr_Ini;0x00
ldrPC,Arm_Addr_Und;0x04
ldrPC,Arm_Addr_Swi;0x08
ldrPC,Arm_Addr_Pre;0x0C
ldrPC,Arm_Addr_Abt;0x10
nop;0x14
ldrPC,Arm_Addr_Irq;0x18
ldrPC,Arm_Addr_Fiq;0x1C

Arm_Addr_IniDCDbootstrap_entry + 0x00;0x20
Arm_Addr_UndDCDundefined_exception_handler;0x24
Arm_Addr_SwiDCDsoftware_interrupt_handler;0x28
Arm_Addr_PreDCDprefetch_exception_handler;0x2C
Arm_Addr_AbtDCDabort_exception_handler;0x30
Arm_Addr_IrqDCDirq_interrupt_handler;0x34
Arm_Addr_FiqDCDfiq_interrupt_handler;0x38

DCD0x12345678; 0x3c

...

ldrr0,=Boot_Def
ldrr1, =0x0;address 0x0
mov r2,#0x3C
add r2, r2, r1

0
cmpr1, r2
bge%b1
ldrcc r3,[r0],#4
strcc r3,[r1],#4
b%B0
1

三、TCM的配置

TCM和cache是有區別的,雖然都是為了加快速度,但是TCM必須給它指定地址,TCM和cache的用途也不樣,TCM保存常用到的數據如中斷向量表和realtime數據,而cache只是為了加快處理器和外設之間的數據處理。


ldr r0,=0x0;
mrc p15, 0, r1, c9, c1, 1;讀coprocessor instruction tcmregion register.
orr r0, r0, r1;
movr1, #1
orr r1, r1, r0;instruction tcm bit_o 置1,enableinsturction tcm.
mcrp15,0,r1,c9,c1,1;寫(xiě)入

其它的cache配置也類(lèi)似,主要讀懂ARM document.

四、建立一個(gè)程序運行文境:

image(bin文件)包括倆部分:RO and RW,RO部分一般我們在加載前后的位置都不用變化,但是RW必須在加載后把他放到RAM中執行,所以RW部分我們把它映射到RAM地址中。

IMPORT|Image$$RO$$Base| ;imageRO開(kāi)始地址
IMPORT|Image$$RO$$Limit|
IMPORT|Image$$RO$$Length|
IMPORT|Image$$RW$$Base|
IMPORT|Image$$RW$$Limit|
IMPORT|Image$$RW$$Length|
IMPORT|Image$$ZI$$Base|
IMPORT|Image$$ZI$$Limit|
IMPORT|Image$$ZI$$Length|

ldrr0,=|Image$$RO$$Limit|
ldrr1,=|Image$$RW$$Base|
ldrr2,=|Image$$RW$$Limit|

3
cmpr1,r2
bge%B3
ldrcc r3,[r0],#4;從RO段的結束地址+1load rw段數據
strccr3,[r1],#4;重新寫(xiě)入到rw段
b%B4
4

ldrr0,=|Image$$ZI$$Base|;處理ZI段數據
ldrr1,=|Image$$ZI$$Length|
add r1, r1, r0
ldr r1, =0X2000
ldrr2,=0
5
cmpr0, r1
bge%B6
strccr2,[r0],#4;初始化ZI段數據為0
b%B5
6

五、對內存進(jìn)行測試:

由于系統中有各種各樣的內存,可以對內存進(jìn)行簡(jiǎn)單測試。

六、UART的配置:

UART在嵌入式系統中很重要,雖然它很簡(jiǎn)單,但是在早期開(kāi)發(fā)中,UART是必須的設備之一。UART作為下一篇中將進(jìn)一步詳細討論。



關(guān)鍵詞: ARMbootloader程

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>