Windows CE系統開發,BSP包中的幾個常見檔案詳解

來源:互聯網
上載者:User
Windows CE系統開發,BSP包中的幾個常見檔案詳解

BSP介紹(Board Support Package)是介於底層硬體和上層軟體之間的底層軟體開發包,它主要功能為屏蔽硬體,提供作業系統及硬體驅動,具體功能包括:

(1)      單板硬體初始化,主要是CPU的初始化,為整個軟體系統提供底層硬體支援;

(2)      為作業系統提供裝置驅動程式和系統中斷服務程式;

(3)      定製作業系統的功能,為軟體系統提供一個即時多任務的運行環境;

(4)      初始化作業系統,為作業系統的正常運行做好準備。

1.1.1    sources.cmn檔案

sources.cmn是Common Source檔案,BSP內所有的原始碼編譯都會用到該檔案。裡面定義一些比較常用的名詞或環境變數或路徑。

例如在OAMPL138 MCBSP驅動目錄下source 檔案中“INCLUDES=$(INCLUDES);..\INC”這行虛擬碼,其中“(INCLUDES)”部分及時引用source.cmn檔案中的INCLUDE環境變數,定義如程式清單 0.1所示。

程式清單 0.1 定義      件平台相關的檔案,主要 INCLUDE環境變數

INCLUDES=$(_PLATFORMROOT)\common\src\inc;

大家可以看看這段英文介紹;

Sources.cmn is a build configuration system file that allows you to set common variables. This can be useful if more than one directory in the build tree need the a variable set to the same value because it can reduce your maintenance efforts. 

Each build tree can use one sources.cmn file.  When build.exe runs, it will determine the root of the build tree by looking for the top most folder with a Dirs file. Build.exe then sets BUILDROOT to the top most folder with a Dirs files.  Makefile.def in
Public\Common\OAK\Misc will include $(BUILDROOT)\sources.cmn if it exists.

Some of the variables that are commonly set in sources.cmn include CDEFINES, ADEFINES and INCLUDES.

CDEFINES and ADEFINES are used to set macros that are common to multiple build folders. These might include RAM and ROM sizes, but might also include OEM and CPU specific macros.

The include path, INCLUDES, can be set in sources.cmn which is very helpful, especially if and when you change the directory structure.

The Platform directory tree should have WINCEOEM set to 1, so sources.cmn is a good place to do this rather than setting it in each sources file.

Note: Starting with Windows CE 5.0, sources.cmn is no longer really an option. It is required because sources.cmn needs to at least set _COMMONPUBROOT, _ISVINCPATH, and _OEMINCPATH. These were set by build.exe in prior versions.

1.1.2    XXX.bat檔案

DAT檔案用於在WinCE啟動的時候,定義檔案系統的結構,也就是定義有哪些檔案夾,哪些檔案在什麼位置等。每次冷啟動的時候,Filesys模組會根據.dat檔案中的內容來建立目錄以及目錄下的檔案。

在BSP中我們可以找到platform.dat。在建立一個WinCE的工程以後,可以在工程目錄下面找到project.dat。可以在這兩個.dat檔案中定義我們所需的根目錄以及相應的子目錄和檔案,當然Windows檔案夾及其包含的子檔案夾除外。使用者可以通過定義捷徑的方法來引用Windows目錄下的檔案,如程式清單 0.2所示。

程式清單 0.2 DAT檔案應用樣本

root:-Directory("My Documents")

root:-Directory("Program Files")

Directory("\Program Files"):-Directory("My Projects")

Directory("\Program Files"):-Directory("Accessories")

Directory("\Program Files"):-Directory("Communication")

Directory("\Program Files\My Projects"):-File("My Project Program", "\Windows\Myproj.exe")

root:-File("\control.lnk", "\Windows\control.lnk")

簡單解釋一下,上面的內容是先建立My Documents和Program Files兩個根目錄,然後在Program Files下面建立My Projects,Accessories和Communication三個子目錄,然後拷貝被定義在Windows目錄下的存在於ROM中的Myproj.exe檔案到My Projects目錄下面,且名字為My Project Program。這裡需要說明的一點就是,像Myproj.exe這樣的檔案都是從ROM中拷貝出來的,所以必須在BIB檔案中包含了該檔案。最後一行意思是在根路徑下建立control.lnk,該檔案來自ROM中的control.lnk檔案,是一個捷徑檔案。對上面的一些格式做個解釋;

1.    Root Directory的文法格式

root:[-Directory("dir_name")] [-Permdir("dir_name")]

[-File("target_filename", "source_location")]

root:表示根目錄。

-Directory(“dir_name”):定義根目錄下的目錄名。

-Permdir(“dir_name”):定義一個永久的目錄,使用者是不能通過RemoveDirectory函數刪除的。

-File(" target_filename", " source_location"):定義一個目標檔案,該檔案從ROM中拷貝過來。target_filename為目標檔案的檔案名稱,source_location為ROM中的檔案,指Windows目錄下的某路徑下的檔案名稱。

2.    Directory的文法格式:

Directory("dir_name"):[-Directory("dir_name")]

[-File("target_filename", "source_location")]

Directory(“dir_name”):表示目錄名。”\”表示根目錄。

-Directory(“dir_name”):表示目錄下的路徑,就是子目錄。

-File(" target_filename", " source_location"):定義一個目標檔案,該檔案從ROM中拷貝過來。target_filename為目標檔案的檔案名稱,source_location為ROM中的檔案,指Windows目錄下的某路徑下的檔案名稱。

