• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            milkyway的窩

            最初想法的誕生地

             

            i.MX21平臺(tái)之 剖析Windows CE 5.0 Eboot

             

                   通用的EBOOT概念可參考“Windows CE 5.0 Boot Loader的流程分析”,本文僅通過(guò)抽象i.MX21平臺(tái)上Windows CE 5.0 Eboot代碼來(lái)說(shuō)明從板子上電到WinCE跑起來(lái)的幕后故事以及各段代碼所發(fā)揮的作用。對(duì)照源代碼閱讀本文會(huì)有更好的效果。

             

            相關(guān)代碼目錄如下:

            %WINCE\Platform\iMX21ADS\Src\Bootloader\eboot

            %WINCE\PLATFORM\COMMON\SRC\ARM\Freescale\MX21\Startup

            %WINCE\PLATFORM\Imx21ads\Src\Kernel\Oal

            %WINCE\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON\blcommon.c

             

            (一)%WINCE\PLATFORM\COMMON\SRC\ARM\Freescale\MX21\Startup\startup.s

            功能:在OEM板級(jí)初始化前先初始化i.MX21處理器的核心模塊

            主要的函數(shù)功能及流程分析如下:

            1StartUp()---這部分代碼是Boot LoaderOAL共享的。

            在板子上電后,第一步是將處理器設(shè)置為特權(quán)模式,跳轉(zhuǎn)到MMUCacheDisable( ),使TLBcache、寫緩沖無(wú)效,并關(guān)閉 MMUcache。接著設(shè)置AIPI寄存器,跳轉(zhuǎn)到OALSetUpSystemControl OALSetUpFrequencies,初始化系統(tǒng)控制模式和時(shí)鐘頻率。程序接下來(lái)的工作是啟用I Cache,并跳轉(zhuǎn)到OALIsImageInRAMOALSetUpExtMemories以初始化外部存儲(chǔ)設(shè)備。隨后是設(shè)置MAX寄存器、配置AITC中斷控制器、屏蔽和清中斷的一段代碼。接下來(lái)程序先后跳轉(zhuǎn)到OALSetUpGpioOALSetUpKeypad,即初始化系統(tǒng)GPIO和鍵盤設(shè)備。最后程序跳轉(zhuǎn)到OALStartUp(),加載g_oalAddressTable地址,再跳轉(zhuǎn)到KernelStart(),完成代碼重定位和從RAM中啟動(dòng)Eboot等功能。

            上述KernelStart()函數(shù),先跳轉(zhuǎn)到OALIsImageInRAM程序段判斷Image是否正跑在RAM里。如果不是,則在接下來(lái)的RelocateEBOOT程序段里進(jìn)行代碼重定位;如果已經(jīng)在RAM里,則跳轉(zhuǎn)到RamStart程序段,設(shè)置連接寄存器LR、加載OEMAddressTable和頁(yè)表的地址,然后跳轉(zhuǎn)到MMUSetup函數(shù),根據(jù)OEMAddressTable設(shè)置MMU,并使能MMU、啟用cache。在完成了MMU的設(shè)置后,程序跳轉(zhuǎn)到blcommon.c中的BootloaderMain(),這個(gè)Eboot主控函數(shù)將調(diào)用main.c中的一系列OEM函數(shù)實(shí)現(xiàn)CE系統(tǒng)在板子上的啟動(dòng)。

            上面提到的函數(shù)所在文件如下: OALSetUpSystemControl OALSetUpFrequenciesOALSetUpExtMemoriesOALSetUpGpioOALSetUpKeypad這幾個(gè)函數(shù)位于 %WINCE\PLATFORM \iMX21\ Imx21ads\Src\Kernel\Oal\oal_startup.c中;OALIsImageInRAMOALStartUp位于%WINCE\PLATFORM\Imx21ads\Src\Kernel\Oal\startup.s中。KernelStart則位于%WINCE\PLATFORM\Imx21ads\Src\Bootloader\Eboot\startup.s中。

             

            2. MMUCacheDisable( ) --- 使TLBcache、寫緩沖無(wú)效,并關(guān)閉 MMUcache

             

            3. MMUSetup()---這個(gè)函數(shù)將被%Eboot\startup.s調(diào)用,它根據(jù)OEMAddressTable設(shè)置MMU,并使能MMU、啟用cache

             

            (二)   main.c

            基本流程:

            初始化調(diào)試端口---初始化平臺(tái)基本設(shè)備---打印用戶菜單---初始化網(wǎng)絡(luò)參數(shù)---下載內(nèi)核---啟動(dòng)OS

             

            主要函數(shù)及功能:

            OEMReportError()----用于點(diǎn)亮LED,并打印出錯(cuò)誤提示

             

            OEMMultiBINNotify()---- 當(dāng)系統(tǒng)具有多個(gè)BIN文件時(shí)用來(lái)提示用戶下載的是哪一個(gè)BIN

             

            OEMDebugInit( )------- 調(diào)用了OEMInitDebugSerial( ),初始化調(diào)試串口

             

            OEMPlatformInit( )----- 初始化板上設(shè)備

                 通過(guò)調(diào)試串口打印出Eboot的版本信息

                 調(diào)用InitEthDevice(),初始化以太網(wǎng)控制器

                 設(shè)置MAC地址,初始化OALeboot共享參數(shù),RTC

                 調(diào)用MainMenu( ),通過(guò)串口與用戶交互,設(shè)置啟動(dòng)選項(xiàng)及參數(shù)

             

            OEMPreDownload( )--- 判斷是否下載,調(diào)用OALKitlCreateName()設(shè)置設(shè)備名,初始化IP參數(shù),調(diào)用EbootInitEtherTransport()初始化TFTP參數(shù)

             

            OEMReadData()----- 內(nèi)部是通過(guò)OEMEthGetFrame( )來(lái)傳輸數(shù)據(jù)的

             

            OEMLaunch( )----------- 根據(jù)PB里的設(shè)置來(lái)更新OALeboot共享參數(shù),并判斷是否需要將NK燒到Nand Flash中,最后調(diào)用Eboot\startup.s 里的Launch( )啟動(dòng)WinCE內(nèi)核

             

            main.c中還有一個(gè)重要的函數(shù),那就是ManiMenu( )。它提供了以下啟動(dòng)選項(xiàng)菜單:

            0)MAC地址設(shè)置

            1)靜態(tài)IP設(shè)置

            2)靜態(tài)掩碼設(shè)置

            3)啟用DHCP

            4)恢復(fù)到出廠設(shè)置

            5)保存目前Eboot的設(shè)置

            D)下載

            E)擦除Nor Flash

            L)從Nor Flash啟動(dòng)

            R)從RAM中啟動(dòng)

             

            總的來(lái)說(shuō),在i.MX21平臺(tái)上WinCE EBoot就是在以下幾個(gè)文件間不斷跳轉(zhuǎn)的過(guò)程:

            %Startup\startup.s --- oal_startup.c --- %Oal\startup.s --- %Eboot\startup.s--- blcommon.c---main.c

            PS: 如果對(duì)i.MX21上電最初階段系統(tǒng)初始化的匯編代碼有興趣的,可以看看“i.MX21平臺(tái)上Startup.s代碼分析”。

            posted on 2008-08-13 23:58 milkyway 閱讀(2764) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Wince學(xué)習(xí)小結(jié)

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            隨筆皆原創(chuàng),文章乃轉(zhuǎn)載. 歡迎留言!

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            热久久最新网站获取| 国产午夜免费高清久久影院| 色天使久久综合网天天| 久久综合偷偷噜噜噜色| 久久精品午夜一区二区福利| Xx性欧美肥妇精品久久久久久| 国内精品久久久久国产盗摄| 久久人妻少妇嫩草AV蜜桃| 久久青草国产精品一区| 精品综合久久久久久97| 国产精品久久久99| 久久久久久午夜成人影院| 久久久久女教师免费一区| 国内精品久久久久伊人av| 2021国产精品久久精品| 91亚洲国产成人久久精品网址| 亚洲国产精品无码久久久不卡| 久久综合鬼色88久久精品综合自在自线噜噜 | 国产成人精品久久| 国产亚洲色婷婷久久99精品91| 久久精品国产亚洲av高清漫画| 欧美伊人久久大香线蕉综合| 狠狠色伊人久久精品综合网| 韩国三级大全久久网站| 性做久久久久久久| 东方aⅴ免费观看久久av| 狠狠综合久久AV一区二区三区| 亚洲午夜精品久久久久久浪潮| 精品久久久久久无码人妻热| 国产成人精品久久一区二区三区av | 久久伊人亚洲AV无码网站| 四虎国产精品免费久久5151 | 91精品国产色综合久久| 亚洲AV乱码久久精品蜜桃| 亚洲午夜久久久久妓女影院| 久久天天躁狠狠躁夜夜2020一 | 久久天堂AV综合合色蜜桃网| 亚洲第一极品精品无码久久| 亚洲AV无码1区2区久久| 丁香五月网久久综合| 国产成人精品久久亚洲|