這篇文章主要講解PB的配置文件。從用途方面分析,PB包含兩種配置文件。分別是源碼配置文件和鏡像配置文件。下面分別講解這兩種配置文件。 一、源碼配置文件 源碼配置文件用于編譯源碼時(shí)使用。這里的源碼是指Windows CE公開的源碼,如驅(qū)動(dòng)程序、系統(tǒng)應(yīng)用程序等。PB在編譯平臺(tái)時(shí)將這些公開的源碼即時(shí)編譯并將編譯鏈接后的文件復(fù)制到平臺(tái)工程子目錄里。記得前面講過PB在開始編譯時(shí)調(diào)用cebuild.bat批處理文件,cebuild.bat執(zhí)行的一個(gè)步驟是針對(duì)_DEPTREES變量指定的所有目錄執(zhí)行build.exe和sysgen.bat。build.exe在編譯源碼文件時(shí)會(huì)尋找當(dāng)前目錄下存放的源碼配置文件,根據(jù)配置文件的信息來編譯和鏈接,產(chǎn)生EXE、DLL、LIB文件。CE的源碼文件所在的目錄中都包含了相應(yīng)的配置文件,這些配置文件只對(duì)當(dāng)前目錄或者子目錄的源碼有效,具體分為三種: DIRS文件:文件內(nèi)容和解釋如下: DIRS:指定哪個(gè)子目錄的源碼要被編譯 DIRS_CE:只有為CE編寫的源碼才被編譯 OPTIONAL_DIRS:指定可選的目錄(很少使用這個(gè)選項(xiàng)),可以只編譯指定目錄而不是全部編譯。 SOURCES文件:通過宏定義來指定編譯和鏈接涉及到的文件,文件內(nèi)容和解釋如下: TARGETNAME:指定編譯鏈接產(chǎn)生的主文件名 TARGETTYPE:指定編譯鏈接產(chǎn)生的文件的類型(決定了擴(kuò)展名)。文件共分三種:.lib(LIBRARY)和.dll(DYNLINK)和.exe(PROGRAM)。 TARGETLIBS:定義.lib鏈接文件,鏈接時(shí)需要這個(gè)文件。 SOURCES:源碼文件。包含擴(kuò)展名為*.c或*.h 或*.cpp的文件。 EXEENTRY:.exe文件的執(zhí)行代碼入口點(diǎn)。 sources.cmn文件是通用的SOURCES文件。在這個(gè)文件中可以指定作用于所有源碼文件的配置選項(xiàng)。 MAKEFILE文件:包含默認(rèn)的編譯和鏈接選項(xiàng) 整個(gè)編譯和鏈接過程:build.exe收集編譯和鏈接需要的數(shù)據(jù)(源碼文件、鏈接文件、編譯和鏈接選項(xiàng))產(chǎn)生一系列的內(nèi)部環(huán)境變量,然后調(diào)用nmake.exe,nmake.exe根據(jù)內(nèi)部環(huán)境變量執(zhí)行編譯、鏈接,最后產(chǎn)生最終文件(*.lib *.exe *.dll)。 二、鏡像配置文件: 鏡像配置文件用于在制作CE鏡像文件時(shí)使用。CE的鏡像文件擴(kuò)展名為.bin。制作鏡像工具romimage.exe除了能夠產(chǎn)生.bin文件外,還能夠產(chǎn)生.abx和.sre文件。整個(gè)鏡像的制作過程由makeimg.exe控制,它調(diào)用cenlscmp.exe、fmerge.exe、res2.exe、txt2ucde.exe、regcomp.exe、romimage.exe等。這些工具大部分在前面已經(jīng)介紹過了。鏡像配置文件類型有.bib、.reg、.db、.dat、.str。如果主文件名為Common,表示是通用的配置文件。如果主文件名為Platform,表示是某一個(gè)BSP的配置文件。如果主文件名是Project,表示是定制的一個(gè)平臺(tái)的配置文件。在PB中修改配置文件前如果沒有把握最好先做好備份。 .bib(Binary image builder) 定義包含在內(nèi)核鏡像中的文件和模塊的名稱、加載位置。主要的bib文件有Common.bib,Config.bib, Project.bib, Platform.bib等。.bib文件內(nèi)部分為幾個(gè)部分: 【MEMORY】用于定義有效的物理內(nèi)存塊,在此將整個(gè)RAM分為幾個(gè)部分。 格式: 名稱 首地址 大小 內(nèi)存類型 名稱: 內(nèi)存區(qū)域的唯一名稱(RESERVE是預(yù)定義名稱,可以用多次,表示此區(qū)域保留) 首地址: 內(nèi)存區(qū)域的首地址(十六進(jìn)制表示) 大小: 內(nèi)存區(qū)域的大小(十六進(jìn)制表示) 內(nèi)存類型:分為三種。 RAM: 運(yùn)行所有進(jìn)程的內(nèi)存區(qū)域(整個(gè)區(qū)域必須是連續(xù)的,且不能含空洞) RAMIMAGE:專用于保存鏡像的內(nèi)存區(qū)域。(每個(gè).bin中只能指定一個(gè)RAMIMAGE) RESERVED:保留內(nèi)存區(qū)域(這樣的區(qū)域一般用于驅(qū)動(dòng)程序使用,如顯卡緩沖區(qū)、DMA緩沖區(qū)) 舉例: ;名稱 首地址 大小 內(nèi)存類型 IF IMGRAM64 NK 80220000 009E0000 RAMIMAGE RAM 80C00000 03000000 RAM UMABUF 83C00000 00400000 RESERVED ENDIF 注:整個(gè)內(nèi)核的地址都是從0x8000 0000開始的。如果是x86系列的CPU,那么物理內(nèi)存地址與虛擬地址映射關(guān)系在oeminit.asm中指定。 【CONFIG】類似環(huán)境變量,PB預(yù)設(shè)置了一些配置變量。常用的配置及說明如下: AUTOSIZE: 格式:AUTOSIZE = OFF | ON 默認(rèn)值為OFF。在config.bib中的MEMORY部分定義了有效的內(nèi)存區(qū)域,其中兩部分RAM、RAMIMAGE分別用于進(jìn)程使用區(qū)域和保存鏡像區(qū)域。如果為ON,romimage.exe在創(chuàng)建nk.bin時(shí)將RAM和RAMIMAGE兩部分合并成一個(gè)部分,然后從最低地址開始保留RAMIMAGE大小的內(nèi)存,其余都作為RAM使用。 BOOTJUMP: .......... 更多詳情參考:http://www.hzlitai.com.cn/article/ARM9-article/system/1629.html |