有關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:
- NLS(Native Languege Support) Compression tool (Cenlscmp.exe) enable
- Fmerge.exe - merge multi bib , reg, dat, db to one.
- RegComp.exe (Registry Compression Tool) 將Reginit.int 轉為binary 模式(Default.fdf),這個file會被包在image中(在ce.bib中可以找到)。
- Res2exe.exe (Resource Update Tool) : 將DLL.EXE 中與語系,地區相關的resource file換掉。
- Txt2ucd.exe (Text to Unicode Tool) : 將Fmerge.exe產生的Initobj.tmp中的ASCII string轉成Unicode string,放在Initobj.dat
- Romimage.exe (Rom Image Builder Tool) :根據 Ce.bib 的內容,將file 安排好。產生nk.bin。
下一個,將檔案加到 image中:
ms-help://MS.WindowsCE.500/wceosdev5/html/wce50tskAddingaFiletoanOperatingSystem.htm
分成兩步驟
- 將檔案copy到release folder中
- 告訴pb 將檔案加到image中
告訴pb 的方法是 將要加入的file加到Project.bib中的FILE Section。follow bib的格式:
FILESName會檔案在Image中的名字。
; Name Path Memory Type
; -------------- -------------------------------- ------ ----
<file name> $(_FLATRELEASEDIR)\<file name> NK S
有關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 則留言:
不好意思~
小弟有個問題想請教,
就是我想在BSP上新增一個driver,
我試了兩種方式,一種是用New a DLL,
另一種是我直接copy backlight driver的目錄在更名成testDriver,並且修改所有檔名跟makefile, source code,
然後我想問的是,照理講新增一個driver應該要修改ce.bib才會把driver build進nk.bin,但是不知道為什麼我沒有修改,
ce.bib自己就會把新的driver新增進去?不知是依據哪一個檔案作新增依據?
我到是沒有用過"New DLL" 的方法。
而且,我改的BIB是platform.bib。
我也不曉得你是怎麼樣做到這樣"自動"的耶.. :p
後來想到..自動的話...或是你的project中有postscript,會自動修改platform.bib ?
我也有改platform.bib,但是沒有改ce.bib,所以說我只要改platform.bib就可以了嗎?不用再改ce.bib?
至於postscript我不知道是什麼耶?
對呀,改platform.bib 就可以了,sysgen的時候會自動update到ce.bib (所以光改ce.bib 的話反而沒用)。
postscript 就是一個batch 檔,可以放在每個source folder中,在每次build 完後,ce builder 會去run 他。
所以你可以把修改ce.bib 的動作寫在裡面。
---- 這應該是比較標準的作法吧,但是我也不會。
對了,不知道版主知不知道sysgen的所有使用之DOS指令?
因為sysgen實在太慢了,
如果知道某幾個dos指令,改一個driver應該就不用重作sysgen,比較不浪費時間。
改platfform\src\drivers 下的東西是真的不用sysgen,只要用platform builder 的"open release directory"開啟dos box,到該driver 目錄下。
然後:
SET WINCEREL=1
build -c
完成後,到platform build 下執行makeimage就可以了。
不好意思ㄛ,我在PBWorkspace下跟在Platform下都可以下makeimg指令,
請問你指的platform build是指哪個目錄阿?
====
那如果我要新增一個新driver,修改完platform.bib跟platform.reg之後,
也不用sysgen,只要作你說的兩個步驟就可以了嗎?~
THANKS~~~ !!
新增跟修改bib. reg 還是要作sysgen的 (或說是 buildrel)。
單純改某個driver,重build 的話。
到該driver 的目錄下build,然後makeimg 就可以。
Hello 版主~
問一個小小問題,
我搜索整個電腦都找不到Fmerge.exe
此file是隱藏檔嗎?
THANKS~
是不是隱藏檔我不知道 (應該不是吧 )。
但是在platform 的"open release directory" 開啟的dos prompt下輸入 fmerge.exe是可以正確執行的。
張貼留言