PB 配置文件解析

這篇文章主要講解PB的配置文件。從用途方面分析,PB包含兩種配置文件。分別是源碼配置文件和鏡像配置文件。下面分別講解這兩種配置文件。

一、源碼配置文件
  源碼配置文件用於編譯源碼時使用。這裏的源碼是指Windows CE公開的源碼,如驅動程序、系統應用程序等。PB在編譯平臺時將這些公開的源碼即時編譯並將編譯鏈接後的文件複製到平臺工程子目錄裏。記得前面講過PB在開始編譯時調用cebuild.bat批處理文件,cebuild.bat執行的一個步驟是針對_DEPTREES變量指定的所有目錄執行build.exe和sysgen.bat。build.exe在編譯源碼文件時會尋找當前目錄下存放的源碼配置文件,根據配置文件的信息來編譯和鏈接,產生EXE、DLL、LIB文件。CE的源碼文件所在的目錄中都包含了相應的配置文件,這些配置文件只對當前目錄或者子目錄的源碼有效,具體分爲三種:

•DIRS文件:文件內容和解釋如下:
DIRS:指定哪個子目錄的源碼要被編譯
DIRS_CE:只有爲CE編寫的源碼才被編譯
OPTIONAL_DIRS:指定可選的目錄(很少使用這個選項),可以只編譯指定目錄而不是全部編譯。
•SOURCES文件:通過宏定義來指定編譯和鏈接涉及到的文件,文件內容和解釋如下:
TARGETNAME:指定編譯鏈接產生的主文件名
TARGETTYPE:指定編譯鏈接產生的文件的類型(決定了擴展名)。文件共分三種:.lib(LIBRARY)和.dll(DYNLINK)和.exe(PROGRAM)。
TARGETLIBS:定義.lib鏈接文件,鏈接時需要這個文件。
SOURCES:源碼文件。包含擴展名爲*.c或*.h 或*.cpp的文件。
EXEENTRY:.exe文件的執行代碼入口點。
sources.cmn文件是通用的SOURCES文件。在這個文件中可以指定作用於所有源碼文件的配置選項。
•MAKEFILE文件:包含默認的編譯和鏈接選項
整個編譯和鏈接過程:build.exe收集編譯和鏈接需要的數據(源碼文件、鏈接文件、編譯和鏈接選項)產生一系列的內部環境變量,然後調用nmake.exe,nmake.exe根據內部環境變量執行編譯、鏈接,最後產生最終文件(*.lib *.exe *.dll)。
 
二、鏡像配置文件:
  鏡像配置文件用於在製作CE鏡像文件時使用。CE的鏡像文件擴展名爲.bin。製作鏡像工具romimage.exe除了能夠產生.bin文件外,還能夠產生.abx和.sre文件。整個鏡像的製作過程由makeimg.exe控制,它調用cenlscmp.exe、fmerge.exe、res2.exe、txt2ucde.exe、regcomp.exe、romimage.exe等。這些工具大部分在前面已經介紹過了。鏡像配置文件類型有.bib、.reg、.db、.dat、.str。如果主文件名爲Common,表示是通用的配置文件。如果主文件名爲Platform,表示是某一個BSP的配置文件。如果主文件名是Project,表示是定製的一個平臺的配置文件。在PB中修改配置文件前如果沒有把握最好先做好備份。

.bib(Binary image builder)定義包含在內核鏡像中的文件和模塊的名稱、加載位置。主要的bib文件有Common.bib,Config.bib, Project.bib, Platform.bib等。.bib文件內部分爲幾個部分:

【MEMORY】用於定義有效的物理內存塊,在此將整個RAM分爲幾個部分。
格式:    名稱 首地址 大小 內存類型
名稱:    內存區域的唯一名稱(RESERVE是預定義名稱,可以用多次,表示此區域保留)
首地址:  內存區域的首地址(十六進制表示)
大小:    內存區域的大小(十六進制表示)
內存類型:分爲三種。
          RAM:     運行所有進程的內存區域(整個區域必須是連續的,且不能含空洞)
          RAMIMAGE:專用於保存鏡像的內存區域。(每個.bin中只能指定一個RAMIMAGE)
          RESERVED:保留內存區域(這樣的區域一般用於驅動程序使用,如顯卡緩衝區、DMA緩衝區)舉例:
     ;名稱 首地址 大小 內存類型
       IF IMGRAM64
       NK 80220000 009E0000 RAMIMAGE
       RAM 80C00000 03000000 RAM
       UMABUF 83C00000 00400000 RESERVED
       ENDIF注:整個內核的地址都是從0x8000 0000開始的。如果是x86系列的CPU,那麼物理內存地址與虛擬地址映射關係在oeminit.asm中指定。

