乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      基于Intel PXA270的Windows CE5.0下Boot Loader實(shí)現(xiàn)

       弓道自然_改名 2008-01-27
      作者:劉揚(yáng) 田增山 凌順 周永勝

      Windows CE.NET是微軟公司向嵌入式領(lǐng)域推出的一款操作系統(tǒng),被廣泛應(yīng)用于平板電腦、數(shù)碼相機(jī)、彩屏手機(jī)、PDA等許多產(chǎn)品當(dāng)中。


      Windows CE的開發(fā)過程可以分為:0AL(OEM Abstraction Layer)、驅(qū)動(dòng)、應(yīng)用程序開發(fā)三個(gè)步驟。其中,0AL開發(fā)是Windows CE開發(fā)過程中最基本的一步,而Boot Loader設(shè)計(jì)在0AL開發(fā)中又具有極為關(guān)鍵的作用。因此,本文以Windows CE 5.0在Xscale PXA270處理器上的Ethernet Boot Loader的設(shè)計(jì)和實(shí)現(xiàn)為例,對(duì)Boot Loader的實(shí)現(xiàn)進(jìn)行闡述,并分析Boot Loader的架構(gòu)、啟動(dòng)控制流程和配置安裝。


      對(duì)于Windows CE嵌入式操作系統(tǒng)來說,系統(tǒng)加電后第一條指令就是Boot Loader的代碼。Boot Loader通常位于目標(biāo)設(shè)備上的非易失存儲(chǔ)設(shè)備中(如Flash),并且在系統(tǒng)加電或重置時(shí)自動(dòng)執(zhí)行。通??梢酝ㄟ^JTAG或串口工具把Boot Loader燒寫到目標(biāo)設(shè)備上,Boot Loader的唯一目標(biāo)就是加載并執(zhí)行操作系統(tǒng)映像。


      在嵌入式應(yīng)用系統(tǒng)最終產(chǎn)品化后,Boot Loader將不是必須的。因?yàn)閃indows CE不僅提供了利用Boot Loader加載系統(tǒng)的啟動(dòng)方式,而且提供了通過啟動(dòng)向量ResetVector 加載系統(tǒng)的啟動(dòng)方式。但在系統(tǒng)開發(fā)階段,Boot Loader是必須的,它將使開發(fā)更加方便高效。


      硬件平臺(tái)架構(gòu)


      處理器采用英特爾的XScale PXA270系列處理器,可以配合2700G多媒體加速器,提升高分辨率圖像處理和3D加速處理能力。硬件開發(fā)板的外設(shè)包括外部存儲(chǔ)器、串口和DM9000AE 100Mb以太網(wǎng)接口芯片。

      Boot Loader的體系結(jié)構(gòu)


      一個(gè)典型的以太網(wǎng)Boot Loader由Blcommon、OEM代碼(針對(duì)不同硬件平臺(tái)需要修改代碼)Eboot和網(wǎng)絡(luò)驅(qū)動(dòng)程序等部分組成組成,如圖1所示。

      圖1  Boot Loader框架結(jié)構(gòu)


      ● Blcommon庫


      BLCOMMON庫提供了豐富Boot Loader基本功能,包括復(fù)制Boot Loader到RAM 以便高速運(yùn)行,解析  .bin文件,控制系統(tǒng)加載過程等等。代碼庫一般放置在%_WINCEROOT% \PUBLIC\COMMON\OAK\DRIVERS \ETHDBG\BLCOMMON。其主要文件為blcommon.c。


      ● OEM代碼


      OEM代碼是與設(shè)備初始化及硬件擴(kuò)展有關(guān)的代碼,位置在%_WINCEROOT% \PLATFORM\<平臺(tái)名稱>\SRC\BOOTLOADER\ EBOOT。


      ● EBoot庫


      Eboot庫提供了DHCP、TFTP和UDP服務(wù)。BooLoader與Platform Builder建立TFTP連接.并下載系統(tǒng)鏡像。其中TFTP用于從開發(fā)工作站的Platform Builder下載Windows CE操作系統(tǒng)鏡像(這是本文所使用的加載調(diào)試方式)。Eboot庫代碼位于%_WINCEROOT% \PUBLIC \COMMON\OAK\DRIVERS \ETHDBG\EBOOT。


      ● 網(wǎng)絡(luò)驅(qū)動(dòng)庫


      EDBG驅(qū)動(dòng)程序庫集成了一些常見以太網(wǎng)驅(qū)動(dòng),為Bootloader和操作系統(tǒng)訪問提供了通用接口。Boot Loader利用這些接口下載Windows CE運(yùn)行時(shí)映象,操作系統(tǒng)利用這些接口實(shí)現(xiàn)與Platform Builder的KITL連接。

      Boot Loader啟動(dòng)控制流程


      由于硬件的差異,Boot Loader的功能可能不同,圖2所示的是Boot Loader的較為通用的啟動(dòng)控制流程。

      圖2  Boot Loader啟動(dòng)控制流程


      ● 啟動(dòng)函數(shù)StartUp


      StartUp函數(shù)是Boot Loader的入口函數(shù),在CPU啟動(dòng)后它將立即運(yùn)行。該函數(shù)使用匯編語言編寫,完成初始化CPU、內(nèi)存(包括建立存儲(chǔ)器訪問和初始化緩存)等核心硬件, 其主要完成的功能包括:使CPU進(jìn)入正確的運(yùn)行模式,以便CPU 能夠訪問所有的硬件資源;禁用所有的CPU中斷;關(guān)閉MMU和TLB;禁用Cache和write Buffer;初始化內(nèi)存控制器;初始化其他硬件設(shè)備,如時(shí)鐘等;將Boot Loader本身復(fù)制到內(nèi)存中;跳轉(zhuǎn)到C代碼中。


      實(shí)現(xiàn)這些功能的代碼一般放置在StartUp.s文件中。由于此處是用匯編語言編寫的,有較強(qiáng)的硬件相關(guān)性,所以一般參考板的CPU與開發(fā)平臺(tái)的CPU考慮采用相同的架構(gòu),這樣做可以不需要對(duì)寄存器的定義和初始化流程的等進(jìn)行修改。


      ● 主控部分Main函數(shù)


      StartUp函數(shù)初始化CPU等核心硬件并跳轉(zhuǎn)到Main函數(shù)后,系統(tǒng)轉(zhuǎn)入了C語言代碼執(zhí)行環(huán)境。Main函數(shù)的主要任務(wù)時(shí)調(diào)用 BLCommon中的BootloaderMain()函數(shù)。而BootloaderMain()函數(shù)是Boot Loader的主控函數(shù),它控制了Boot Loader的完整執(zhí)行流程。它的主要工作如下。


      (1)重定位全局變量函數(shù)KernelRelocate(),它將Boot Loader中的全局變量重定位到RAM中。這樣做的原因在于Boot Loader是在目標(biāo)設(shè)備的只讀媒體上運(yùn)行的(本實(shí)際方案是在NOR Flash上),這樣的情況下將使得Boot Loader的代碼對(duì)全局變量進(jìn)行讀寫操作就會(huì)失敗。所以需要把全局變量所在的數(shù)據(jù)段移到RAM中,來確保全局變量可寫。


      (2)初始化調(diào)試端口函數(shù)OEMDebugInit,主要任務(wù)是初始化調(diào)試輸出用的硬件端口,方便輸出調(diào)試信息。本方案初始化FFUART(全功能串口)用來輸出調(diào)試信息,在終端開發(fā)機(jī)上進(jìn)行接收。


      (3)初始化平臺(tái)函數(shù)OEMPlatformInit(),其作用是初始化目標(biāo)板上的的設(shè)備如實(shí)時(shí)時(shí)鐘,顯示屏、Flash、網(wǎng)卡等。


      (4)預(yù)下載函數(shù)OEMPreDownloade(),主要任務(wù)是完成以太網(wǎng)下載前的一些準(zhǔn)備工作,如通過DHCP獲得IP地址或者初始化TFTP服務(wù)等。


      (5)下載映像函數(shù)DownloadeImage(),該函數(shù)完成從遠(yuǎn)程開發(fā)機(jī)上下載操作系統(tǒng)映像。


      (6)啟動(dòng)映象函數(shù)OEMLaunch。


      在實(shí)際開發(fā)中,本方案利用同屬Intel Xscale 270 CPU的MainstoneII開發(fā)板進(jìn)行克隆,這樣使得大量的代碼可以共享,只需修改少許的OEM代碼和實(shí)現(xiàn)一些可選的OEM函數(shù)即可完成開發(fā),減少未知錯(cuò)誤。


      Boot Loader通過對(duì)以上函數(shù)的調(diào)用,完成了對(duì)操作系統(tǒng)的映像的加載控制,函數(shù)的流程及其代碼位置如圖3所示。

      圖3  Boot Loader函數(shù)調(diào)用流程


      ● Boot Loader的配置


      BootLoader程序可以通過PB的集成編譯環(huán)境編譯鏈接,控制文件為.bib文件,.bib文件主要完成以下工作。


      (1)配置目標(biāo)設(shè)備上的內(nèi)存分配信息,如目標(biāo)設(shè)備上的物理內(nèi)存起始地址、長度以及用途等;


      (2)包含ROM信息,如起始位置、寬度等,這樣就可以正確的生成可以在ROM上運(yùn)行的映像文件;


      (3)需要打包文件列表。


      對(duì)于Boot Loader文件的下載,可以通過仿真器下載,也可以通過其他調(diào)試程序下載,本方案采用的是直接燒寫到Flash中,因此要得到純二進(jìn)制格式的映像以便燒 寫進(jìn)Flash。Boot Loader是系統(tǒng)啟動(dòng)后第一個(gè)運(yùn)行的程序,因此它必須放在CPU 上電和復(fù)位后立即運(yùn)行的地址處。Xscale在上電和復(fù)位后是從物理地址0x00000000(片選0 Boot Flash的起始地址)開始運(yùn)行的。

      結(jié)束語


      作為Windows CE操作系統(tǒng)的啟動(dòng)部分,Boot Loader負(fù)責(zé)把Windows CE操作系統(tǒng)加載到內(nèi)存中,然后開始執(zhí)行。雖然最終的產(chǎn)品中可能不含Boot Loader,但是在開發(fā)和調(diào)試的時(shí)候Boot Loader是不可或缺的。只有得到一個(gè)穩(wěn)定工作的Boot Loader程序,才能夠更進(jìn)一步開發(fā)Windows CE的BSP,直至最后整個(gè)系統(tǒng)的成功。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請遵守用戶 評(píng)論公約

        類似文章 更多