本文轉載自:http://www.cnblogs.com/we-hjb/archive/2008/10/25/1319601.htmlhtml
在介紹S3C2410的WinCE6.0移植以前,咱們先熟悉一下WINCE600的目錄組織和PQOAL的相關概念。函數
這裏簡單說一下WinCE6.0開發環境的搭建。WinCE6.0的開發環境是Platform Builder6.0,但與Platform Builder 5.0不一樣的是,它做爲VS2005的一個插件來用。因此,咱們須要先安裝VS2005,而且安裝相應的SP1。PB6.0目前應該是不支持VS2008的。而後順序安裝PB6.0、PB6.0的SP一、R2。雖然微軟沒有嚴格說明,但仍是建議將這些軟件都默認安裝到C盤,以避免出現意外的狀況。固然,這要求C盤足夠大,至少得有10G的可用空間,以避免安裝的過程當中出錯。工具
安裝完成後, C盤的根目錄下產生一個WINCE600的目錄,這裏包括WinCE6.0的源代碼、BSP和一些編譯WinCE時須要用到的工具和庫文件。另外還產生一個C:\Program Files\Microsoft Platform Builder\6.00的目錄,這裏主要包括PB6.0的開發環境工具、幫助文件和其餘一些開發時用到的工具。組件化
下面咱們看一下WINCE600的目錄組織。 ui
目錄spa |
說明操作系統 |
CRC插件 |
存放了一個PB6.0安裝時用到的校驗文件crc.ini調試 |
OSDesignsorm |
用來存放PB的工程,對應PB5.0中的PBWORKSPACES |
OTHERS |
存放了一些運行庫、用於編譯操做系統的二進制文件、註冊表文件、批處理文件 |
PLATFORM |
存放了和硬件平臺相關的BSP及MCU相關的代碼和其餘一些文件 |
PRIVATE |
存放了WinCE6.0開放的源代碼 |
PUBLIC |
存放了WinCE6.0的相關組件,這裏應該是純軟件的代碼和庫 |
SDK |
存放了用於編譯WinCE6.0的相關工具和DLL文件 |
更詳細的目錄組織說明請參看MSDN http://msdn.microsoft.com/en-us/library/aa908702.aspx。
通常來講,在移植BSP的過程當中,咱們只會修改PLATFORM下的相關目錄和文件,而其餘的除OSDesigns以外的目錄,最好都不要修改,以避免出錯。PLATFORM目錄下除了COMMON目錄外,其餘都是特定硬件平臺的BSP,而COMMON目錄中則包涵了不一樣體系結構的相關代碼(ARM、X8六、MIPS、SHX)、與平臺無關的代碼(COMMON)和SOC的相關代碼(SOC),這些代碼都不能直接修改,若是須要修改,應該先CLONE出來,再作修改。
PQOAL這個概念在WinCE5.0中就引入了,全稱爲Production Quality OAL,產品級的OAL。它的基本原則以下:
不一樣芯片或片上系統的代碼必須分離開來;
BSP中的代碼應該是組件化的而且有邏輯的組織在一塊兒;
芯片級代碼、片上系統的代碼和板級支持包(BSP)中的代碼都應該是高質量的,以便於代碼重用。
PQOAL並非一個硬性的規定,你能夠按照本身的想法來組織BSP的目錄及相關文件。但我仍是建議儘可能按照PQOAL的原則來組織,這會給後期的調試、移植和發佈帶來很大的便利。這是前人成功的經驗,沒有理由不用。
下面就從PQOAL的角度分析PLATFORM的目錄組織。
PLATFORM\COMMON:這裏存放了全部可重用的代碼。這一部分代碼將在BSP以前編譯。
PLATFORM\COMMON\SRC\COMMON:這裏存放了被BSP中重用的通用代碼,這一部分代碼是跟硬件平臺無關的。譬如通常的IOCTL處理函數、與內核交互的公共的中斷程序等等,另外還包括一下庫文件,如OAL_IOCTL.lib、oal_intr.lib、oal_log.lib、kitl_log.lib等等。這一部分代碼由微軟提供,通常不能修改。
PLATFROM\COMMON\SRC\<CPU>:CPU表示MCU的不一樣體系結構,如ARM、MIPS、SH和X86。這些目錄分別存放了各體系結構的MCU的相關代碼,如CACHE相關代碼、物理地址和虛擬地址轉換的代碼等等。這部分代碼只針對MCU的內核,不涉及具體的芯片。這一部分代碼也由微軟提供,不建議修改。
PLATFORM\COMMON\SRC\SOC:該目錄下存放了不一樣的MCU對應的代碼,跟BSP對應,這裏可看作是CSP(CHIPSET SUPPORT PACKAGE)。這一部分的代碼通常來講不能直接修改,若是須要移植相似平臺的BSP,應該複製一個,重命名後再作修改。這裏的目錄和其中連接後的庫文件的命名也遵循必定的規則(芯片名稱_廠商名稱_版本號)。這裏須要注意的是SOC目錄下dirs文件須要包括體系結構的說明,如PLATFORM\COMMON\SRC\SOC\PXA27X_MS_V1中的dirs文件以DIRS_ARM= \打頭。這與BSP中的通常的DIRS文件不一樣。我在移植BSP的時候,並無在這裏作任何修改,只是將其中相關的文件拷貝到我本身的BSP目錄下,這樣方便BSP的發佈。
PLATFORM\BSPName:這裏存放了跟開發板對應的相關代碼。在編譯WinCE操做系統時,它在\PLATFORM\COMMON的目錄以後編譯。咱們在針對一款新的硬件平臺移植WinCE6.0時就是在這裏作相應的添加和修改。
WinCE6.0中BSP的目錄組織以下:
目錄 |
說明 |
CATALOG |
存放BSP的CATALOG file |
CESYSGEN |
編譯的過程當中,bib和reg文件將被拷貝到這 |
FILES |
存放BSP的bib、reg、dat等配置文件和無須編譯的二進制文件 |
SRC |
存放BSP的全部源代碼 |
SRC\BOOTLOADER |
存放BOOTLOADER的源代碼 |
SRC\COMMON |
存放共享代碼,連接後的庫可被BOOTLOADER、OAL和驅動使用 |
SRC\DRIVERS |
存放設備驅動的代碼 |
SRC\INC |
存放相關頭文件 |
SRC\KITL |
存放KITL的相關代碼 |
SRC\OAL\OALEXE |
連接OAL.lib和其餘一些庫,生成OAL.exe |
SRC\OAL\OALLIB |
存放OAL的源代碼,編譯生成OAL.lib |
本文分析了WINCE600的目錄組織,並從PQOAL的角度分析了PLATFORM目錄。文中若有疏漏,請您指正!謝謝。