【CONFIG】類似環境變量,PB預設置了一些配置變量。常用的配置及說明如下:
AUTOSIZE:
格式:AUTOSIZE = OFF | ON  默認值爲OFF。在config.bib中的MEMORY部分定義了有效的內存區域,其中兩部分RAM、RAMIMAGE分別用於進程使用區域和保存鏡像區域。如果爲ON,romimage.exe在創建nk.bin時將RAM和RAMIMAGE兩部分合併成一個部分,然後從最低地址開始保留RAMIMAGE大小的內存,其餘都作爲RAM使用。

BOOTJUMP:
格式:BOOTJUMP = address | NONE  默認值爲NONE。每次重新啓動CE內核,默認執行的代碼從RAMIMAGE的首地址開始。如果在BOOTJUMP指定一個地址(必須在RAMIMAGE範圍內),那麼將從指定的地址開始執行。

COMPRESSION:
格式:COMPRESSION = OFF | ON   默認值爲ON。romimage.exe在創建內核時默認壓縮所有可寫部分。對於文件,默認全部壓縮。對於模塊(.exe、.dll),默認壓縮可寫部分。模塊的可寫部分包括數據段,也就是在模塊運行時一定加載到內存中的部分。如果模塊在.bib中定義時具有C屬性(表明壓縮模塊所有部分),那麼當前這個選項就忽略了。

FSRAMPERCENT:
格式:FSRAMPERCENT = number   默認值爲0x80808080。指定爲文件系統分配的內存的百分比。number分爲四個字節,由十六進制表示。

byte0的值(單位爲4KB)表示在第一個2MB中,其中每1MB包含的4KB的整數倍。
byte1的值(單位爲4KB)表示在第二個2MB中,其中每1MB包含的4KB的整數倍。
byte2的值(單位爲4KB)表示在第三個2MB中,其中每1MB包含的4KB的整數倍。
byte3的值(單位爲4KB)表示在剩下的內存中,每1MB包含的4KB的整數倍。  計算一下默認值0x80808080表示的百分比:0x80*4K/1M = 0.5,因爲每個字節都等於0.5,所以整個佔用的百分比是50%。

KERNELFIXUPS:
格式:KERNELFIXUPS = OFF | ON  默認值爲ON。如果爲ON,romimage.exe創建內核前重定位內核到RAM的開始位置。

OUTPUT:
格式:OUTPUT = path  指定romimaeg.exe將創建完成的內核文件nk.bin放置到的路徑。一般放置到%_FLATRELEASEDIR%下。

ROMFLAGS
格式:ROMFLAGS = Flags設置內核選項的位掩碼,多個位掩碼可以組合使用。

•0x0001 禁止按需分頁:EXE和DLL默認是按需分頁的。
•0x0002 禁止全內核模式:進程運行在兩種模式下,用戶模式和內核模式。全內核模式下所有線程運行在內核模式。全內核模式能夠提高執行效率,但會增加系統的不穩定性。如果允許執行用戶程序,那麼不適合採用全內核模式。
•0x00000010 只信任來自ROM的模塊(DLL、EXE)。默認ROM中的模塊和所有文件系統的模塊都是內核信任的。OEM能夠在OAL層實現對所有運行模塊的檢查,這個標誌將忽略對來自ROM保存的模塊的檢查。
•0x00000020 停止刷新TLB。這個標誌僅用於運行在x86CPU上的內核。TLB(Translation Look-aside Buffer),有人翻譯成變換索引緩衝區,它的作用是在虛擬地址和物理地址之間轉換。對於具有實時性的內核,這個標誌應該設置。
•0x00000040 按照/base鏈接選項中的地址加載DLL。這樣內核將不採用重定位加載DLL。不建議採用。
ROMSIZE
格式:ROMSIZE = size指定內核鏡像的大小

ROMSTART
格式:ROMSTART = address指定內核鏡像的首地址

ROMWIDTH
格式:ROMWIDTH = width指定數據寬度,一般爲32位

ROMOFFSET
格式:ROMOFFSET = address指定偏移地址。

SRE
格式:SRE = OFF | ON指定romimage.exe是否產生.src文件,一般燒錄ROM的程序能夠識別此文件。

注:config中絕大多數【CONFIG】選項不需要修改。凡是配置文件都可以使用IF/ENDIF 條件語句。

