新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM的嵌入式BootLoader設計與啟動過程

基于ARM的嵌入式BootLoader設計與啟動過程

作者: 時間:2012-05-21 來源:網絡 收藏

1 引言

近年來,ARM在嵌入式設備中的應用越來越廣泛。就是Samsung公司生產的基于ARM7架構的微處理器。是專門為無MMU處理器設計的嵌入式操作系統(tǒng),支持ARM、Motorola等處理器。采用ARM+作為嵌入式開發(fā)平臺,吸取了兩者優(yōu)點,是一種比較流行的開發(fā)方式。在ARM程序設計中,啟動代碼是至關重要的,它不僅初始化硬件系統(tǒng)本身,而且最終引導進入操作系統(tǒng),所以啟動代碼的設計直接影響整個開發(fā)的正常進行。本文結合的特點詳細給出了Bootloader設計和啟動過程。

2 BootLoader代碼

Bootloader代碼是芯片復位后進入操作系統(tǒng)之前執(zhí)行的一段代碼,主要是為操作系統(tǒng)提供基本的運行環(huán)境,由它最終將操作系統(tǒng)啟動起來并將控制權交給操作系統(tǒng)內核。

Bootloader代碼由匯編代碼和C代碼兩部分組成。由于資源有限,Bootloader、內核映象、文件系統(tǒng)(Ramdisk壓縮映象)通常都是固化在Flash中的。在架構的嵌入式系統(tǒng)中,為了保證上電或復位時正常運行,Bootloader必須存放在Flash(0x0-0x400000,

4M)中的0x0處,則在硬件設計中把Flash接在CPU的nGCS0處[1]。上電后 Bootloader首先完成存儲器、堆棧、寄存器、全局變量和基本硬件模塊的初始化,這由匯編代碼完成,然后將操作系統(tǒng)內核與文件系統(tǒng)調入 SDRAM(0x0c000000-0x0c800000,8M)中,并將PC指針指向操作系統(tǒng)內核的入口處,為操作系統(tǒng)的運行作好準備,這由C代碼完成。

3 BootLoader代碼設計流程

ARM芯片多數(shù)為復雜的片上系統(tǒng)(SOC),系統(tǒng)里許多硬件模塊都可由軟件來設置。系統(tǒng)的初始化直接聯(lián)系到處理器內核和硬件控制器,進行編程一般用匯編語言。根據(jù)具體的目標系統(tǒng),Bootloader的設計流程包括:⑴設置異常向量表 ⑵初始化存儲器系統(tǒng) ⑶堆棧初始化 ⑷C例程全局變量初始化 ⑸呼叫主程序

3.1 設置異常中斷向量表

ARM處理器的中斷向量表從地址0x0處開始存放,連續(xù)有8×4字節(jié)的空間。在ARM存儲空間里每個字32位,占4個字節(jié)??梢酝ㄟ^圖1來描述中斷向量表的地址分配。

每當有中斷或者異常發(fā)生時,ARM處理器便強制把PC指針指向向量表中對應中斷類型的地址值。為了加快中斷響應,我們在Flash的0x0地址存放能跳轉到0x0c000008地址處中斷向量的跳轉指令,即在RAM中建立一個二級中斷向量表,起始地址為0x0c000008,除復位外,其它異常入口地址由Flash跳轉得到,如表1所示:

圖 1 中斷向量表 表 1 異常向量表跳轉關系

3.2 初始化存儲器系統(tǒng)

存儲器系統(tǒng)的初始化是指對Flash、RAM存儲器的地址范圍,數(shù)據(jù)總線寬度及DRAM的刷新等進行軟件設置。設置對象是存儲器控制寄存器,芯片不同具體的設置不同。本文僅以開發(fā)中用到S3C44B0X為例,說明這部分程序設計的過程。

memsetup: ldr r0, =MEMORY_CONFIG

ldmia r0, {r1-r13}

ldr r0, =0x01c80000

stmia r0, {r1-r13}

其中MEMORY_CONFIG地址處定義了配置rBWSCON, rBANKCONn(n=0-7),rREFRESH,

rBANKSIZE,rMRSRB6,rMRSRB7寄存器的值(依次為0x11000100,0x700,0x700,0x7ffc,0x7568

,0x700,0x700,0x18008,0x18000,0xac03e1,0x16,0x020,0x020)。

圖 2 地址映射關系

通常把位于Flash的0x0處異常向量表映射到更快、更寬(32bit/16bit)的RAM中,并把0地址重新指向到RAM中去.圖2描述了Remap前后的地址映射關系,復位時ROM定位到0x0,實際的跳轉地址為ROM的Reset Handler處,Remap后0x0的ROM替換為RAM,并把中斷向量表拷貝到0x0。Remap的實現(xiàn)和ARM處理器硬件特性相關。在 S3C44B0X系統(tǒng)中,既沒有MMU也不支持Remap,為了實現(xiàn)快的啟動和異常處理速度,在Bootloader程序設計中,我們把RAM中的 0x0c000008地址當成0x0地址處理,即在這里開始存放程序中斷向量,而在Flash的0x0地址存放能跳轉到0x0c000008地址處中斷向量的跳轉指令。支持Remap的處理器有的通過寄存器的相應Bit位置1來完成,有的通過軟件設計改寫Memory起始地址的Bank寄存器完成[2]。


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