DAT中所使用的文法定義比較簡單,看看例子就知道如何修改了,一般我們會通過修改project.dat和platform.dat來改變WinCE啟動後的檔案路徑結構。其中platform.dat是和平台相關的,而project.dat是和WinCE工程相關的。

1.1.3    Config.bib檔案

Config.bib檔案是BSP中一個重要的記憶體,他用於指定CPU記憶體配置,先來看看OAMPL138該部分內容是怎麼安排,如程式清單 0.3所示。

程式清單 0.3 CONFIG.BIB檔案MEMORY部分

MEMORY

    NK                     80000000    02000000    RAMIMAGE

    RAM                   82000000    0173F800    RAM

    DISPLAY                8373F800    00600000    RESERVED

    EMACBUF              83D3F800    000C0000    RESERVED

    ARGS                   83DFF800    00000800    RESERVED

#if defined BSP_DSPLINK

    DSPLINK               83E00000    00200000    RESERVED

    EXTENSIONRAM        84000000    04000000    RESERVED

#else

    EXTENSIONRAM        83E00000    04200000    RESERVED

#endif

簡要說明下,在CONFIG.BIB中指定的MEMORY都指的是虛擬記憶體,如果知道其對應的物理地址,可以參照OEMADDRTAB.INC代碼。

在上述的代碼中 NK 指定的是Kernel在載入到RAM中存放的地址地區,0x80000000表示的是Kernel的記憶體起始地址,0x02000000表示的是Kernel的大小,從這裡可以看出,核心最大不能超過32MB。

另外一個需要注意的是,在上述代碼中ARGS非常重要,它是建立BSP和OS共用參數的地區,一般在BSP中設定的參數都儲存在ARGS地區中。如果有需要,在OS啟動之後,通過KernelIoControl擷取到這段地區,讀取其中參數之後進行相關的系統設定。例如在Bootloader啟動的過程中,改變了顯示屏的參數,則Bootloader將其參數儲存在ARGS當中,OS啟動之後,LCD驅動擷取ARGS地區,解析參數,調整LCD顯示屏的設定,這樣LCD才能正常顯示。

l       小技巧

在 BootLoader 編譯的時候,有時候發現nb0檔案很難產生,其實就是config.bib 檔案未做相關的設定。看看OAMPL138是怎麼做,如程式清單 0.4所示,其中的設定參照程式清單 0.3,不做解釋。

程式清單 0.4 NB0產生技巧

    ROMSTART=80000000

    ROMWIDTH=32

ROMSIZE=2000000

另外有時候為了提高RAM的利用率,需要將“NK”地區用於載入Kernel剩餘部分的記憶體釋放出來給RAM用,達到擴大程式運行記憶體的目的。看起來不可思議,其實很簡單,只需要在Config.bib檔案中加入“AutoSize = ON”即可。

1.1.4    Platform.bib檔案

該檔案包含了和硬體平台相關的檔案,以驅動模組為主。該檔案還定義這些模組和檔案以什麼方式被載入到記憶體中。具體格式如程式清單 0.5所示;

程式清單 0.5 Platform.bib格式

Name  Path      Memory      Type 

  Name:模組的名字,比如一個dll或者exe檔案的檔案名稱。

  Path:路徑,一般都是WinCE的工程的Release目錄。

  Memory:指定該模組被放在哪個地區,一般都是NK地區。

  Type:定義了檔案的類型,具體如下表 0‑1所示;

表 0‑1 TYPE類型

類型

描述

S

系統檔案。

H

隱藏檔案。

R

只壓縮模組的資源部分。

C

壓縮模組的所有部分。

D

禁止調試。

N

模組是不可信任的。

P

告訴Romimage.exe不需要檢查CPU的類型。

K

告訴Romimage.exe必需固定該模組的核心地址。有該標記的模組只能被LoadKernelLibrary函數載入。

X

告訴Romimage.exe對該模組簽名。

M

運行時載入整個模組,不要按需分頁。

L

告訴Romimage.exe不要分離ROM DLL。

  一般FILES項的Type只支援S,H,N,D幾個類型,而MODULES項的Type是都支援的。

  舉個例子吧:

  INIT.EXE     %_WINCEROOT%RELEASEINIT.EXE    NK   SH

  MYDLL.DLL   %_WINCEROOT%RELEASEMYDLL.DLL   NK  SHK

  對於BIB檔案來說同樣支援“條件編譯”,我們可以通過設定環境變數來選擇性地將某些模組打包到WinCE image中。一般在BSP中,對於一些驅動模組的環境變數我們IF來進行條件判斷。而對於WinCE的系統模組來說,一般都是SYSGEN變數,應該使用@CESYSGEN IF來判斷。

l       小技巧

通常修改Platform.bib或則Platform.reg檔案,都需要系統重新“sysgen”一次,“Sysgen”一次需要耗費比較長的時間,在工作中實在無法忍受。

如此,我們一般採用這種方法來處理。在Platfrom.bib檔案同級目錄下,建議一個以平台名稱命名的bib檔案,如OAMPL138.bib,然後在將該檔案INCLUDE到Platfrom檔案中(如程式清單 0.6所示),需要修改的時候只修改OAMPL138.bib檔案,之後Make Run-Time Image即可生效。

程式清單 0.6 INCLUDE

#include "$(_TARGETPLATROOT)\FILES\OAMPL138.bib"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.