• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > PXA272啟動引導程序的實現和功能擴展

    PXA272啟動引導程序的實現和功能擴展

    作者: 時間:2012-04-16 來源:網絡 收藏

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

    本文引用地址:http://www.czjhyjcfj.com/article/171602.htm

    1、Bootloader的工作原理與

    1.1 工作原理

    Bootloader是系統內核運行之前運行的代碼,BootLoader完成內核加載啟動。嵌入式系統開發過程,常涉及底層BOOT LOADER移植,操作系統引導、應用程序運行都與Bootloader有關,所以說Bootloader移植是嵌入式系統開發基礎。不同CPU體系結構對應不同Bootloader,另外Bootloader的也依賴于具體板級硬件。

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

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

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

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

    2、硬件平臺

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

    硬件平臺是基于Pxa272微處理器的自研發的開發板Uranium V0.90。硬件結構中的主要器件:AC97、SDRAM、TFT LCD、觸摸屏、網絡LAN、PCMCIA插槽等外設。

    3、Bootloader映像文件結構設計

    Bootloader結構由鏈接腳本決定,鏈接腳本用于控制目標文件格式。決定如何將各目標文件合并起來并安排數據和符號的位置。通常在編譯的最后一步完成。腳本主要目的描述如何將輸入文件的各段映射到輸出文件中,控制目標文件的布局。腳本文件Uranium.lds的結構:
    OUTPUT_ARCH(arm)//指定ARM目標板體系結構
    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體系結構微處理器在復位后PC指向0x00000000,片載Flash連接在nCS0上,將Flash映射到0x00000000作為啟動存儲器。

    4、Bootloader的實現與

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

    4.1硬件初始化(Boot)

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

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

    設置CPU:提供動態時鐘和電源管理,可以根據應用負荷,選擇CPU的工作模式;PXA272電源管理提供四種工作模式:Turbo模式、運行模式、空閑模式、睡眠模式。

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


    上一頁 1 2 3 4 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 铜陵市| 太康县| 互助| 上林县| 延庆县| 克东县| 稷山县| 获嘉县| 临高县| 河间市| 泉州市| 虎林市| 黔西县| 阳谷县| 呼和浩特市| 余庆县| 鄂托克前旗| 康定县| 岚皋县| 盘锦市| 都江堰市| 科技| 西充县| 罗江县| 丹棱县| 淮滨县| 会同县| 津市市| 红桥区| 渑池县| 石家庄市| 西平县| 凤山市| 普宁市| 崇文区| 鄂伦春自治旗| 京山县| 贡嘎县| 唐海县| 三都| 永靖县|