日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Platform Builder实践之配置文件

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Platform Builder实践之配置文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這篇文章主要講解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中修改配置文件前如果沒有把握最好先做好備份。

  l .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”。

總結

以上是生活随笔為你收集整理的Platform Builder实践之配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。