<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2012-05-21 來源:網(wǎng)絡 收藏

          1 引言

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

          2 BootLoader代碼

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

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

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

          3 BootLoader代碼設計流程

          ARM芯片多數(shù)為復雜的片上系統(tǒng)(SOC),系統(tǒng)里許多硬件模塊都可由軟件來設置。系統(tǒng)的初始化直接聯(lián)系到處理器內(nèi)核和硬件控制器,進行編程一般用匯編語言。根據(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地址存放能跳轉(zhuǎn)到0x0c000008地址處中斷向量的跳轉(zhuǎn)指令,即在RAM中建立一個二級中斷向量表,起始地址為0x0c000008,除復位外,其它異常入口地址由Flash跳轉(zhuǎn)得到,如表1所示:

          圖 1 中斷向量表 表 1 異常向量表跳轉(zhuǎn)關系

          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,實際的跳轉(zhuǎn)地址為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地址存放能跳轉(zhuǎn)到0x0c000008地址處中斷向量的跳轉(zhuǎn)指令。支持Remap的處理器有的通過寄存器的相應Bit位置1來完成,有的通過軟件設計改寫Memory起始地址的Bank寄存器完成[2]。


          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();