EBoot概要-we-hjb
為一個新的硬件設備定制WinCE6.0操作系統(tǒng),一般需要完成以下幾個主要步驟:
1.?????? 針對特定的硬件設備創(chuàng)建板級支持包(Board Support Package縮寫為BSP),BSP必須包括BOOTLOADER、OEM適配層(OEM Adaptation Layer縮寫為OAL)和一些必要的驅動。
2.?????? 利用創(chuàng)建的BSP,定制一個系統(tǒng)設計(OS Design)。即通過VS2005創(chuàng)建一個Platform Builder的工程。該工程可編譯產生最終的運行時映像文件(Rum-time Image)。
3.?????? 針對板上的外圍設備創(chuàng)建相關驅動,并添加到BSP中。
4.?????? 通過創(chuàng)建子工程和Catalog Items的方式,修改OS Design。
5.?????? 編譯OS Design,下載編譯得到的運行時映像文件到目標設備。此時,可通過遠程調試工具進行調試。
6.?????? 在完成所有的調試工作之后,導出該運行時映像對應的SDK(Software Development Kit),應用程序的開發(fā)人員可基于此SDK編寫該設備的應用程序。
?????? 可以看出,在整個WinCE操作系統(tǒng)的移植過程中,BSP的移植是最基礎也是最關鍵的一步。而創(chuàng)建BSP的過程主要包括以下幾個內容:
1.?????? 創(chuàng)建BOOTLOADER。BOOTLOADER在開發(fā)的過程中用于下載操作系統(tǒng)映像文件。
2.?????? 創(chuàng)建OAL。OAL最終被鏈接到內核映像文件,它主要完成硬件的初始化和管理。
3.?????? 創(chuàng)建設備驅動。設備驅動是板上外圍設備的軟件支持。
4.?????? 修改運行時映像的配置文件。配置文件主要包括BIB、REG等文件。
BOOTLOADER的主要作用是將操作系統(tǒng)運行時映像加載到內存,并跳轉到OS的啟動程序處。它的這一作用跟前一篇介紹的NBOOT的作用完全一致。BOOTLOADER獲取運行時映像(一般對應的文件名為NK)一般有兩種方法。它可以通過有線連接的方式象網絡(Ethernet)、USB或串口從外部下載NK。它也可以從本地的存儲器(Flash、Hard Disk)中加載NK。通常,BOOTLOADER通過Ethernet下載操作系統(tǒng)映像故將其稱為EBOOT。在開發(fā)的過程中使用EBOOT,可以提高開發(fā)效率。通過使用EBOOT,你可以很快速的下載NK到目標設備中。而利用Flash編程工具或者是通過JTAG下載則很慢。在一些產品最終發(fā)布時,EBOOT是可以去掉的,但也有一些則必須包括BOOTLOADER,像X86的平臺就是如此。
至此,我們已經了解了EBOOT的主要功能,為了實現這些功能,EBOOT必須完成以下工作:
1.?????? 初始化MCU。包括初始化MCU的相關寄存器、中斷、看門狗、系統(tǒng)時鐘、內存和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.exe的StartUp處,進而啟動WinCE操作系統(tǒng)。
整個流程如下圖所示:???????????
?
??????
?????EBOOT的代碼可參考C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT目錄。這里針對S3C2410的EBOOT做幾點說明。前一篇介紹NBOOT加載EBOOT的方法時提到,NBOOT必須將EBOOT放在內存中指定的位置,這個位置是由EBOOT的來決定的。具體的,在EBOOT中的體現是boot.bib里的內存配置,如下圖所示。
?????
?????NBOOT加載EBOOT到內存的地址必須與此地址對應。由于在NBOOT中沒有使用MMU,所以NBOOT使用的實際地址應該為0x30021000,否則系統(tǒng)將不能正常啟動。第二點,如果沒有采用NBOOT加載EBOOT的方法,而是將EBOOT直接存儲在NOR Flash中,此時必須在EBOOT的代碼中實現自加載的過程,即將NOR Flash中的EBOOT全部加載到RAM中,并執(zhí)行,實現代碼如下:
;------------------------------------------------------------------------------
;???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.0下EBOOT的內容,但沒有涉及具體的代碼實現,相關代碼可以參考目錄C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT。總的來說,EBOOT的核心功能就是引導操作系統(tǒng)映像。
總結
以上是生活随笔為你收集整理的EBoot概要-we-hjb的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习方法求解平均场博弈论问题
- 下一篇: 深度强化学习第2课|马尔可夫决策过程