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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PXA272啟動引導(dǎo)程序的實現(xiàn)和功能擴展

          PXA272啟動引導(dǎo)程序的實現(xiàn)和功能擴展

          作者: 時間:2012-04-16 來源:網(wǎng)絡(luò) 收藏

          嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟硬件可裁減、適應(yīng)應(yīng)用系統(tǒng)對、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)是一個層次性結(jié)構(gòu),從底層到應(yīng)用分別是:硬件、、嵌入式操作系統(tǒng)(Linux)、文件系統(tǒng)、應(yīng)用系統(tǒng)。系統(tǒng)上電或硬件復(fù)位后,CPU執(zhí)行的第一段代碼就是,在嵌入式Linux系統(tǒng)的設(shè)計與的過程中起著重要的作用。

          本文引用地址:http://www.ex-cimer.com/article/171602.htm

          1、Bootloader的工作原理與

          1.1 工作原理

          Bootloader是系統(tǒng)內(nèi)核運行之前運行的代碼,BootLoader完成內(nèi)核加載啟動。嵌入式系統(tǒng)開發(fā)過程,常涉及底層BOOT LOADER移植,操作系統(tǒng)引導(dǎo)、應(yīng)用程序運行都與Bootloader有關(guān),所以說Bootloader移植是嵌入式系統(tǒng)開發(fā)基礎(chǔ)。不同CPU體系結(jié)構(gòu)對應(yīng)不同Bootloader,另外Bootloader的也依賴于具體板級硬件。

          嵌入式開發(fā)首先根據(jù)目標板特性開發(fā)Bootloader,依次完成下面任務(wù):初始化底層硬件(CPU、存儲器);設(shè)置堆棧、Cache;代碼重定向;加載內(nèi)核、文件系統(tǒng)映像;設(shè)置內(nèi)核啟動參數(shù);啟動內(nèi)核,控制權(quán)轉(zhuǎn)交給操作系統(tǒng)。

          1.2 Bootloader主要
          設(shè)計一個Bootloader,須具備以下基本功能:
          l 正確初始化硬件,使系統(tǒng)平臺正常啟動。
          l 提供映像文件加載接口,通過串口、網(wǎng)口下載映像到Flash,為內(nèi)核啟動作準備。
          l 加載Linux內(nèi)核到RAM中,啟動內(nèi)核和文件系統(tǒng),并進一步啟動應(yīng)用程序。

          而完備的Bootloader,還可以測試功能:
          l 開發(fā)板設(shè)計開發(fā)調(diào)試過程,Bootloader通過交互界面與系統(tǒng)平臺交互,測試平臺器件。
          l 開發(fā)階段,可以用于調(diào)試內(nèi)核。系統(tǒng)內(nèi)核能正常啟動是Bootloader的最終目標。
          l 提供串口交互的命令控制臺。支持配置功能:設(shè)置IP,MAC,系統(tǒng)時間等。

          Bootloader有兩種操作模式:啟動加載模式和下載模式;啟動加載模式是開發(fā)板發(fā)布后提供的穩(wěn)定工作模式;下載模式一般是在開發(fā)階段的工作模式,提供串口交互界面。

          2、硬件平臺

          Pxa272是最新推出的32位XScale RISC核心微處理器,兼容ARMv5TE指令;工作頻率可達520MHz;采用7級超流水線結(jié)構(gòu);支持Intel Wireless MMXTM指令集增強多媒體處理功能;動態(tài)電源管理低功耗;提供32KB D/I Cache;集成64M Flash和265K SRAM;

          硬件平臺是基于Pxa272微處理器的自研發(fā)的開發(fā)板Uranium V0.90。硬件結(jié)構(gòu)中的主要器件:AC97、SDRAM、TFT LCD、觸摸屏、網(wǎng)絡(luò)LAN、PCMCIA插槽等外設(shè)。

          3、Bootloader映像文件結(jié)構(gòu)設(shè)計

          Bootloader結(jié)構(gòu)由鏈接腳本決定,鏈接腳本用于控制目標文件格式。決定如何將各目標文件合并起來并安排數(shù)據(jù)和符號的位置。通常在編譯的最后一步完成。腳本主要目的描述如何將輸入文件的各段映射到輸出文件中,控制目標文件的布局。腳本文件Uranium.lds的結(jié)構(gòu):
          OUTPUT_ARCH(arm)//指定ARM目標板體系結(jié)構(gòu)
          ENTRY(_start) //_start為程序入口
          SECTIONS { . = 0x00000000;
          __boot_start = .; //匯編中指定的boot起址
          .start ALIGN(4) : { *(.text.start)} //文件text段
          .text ALIGN(4) : { *(.text) }
          .rodata ALIGN(4) : {*(.rodata)} //只讀data段
          .data ALIGN(4) : {*(.data) } //可讀寫data段
          .got ALIGN(4) : {*(.got) } //全局偏移量表
          __boot_end = .; //bootloader終址
          .bss ALIGN(16) :{*(.bss) } //未初始化data段
          ……}

          ARM體系結(jié)構(gòu)微處理器在復(fù)位后PC指向0x00000000,片載Flash連接在nCS0上,將Flash映射到0x00000000作為啟動存儲器。

          4、Bootloader的實現(xiàn)與

          啟動引導(dǎo)程序分成硬件初始化(Boot)和內(nèi)核加載兩個部分(Loader);Boot部分與處理器體系結(jié)構(gòu)緊密相關(guān),通常用匯編語言實現(xiàn);Loader部分在完成硬件初始化后,將加載映像文件并啟動內(nèi)核,這部分一般用C語言實現(xiàn)。

          4.1硬件初始化(Boot)

          可執(zhí)行Boot映像必須且只有一個全局入口。在匯編文件Start.S中指定入口:
          _start : b start
          Bootloader由多個文件組成。首先是匯編語言實現(xiàn)的Start.S,完成底層硬件初始化:
          start: bl define_gpio //設(shè)置gpio
          bl enable_cpu //設(shè)置CPU時鐘
          bl setup_memory //初始化靜動態(tài)存儲器
          bl relocate_boot //復(fù)制boot代碼
          bl setup_stack //建立堆棧
          bl clear_bss //清除bss段
          ldr pc, =main //跳轉(zhuǎn)到C代碼

          切換CPU工作模式、屏蔽中斷。啟動引導(dǎo)程序不需要處理中斷,所以要屏蔽所有中斷。

          設(shè)置CPU:提供動態(tài)時鐘和電源管理,可以根據(jù)應(yīng)用負荷,選擇CPU的工作模式;PXA272電源管理提供四種工作模式:Turbo模式、運行模式、空閑模式、睡眠模式。

          建立堆棧和清除數(shù)據(jù)區(qū):堆棧、DATA、BSS段初始化是運行C代碼前必要條件。C語言函數(shù)編譯必須提供堆棧存放臨時變量、調(diào)用位置、寄存器信息。除堆棧外,需DATA段和BSS段存放C代碼中有初始值的全局或靜態(tài)變量以及沒有指定初始值的全局變量。


          上一頁 1 2 3 4 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();