【MODULES】定義鏡像要包含的模塊並指定模塊(DLL、EXE)如何被加載到內存表中。
格式:模塊名稱 路徑 內存塊 類型   模塊名稱一般爲模塊的真實名稱;路徑爲當前文件所處的位置(路徑中指定的文件名和前面模塊名稱最好一致);內存塊是指這個模塊將被存放到哪個內存塊中,內存塊的定義見前面MEMORY部分;類型指定這個模塊將被存放的屬性,具體類型如下:

•S:系統文件
•H:隱藏文件
•R:只壓縮模塊的資源部分(默認模塊是不壓縮的)
•C:壓縮模塊所有部分
•D:禁止調試
•N:標誌模塊是非信任的
•P:忽略CPU類型
•K:指定romimage.exe修正模塊(僅用於調試或者內核跟蹤)
•X:指定romimage.exe對此模塊驗證簽名
•M:運行時加載整個模塊,而不是按需分頁
•L:不分離DLL在進程地址空間和Slot 1
舉例:
      MODULES
      init.exe %_WINCEROOT%/RELEASE/INIT.EXE NK SH
      nk.exe $(_FLATRELEASEDIR)/kitlnokd.exe NK SHD
      nk.exe $(_FLATRELEASEDIR)/kitlnokd.exe NK SHN【FILES】定義鏡像要包含的文件並指定文件如何被加載到內存表中。
格式:模塊名稱 路徑 內存塊 類型具體類型如下:

•S:系統文件
•H:隱藏文件
•U:不壓縮文件(默認是壓縮的)
舉例:
    FILES
    initobj.dat %_WINCEROOT%/RELEASE/INITOBJ.DAT NK SH【.dat File System File】定義目錄和指定文件位置。當冷啓動CE平臺時,filesys.exe用這些數據
創建目錄、快捷方式、文件(在RAM文件系統)。舉例:
;;創建根目錄下子目錄Program Files
root:-Directory("Program Files")
;;創建目錄Program Files下一個子目錄My Projects
Directory("/Program Files"):-Directory("My Projects")
;;複製文件從/Windows/Myproj.exe到/Program Files/My Projects/My Project.exe
Directory("/Program Files/My Projects"):-File("My Project.exe", "/Windows/Myproj.exe")
;;複製文件從/Windows/control.lnk到/control.lnk
root:-File("/control.lnk", "/Windows/control.lnk")快捷方式的運用:如果要在CE平臺的桌面上顯示一個程序的快捷方式,實現步驟爲:

1.創建一個快捷方式。在開發機上用記事本一類的文字編輯軟件寫入字符格式爲:長度#路徑。其中長度爲路徑的字符個數。
例如"16#/windows/abc.lnk",注意路徑中空格也算在內。完成後保存爲ASCII碼的擴展名爲.lnk的文件。
將此快捷方式文件*.lnk複製到%_FLATRELEASEDIR%下,也就是PB編譯的所有文件存放的目錄。
2.在project.bib中的FILES部分下按FILES的格式鍵入字符。例如:
FILES
abc.lnk $(_FLATRELEASEDIR)/abc.lnk NK S
3.在project.dat中指定abc.lnk文件所存放的位置。例如:
root:-Directory("/Windows")
Directory("/Windows"):-Directory("LOC_DESKTOP_DIR")
Directory("/Windows/LOC_DESKTOP_DIR"):-File("abc.lnk","/Windows/abc.lnk")
【.reg Registry file】設置註冊表項。關於註冊表見我的文章《開發實例二:保存信息》。     
數據類型           格式
REG_SZ             "my string"
REG_DWORD           DWORD: NNNNN (十六進制)
REG_MULTI_SZ        multi_sz: "my string"
REG_BINARY hex:     xx,xx,xx,xx ...
HEX hex(xxxxxxxx):  xx,xx,xx,xx                  

例如:
[HKEY_LOCAL_MACHINE/init]
"Launch60"="myproc.exe" ///REG_SZ類型
"Depend60"=hex:14,00, 1e,00 ///REG_BINARY類型
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/TRUEFFS_UNAND/FATFS]
"MountFlags"=dword:2 ///REG_DWORD類型
【.db The database files】數據庫文件保存在對象存儲中。實際應用的不多,在這裏不再過多講解。【.str string files】類似EVC中的字符串資源。  用於指定ID與字符串的關聯。CE支持很多國家語言,所以內核使用的字符串可能採用不同國家的語言。爲此,CE將字符串用ID來定義,在.str文件中指定ID對應的字符串。包含.str文件的目錄名採用國家碼來設置,例如"C:/....../0410/cepc.str"。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ymzhou117/archive/2009/11/11/4799838.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章