星期二, 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 則留言:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    回覆刪除
  10. Hello 版主~

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

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

    回覆刪除