• <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>

            唐吉訶德

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              5 Posts :: 75 Stories :: 3 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(2)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            wince博客 http://www.cnblogs.com/we-hjb

             

            為一個新的硬件設備定制WinCE6.0操作系統,一般需要完成以下幾個主要步驟:

            1.       針對特定的硬件設備創建板級支持包(Board Support Package縮寫為BSP)BSP必須包括BOOTLOADEROEM適配層(OEM Adaptation Layer縮寫為OAL)和一些必要的驅動。

            2.       利用創建的BSP,定制一個系統設計(OS Design)。即通過VS2005創建一個Platform Builder的工程。該工程可編譯產生最終的運行時映像文件(Rum-time Image)。

            3.       針對板上的外圍設備創建相關驅動,并添加到BSP中。

            4.       通過創建子工程和Catalog Items的方式,修改OS Design

            5.       編譯OS Design,下載編譯得到的運行時映像文件到目標設備。此時,可通過遠程調試工具進行調試。

            6.       在完成所有的調試工作之后,導出該運行時映像對應的SDK(Software Development Kit),應用程序的開發人員可基于此SDK編寫該設備的應用程序。

                   可以看出,在整個WinCE操作系統的移植過程中,BSP的移植是最基礎也是最關鍵的一步。而創建BSP的過程主要包括以下幾個內容:

            1.       創建BOOTLOADERBOOTLOADER在開發的過程中用于下載操作系統映像文件。

            2.       創建OALOAL最終被鏈接到內核映像文件,它主要完成硬件的初始化和管理。

            3.       創建設備驅動。設備驅動是板上外圍設備的軟件支持。

            4.       修改運行時映像的配置文件。配置文件主要包括BIBREG等文件。

            BOOTLOADER的主要作用是將操作系統運行時映像加載到內存,并跳轉到OS的啟動程序處。它的這一作用跟前一篇介紹的NBOOT的作用完全一致。BOOTLOADER獲取運行時映像(一般對應的文件名為NK)一般有兩種方法。它可以通過有線連接的方式象網絡(Ethernet)USB或串口從外部下載NK。它也可以從本地的存儲器(FlashHard Disk)中加載NK。通常,BOOTLOADER通過Ethernet下載操作系統映像故將其稱為EBOOT。在開發的過程中使用EBOOT,可以提高開發效率。通過使用EBOOT,你可以很快速的下載NK到目標設備中。而利用Flash編程工具或者是通過JTAG下載則很慢。在一些產品最終發布時,EBOOT是可以去掉的,但也有一些則必須包括BOOTLOADER,像X86的平臺就是如此。

            至此,我們已經了解了EBOOT的主要功能,為了實現這些功能,EBOOT必須完成以下工作:

            1.       初始化MCU。包括初始化MCU的相關寄存器、中斷、看門狗、系統時鐘、內存和MMU。前面幾項跟NBOOT基本一致,但這里增加了對MMU的初始化。

            2.       在完成所有的初始化工作之后,調用BootloaderMain()。這個函數的定義在WinCE6.0中對應的文件是C:"WINCE600"PLATFORM"COMMON"SRC"COMMON"BOOT"BLCOMMON"blcommon.c

            3.       BootloaderMain()主要依次調用以下幾個函數,OEMDebugInit()OEMPlatformInit()、OEMPreDownload()、OEMLaunch(),而這些函數必須由EBOOT的代碼來實現。

            4.       最終跳轉到OAL.exeStartUp處,進而啟動WinCE操作系統。

            整個流程如下圖所示:           

                  

                 EBOOT的代碼可參考C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT目錄。這里針對S3C2410的EBOOT做幾點說明。前一篇介紹NBOOT加載EBOOT的方法時提到,NBOOT必須將EBOOT放在內存中指定的位置,這個位置是由EBOOT的來決定的。具體的,在EBOOT中的體現是boot.bib里的內存配置,如下圖所示。

                 

                 NBOOT加載EBOOT到內存的地址必須與此地址對應。由于在NBOOT中沒有使用MMU,所以NBOOT使用的實際地址應該為0x30021000,否則系統將不能正常啟動。第二點,如果沒有采用NBOOT加載EBOOT的方法,而是將EBOOT直接存儲在NOR Flash中,此時必須在EBOOT的代碼中實現自加載的過程,即將NOR Flash中的EBOOT全部加載到RAM中,并執行,實現代碼如下:


            ;------------------------------------------------------------------------------
            ;   Copy boot loader to memory

                    ands    r9, pc, #
            0xFF000000     ; see if we are in flash or in ram
                    bne     
            %f20                    ; go ahead if we are already in ram

                    ; This 
            is the loop that perform copying.
                    ldr     r0, 
            = 0x21000           ; offset into the RAM 
                    add     r0, r0, #PHYBASE        ; add physical 
            base
                    mov     r1, r0                  ; (r1) copy destination
                    ldr     r2, 
            =0x0                ; (r2) flash started at physical address 0
                    ldr     r3, 
            =0x10000            ; counter (0x40000/4)
            10      ldr     r4, [r2], #4
                    str     r4, [r1], #
            4
                    subs    r3, r3, #
            1
                    bne     
            %b10

                    ; Restart from the RAM position after copying.
                    mov pc, r0
                    nop
                    nop
                    nop

                    ; Shouldn
            't get here.
                    b       .
                  EBOOT在實現必備功能的前提下,我們還可以擴展其功能,譬如說初始化LCD,并顯示特定的啟動畫面,顯示加載映像的進度等。
                  本文粗略的介紹了WinCE6.0EBOOT的內容,但沒有涉及具體的代碼實現,相關代碼可以參考目錄C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT。總的來說,EBOOT的核心功能就是引導操作系統映像。
            posted on 2011-03-14 10:34 心羽 閱讀(561) 評論(0)  編輯 收藏 引用 所屬分類: wince
            少妇精品久久久一区二区三区| 久久亚洲AV成人出白浆无码国产| 九九久久精品国产| 婷婷久久综合九色综合绿巨人| 性欧美丰满熟妇XXXX性久久久| 久久久久亚洲av无码专区喷水| 国产精品成人99久久久久91gav | 久久99九九国产免费看小说| 欧洲精品久久久av无码电影| 久久se精品一区二区| 午夜精品久久久久久| 国产精品99久久久久久宅男| 国内精品久久人妻互换| 狠狠色丁香婷婷久久综合五月| 国内精品久久久久久野外| 久久人妻AV中文字幕| 久久天天日天天操综合伊人av| 国产三级久久久精品麻豆三级| 无码任你躁久久久久久| 国产精品美女久久久久AV福利| 亚洲伊人久久精品影院| 伊人久久一区二区三区无码| 久久精品亚洲精品国产欧美| 国产成人久久精品区一区二区| 亚洲国产一成人久久精品| 久久久久亚洲精品日久生情| 性做久久久久久久久| 色播久久人人爽人人爽人人片aV| 国产三级精品久久| 岛国搬运www久久| 国产一区二区精品久久岳| 91精品国产91久久久久久蜜臀| 成人久久精品一区二区三区| 国产精品久久久久9999| 日本久久久久久中文字幕| 亚洲乱亚洲乱淫久久| 国产精品无码久久综合网| 久久久久99精品成人片三人毛片| 久久久久99精品成人片| 亚洲欧洲精品成人久久奇米网| 久久亚洲精品无码VA大香大香|