星期二, 9月 19, 2006

Make Binary Image Tool and Add file in Images

有關make binary image 的動作,可以將 make run-time image後,PB的"Build" output windows中的log copy 出來看,可以知道make binary image的整個動作(依序run哪些command),再利用PB 的help search這些command 。
ms-help://MS.WindowsCE.500/wcepbguide5/html/wce50conMakeBinaryImageTool.htm

make image時 Makeimg.exe 會呼叫以下program:
  1. NLS(Native Languege Support) Compression tool (Cenlscmp.exe) enable
  2. Fmerge.exe - merge multi bib , reg, dat, db to one.
  3. RegComp.exe (Registry Compression Tool) 將Reginit.int 轉為binary 模式(Default.fdf),這個file會被包在image中(在ce.bib中可以找到)。
  4. Res2exe.exe (Resource Update Tool) : 將DLL.EXE 中與語系,地區相關的resource file換掉。
  5. Txt2ucd.exe (Text to Unicode Tool) : 將Fmerge.exe產生的Initobj.tmp中的ASCII string轉成Unicode string,放在Initobj.dat
  6. Romimage.exe (Rom Image Builder Tool) :根據 Ce.bib 的內容,將file 安排好。產生nk.bin。
喔,很多。大部分make image的動作都在這裡說明了,應該要看一下。

下一個,將檔案加到 image中:
ms-help://MS.WindowsCE.500/wceosdev5/html/wce50tskAddingaFiletoanOperatingSystem.htm

分成兩步驟
  1. 將檔案copy到release folder中
  2. 告訴pb 將檔案加到image中
copy的動作可以用手動或是自動,手動就不用說了,自動的話可以利用PB的Platform Setting功能,在Prebuild 過程 加入copy動作。

告訴pb 的方法是 將要加入的file加到Project.bib中的FILE Section。follow bib的格式:
FILES
; Name Path Memory Type
; -------------- -------------------------------- ------ ----
<file name> $(_FLATRELEASEDIR)\<file name> NK S
Name會檔案在Image中的名字。

有關bib的file 欄位說明,在
ms-help://MS.WindowsCE.500/wceosdev5/html/wce50confilessection.htm

FILE section的內容和MODULE section一樣,但是Romimage.exe會壓縮FILE section,

Name : 該file在image 中的名字(memory table中的名字)。
Path : 在image中的path (folder ?) - 但是實際上看起來好像是source file path/name。
Memory block : 在Config.bib中MEMORY section 宣告的區域
Section override :
Type : file type,可以是:
  • S : system file,只有OS可以用
  • H : hidden,不會顯示在一般的目錄中
  • U : Uncompressed
  • N : untructed module
  • D : 不能debug

PB的output windows在make run-time image時會輸出最後的image map,內容包括最後各file, program 的各section 的location, size。
最後還會列出Starting ip (image entry)

11 則留言:

Unknown 提到...

不好意思~
小弟有個問題想請教,
就是我想在BSP上新增一個driver,
我試了兩種方式,一種是用New a DLL,
另一種是我直接copy backlight driver的目錄在更名成testDriver,並且修改所有檔名跟makefile, source code,
然後我想問的是,照理講新增一個driver應該要修改ce.bib才會把driver build進nk.bin,但是不知道為什麼我沒有修改,
ce.bib自己就會把新的driver新增進去?不知是依據哪一個檔案作新增依據?

checko 提到...

我到是沒有用過"New DLL" 的方法。
而且,我改的BIB是platform.bib。

我也不曉得你是怎麼樣做到這樣"自動"的耶.. :p

checko 提到...

後來想到..自動的話...或是你的project中有postscript,會自動修改platform.bib ?

Unknown 提到...

我也有改platform.bib,但是沒有改ce.bib,所以說我只要改platform.bib就可以了嗎?不用再改ce.bib?

至於postscript我不知道是什麼耶?

checko 提到...

對呀,改platform.bib 就可以了,sysgen的時候會自動update到ce.bib (所以光改ce.bib 的話反而沒用)。

postscript 就是一個batch 檔,可以放在每個source folder中,在每次build 完後,ce builder 會去run 他。

所以你可以把修改ce.bib 的動作寫在裡面。

---- 這應該是比較標準的作法吧,但是我也不會。

Unknown 提到...

對了,不知道版主知不知道sysgen的所有使用之DOS指令?
因為sysgen實在太慢了,
如果知道某幾個dos指令,改一個driver應該就不用重作sysgen,比較不浪費時間。

checko 提到...

改platfform\src\drivers 下的東西是真的不用sysgen,只要用platform builder 的"open release directory"開啟dos box,到該driver 目錄下。
然後:
SET WINCEREL=1
build -c
完成後,到platform build 下執行makeimage就可以了。

Unknown 提到...

不好意思ㄛ,我在PBWorkspace下跟在Platform下都可以下makeimg指令,
請問你指的platform build是指哪個目錄阿?
====
那如果我要新增一個新driver,修改完platform.bib跟platform.reg之後,
也不用sysgen,只要作你說的兩個步驟就可以了嗎?~
THANKS~~~ !!

checko 提到...

新增跟修改bib. reg 還是要作sysgen的 (或說是 buildrel)。

單純改某個driver,重build 的話。
到該driver 的目錄下build,然後makeimg 就可以。

匿名 提到...

Hello 版主~

問一個小小問題,
我搜索整個電腦都找不到Fmerge.exe
此file是隱藏檔嗎?
THANKS~

checko 提到...

是不是隱藏檔我不知道 (應該不是吧 )。
但是在platform 的"open release directory" 開啟的dos prompt下輸入 fmerge.exe是可以正確執行的。

網誌存檔