1. 程式人生 > >手把手教你修改定製WM5的ROM(帶圖和相關工具)

手把手教你修改定製WM5的ROM(帶圖和相關工具)

官方版本WM5ROM定製教程
作者:[email protected]

一、獲取ROM檔案。
目前常見的官方版本WM5ROM只要是多普達577W,586W,i-mate SP5,SP5M,以及t-mobile和q-tech的相應版本,
其實以上這些機型歸結起來就是577W和586W,只是貼牌不同而已。
其中Dopod的和q-tech的為繁體中文版,i-mate和t-mobile的為英文版。
能直接下載到的官方rom是i-mate的新版英文ROM。如果你想要定製繁體中文的ROM,那麼可以從自己的機器上備份出來,然後進行修改。
備份ROM的方法,一般有兩種,一種是在三色屏用卡備份,工具是mtty,一種是直接通過activesyn用pdocread備份,前者將得到bin格式的ROM檔案,包含OS、Splash Screen、GMS、SPL、IPL等五個部分,是完整的ROM。而後者得到的是nb格式的ROM,僅包含OS部分。
以上兩種備份方式論壇都有詳細的教程,這裡不再贅述。

二、準備相關工具。
如果你手上的是bin格式rom檔案,需要安裝perl以及相關指令碼,本教程將以nbf為例,bin格式的前期處理請參閱別的教程,這裡不贅述,後期的處理都是一樣。
1、TyphoonNbfTool 用於解開WM5的ROM,這個同時也可以方便的替換開機的第一副圖片
2、imgfstools 工具包,這個用來在ROM中新增刪除檔案和模組
3、make_hv,這個用來出來hv格式的登錄檔,WM才用hv格式登錄檔
4、nb2nbf_tornado,這個用來將nb檔案合成nbf檔案,供RUU刷機用
5、RUU,這個是USB刷機工具
6、一些常用的文字和二進位制編輯工具,推薦準備ultraedit和emedit。
以上工具在附件中可以找到。順便提一下,2003的是要藉助perl處理的。

三、將ROM的OS部分分解出來。
1、在硬碟的根目錄建立一個資料夾,英文名字的,方便進入。解壓附件中的工具包到一個目錄,本教程中以tttt為示例。將rom檔案或者bin檔案放到tttt放進新建的資料夾,這樣比較不會亂。
如圖一所示。
[attach]304907[/attach]

2、執行tttt下面的TyphoonNbfTool.exe,選擇file——>open BNF,開啟你的ROM檔案,本例中為nk.nbf。開啟檔案之後,在視窗的下半部分可以看到nbf檔案中所包含的各個模組,見圖二。
[attach]304908[/attach]
選中其中的OS模組,點選右鍵,選擇選單中的Dump decrypted,將會讓你指定目錄,和nbf存放在同一個目錄就行了。稍等片刻,將會有success的提示。這時,目錄下會多一個名叫OS.n_d的檔案,這就是ROM的OS部分,將他改名為OS.nb或者OS.nba。

無論你的原始ROM是什麼格式,以下步驟都是一樣的了!!

四、開始定製ROM的實戰
1、開啟一個命令列視窗(開始——>執行,輸入cmd,回車),進入之前建立的那個目錄。(提示:你也可以安裝CmdHerePowertoySetup.exe程式,那麼就可以在Windows中任意檔案上通過右鍵選單快速進入該資料夾的命令列模式,檔案在附件中提供)
2、在命令列下輸入命令“tttt/prepare_imgfs os.nb -nosplit”,不要寫引號哦(下同)。對於以上提及的各種ROM,-nosplit引數是必須的,見圖三。命令結束之後,目錄下會出現imgfs_raw_data.bin和imgfs_removed_data.bin兩個檔案,見圖四imgfs_removed_data.bin不用理它。
[attach]304909[/attach]

3、將ROM中的檔案和模組解出來。(如果你只是想簡單的刪除或者新增或者替換幾個檔案或者模組,可以跳過這一步,直接看“六、簡單的新增刪除ROM檔案”介紹的方法。)在命令列執行命令“tttt/viewimgfs imgfs_raw_data.bin”。解開的過程會在螢幕上顯示,你只需要等待,最後會出現如圖五的提示。此時,資料夾下面會出現一個名為dump的目錄,ROM所有的檔案和模組就都在裡面了,如圖六所示,其中名為*.exe和*.dll的資料夾就是模組。
[attach]304910[/attach]
[attach]304911[/attach]

4、進入dump目錄,進行所有你所希望的新增、刪除和替換操作,至於哪些檔案能刪,那些不能刪,就要自己琢磨了,我只能告訴你,*.mui檔案是多語言介面檔案,其中0404是繁體中文,0409是英文,0804是簡體中文,對於繁體ROM,可以把0404以外的全部刪掉,簡體ROM可以把0804以外的全部刪掉,英文ROM當然必須保留0409的。還有就是沒用的影象和媒體檔案也可以刪除。一些快捷方式檔案可以替換,比如,short_ap1是短按聯絡人鍵,short_ap2是短按簡訊鍵等。

五、定製登錄檔
這一步是定製ROM的關鍵和精髓,如果改ROM不改登錄檔,那隻能算是精簡ROM。:)
WM5的初始登錄檔存放為default.hv和user.hv兩個檔案,硬啟的過程中,系統登錄檔將會從這兩個檔案恢復,硬啟之後系統有一個設定過程,在這個過程中,又會從*.rgu和*.provxml檔案讀取相關的一些登錄檔值寫入系統登錄檔。(在定製登錄檔的過程中,發現這三種檔案中有一些重複的值,因為不能確定誰的優先順序更高,因此就全部改成需要的了),修改登錄檔就是要從這三種檔案下手。rgu檔案和provxml檔案都可以用文字編輯器開啟,這裡建議使用emedit,因為他不會改變檔案的原始編碼方式,而且有很多方便的操作。接下來以default.hv為例重點講講hv檔案的操作:
1、在使用make_hv工具之前需要設定一個環境變數,你可以在命令列視窗中執行命令:“set _FLATRELEASEDIR=.”。也可以設定一個windows的全域性環境變數。建議設定全域性環境變數,這樣就不用每次新開啟命令列視窗都要執行set命令了。Windows全域性環境變數設定方法:控制面板——>系統——>高階——>環境變數——>XXX的使用者變數下面點新建,變數名:“_FLATRELEASEDIR”,變數值:“.”。
2、將default.hv和user.hv兩個檔案複製出來,在你之前新建的目錄,也就是放tttt等的那個目錄,見圖七。在命令列執行命令:“tttt/rgucomp -o default.hv -nologo > boot.rgu”,執行的結果,會在目錄下生成一個名為boot.rgu的檔案,用文字編輯器開啟這個檔案,請手工在第一行加入如“REGEDIT4”,如圖八所示。(提示,用emedit開啟這個檔案會出現一些提示,不用理它,這是因為unicode字元不能被rgucomp程式處理的原因,後面會講到)

3、由於登錄檔裡面有unicode字元存在,比如中文(件繁體中文ROM中)和一些歐洲文字(英文ROM中),而rgucomp並不能正確識別這些unicode字元,所以在hv轉換成rgu檔案的過程中,這些字元被忽略了,變成一些非列印字元,所以修改登錄檔的第一步就是要找到這些字元並刪除它或者修改它。
對於英文ROM的登錄檔而言,比較簡單,你只要搜尋“040”這個字串,然後把附近的除語言程式碼為0409以外的行都刪掉(當然要用其他語言介面的又另當別論,這裡只討論保留英文介面),自然就不會有這些字元了,見圖九。對於簡體或者繁體中文ROM,我們必須找它,然後修改,同樣的辦法,搜尋字串“0404”或者“0804”,會發現原先是中文的地方都被刪掉了,比如本來是“"相機"”的地方,變成“"”,如圖十所示。我們只需要把他還原成原來的樣子(提示,你可以從手機匯出一份登錄檔檔案,用搜索的方法,判斷這些地方原來是什麼字元)。
、怎樣修改登錄檔,修改那些內容,不在本教程討論之列,這裡只是教給你方法,我可以舉幾個例子,希望大家根據自己的情況,能夠舉一反三。比如想要將登錄檔修改成硬啟預設解鎖,可以搜尋00001001,然後在附近找到以下幾項進行修改:
00001001,預設值為2,改為1
00001005,預設值為10,改為28(相當於十進位制的16改為40)
00001017,預設值為80,改為90(相當於十進位制的128改為144)
新加一行為,0000101b,值為1
這樣的登錄檔就是已經解鎖的。
這裡值得一提的還有0000100D的值,這個值決定是否允許接收service loading訊息,也就是通常說的wap push簡訊。預設值c00是不接收任何push訊息,如果改為fff則是接收任何push訊息。
如果你搜索字串“EnableUsbCharging”,把值從1改成0那麼你的手機硬啟以後都不會通過USB充電了。
例子就舉這麼多,具體的需要大家自己去琢磨。需要注意的是註冊regedit4格式中的一個語法:如果你的字串值中需要引號,那麼必須在引號前面加上斜線“/”,變成“/"”。
5、將rgu檔案轉換為hv檔案。這個過程,在初次定製登錄檔的時候,可能會經常出錯,同樣是因為rgucomp不能處理unicode字元的原因。對於不含unicode的登錄檔rgu檔案(比如刪除所有其他語言的英文登錄檔檔案),不需要進一步處理,可以直接轉換,對於包含unicode字元的登錄檔檔案,比如簡體或者繁體中文的登錄檔檔案,需要將它儲存為編碼檔案。方法如下:
如果你使用的是我推薦的emedit文字編輯器,請使用另存為命令儲存檔案,在編碼一欄選擇UTF-16LE,並勾選下面的假如unicode簽名,然後同名儲存,覆蓋原來的boot.rgu檔案,見圖十一。
登錄檔另存為編碼檔案之後,就可以進行轉換了。在命令列執行命令“tttt/rgucomp -b”,如果命令沒有提示錯誤,則登錄檔的修改就算完成了,在目錄下找到boot.hv,將它重新命名為default.hv,當然改名之前別忘了刪除舊的default.hv檔案,然後用這個檔案替換dump目錄下的同名檔案。
這裡要提一下,“rgucomp -b”命令可能會返回錯誤,那就說明你的rgu檔案有問題,比如那些被忽略的unicode字元沒有處理乾淨,或者之前說的“"”前面沒有加斜線等。錯誤資訊中會包含出現錯誤的行數,你可以按照這個行數去找錯誤,這是我推薦emedit的第一個原因,因為他能顯示文字檔案的行號。你可以反覆改,反覆轉換,直到沒有錯誤提示為止。
user.hv的處理辦法和以上講的default.hv一摸一樣,只是相關檔名不同而已。
6、前面提到dump目錄下面的rgu檔案和provxml檔案也和登錄檔關係重大,因此在修改完hv檔案之後,應該修改這兩種檔案了。這兩種檔案都是文字格式,用emedit開啟之後,rgu的內容和hv檔案轉換成的rgu檔案相似,而provxml則是標準的xml檔案,你可以盡情的修改,記住儲存的時候,不要改變原來的編碼方式就可以了。這裡要說到我推薦emedit的第二個原因,他有一個多檔案查詢功能,可以在同一個目錄下查詢包含特定字元(串)的所有檔案,並將其列出,只要點選連線就可以開啟檔案。我前面提到hv檔案和rgu、provxml檔案有重複的內容,在每一個檔案中都把它改成一樣的,這樣就能保證最終得到的登錄檔是我們所希望的樣子。而這個工作用emdit的多檔案查詢功能來完成,顯然事半功倍。

六、打造完美支援中文的英文版ROM
1、準備兩個檔案,一個是中文版WM5的wince.nls檔案,一個是你喜歡的中文字型檔案,可以使true type字型(ttf),也可以是壓縮字型(ac3),你可以從簡體或者繁體版本的ROM中得到這些檔案,也可以從windows下面提取,需要注意的是字型檔案的大小不要超過10兆,否則ROM沒有空間放下它。將這兩個檔案放進dump目錄,wince.nls覆蓋舊的。
2、修改mxipupdate_OEMOPERATORS_101.provxml檔案的nian font段,英文ROM預設得值是這樣:
<!-- ========================= Nina font ========================= -->   
  <characteristic type="Registry">
                <characteristic type="HKLM/SYSTEM/GDI"  translation="filesystem" >
                        <parm name="FontLinkMethods" datatype="integer" value="1" />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Segoe Condensed" datatype="string" value="/Windows/nina_cs.ttf,Nina"  translation="filesystem"  />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Segoe Condensed Bold" datatype="string" value="/Windows/ninab_cs.ttf,Nina Bold"  translation="filesystem"  />
                </characteristic>
        </characteristic>

要支援中文請修改成下面這樣:
<!-- ========================= Nina font ========================= -->   
  <characteristic type="Registry">
                <characteristic type="HKLM/SYSTEM/GDI"  translation="filesystem" >
                        <parm name="FontLinkMethods" datatype="integer" value="1" />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Segoe Condensed" datatype="string" value="/Windows/nsimsun.ttf,NSimSun"  translation="filesystem"  />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Segoe Condensed Bold" datatype="string" value="/Windows/nsimsun.ttf,NSimSun"  translation="filesystem"  />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Tahoma" datatype="string" value="/Windows/nsimsun.ttf,NSimSun"  translation="filesystem"  />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Courier New" datatype="string" value="/Windows/nsimsun.ttf,NSimSun"  translation="filesystem"  />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="Nina" datatype="string" value="/Windows/nsimsun.ttf,NSimSun"  translation="filesystem"  />
                </characteristic>
                <characteristic type="HKLM/Software/Microsoft/FontLink/SystemLink"  translation="filesystem" >
                        <parm name="NSimSun" datatype="string" value="/Windows/nina_cs.ttf,nina"  translation="filesystem"  />
                </characteristic>
  </characteristic>

說明,在以上兩段中,“parm name”是該值在登錄檔中的值名,雖然可以任意命名,但是建議不要亂改,因為在登錄檔涉及好幾處連結。“value”的逗號前面是字型檔案的名稱和路徑,逗號後面是字型的真實名稱,這個非常重要,必須要正確的寫出字型的英文名稱,否則無效。如果你不知道字型的英文名稱是什麼,可以去網上下載一個字型管理或者字型檢視軟體,一般都能顯示字型的中英文名稱,總之,這個名稱很重要,一定不能寫錯。

這樣修改之後,你的ROM硬啟之後已經能顯示大部分的中文,但是還會有部分程式顯示亂碼或者方塊,比如媒體播放器和isilo,而且電話號碼的格式也會不正常,顯示為帶括號的電話號碼。不要著急,進入設定——>區域——>將所在區域選為中文(RPC),關機再開,就完全正常了。當然預設區域的設定,以及時區的設定,都可以通過定製登錄檔在刷機之前就做好,這些大家自己去琢磨吧,我在這就不費篇幅了。

關於登錄檔的定製大致就是這樣,還是那句話,想要定製一個完全適合自己的ROM,不但要動手,還要動腦。  :)

六、簡單的新增刪除ROM檔案
imgfstools工具包同時提供兩個簡單工具,addfile和delfile,如果你只是想刪除,新增,替換一些檔案和模組,而不想修改登錄檔和進行大量的檔案操作,那麼用這兩個命令就能直接在imgfs_removed_data.bin中新增、刪除、替換檔案了,舉一個例子:
我想一勞永逸的修改信封鍵的功能,使它能夠直接進入簡訊介面,而不需要進去之後再從列表中選擇簡訊。
先從手機裡面拷貝出一份short_AP2.lnk檔案,用記事本開啟,將檔案的內容由
19#/Windows/tmail.exe
改為
19#/Windows/tmail.exe -service "SMS"
儲存在和imgfs_removed_data.bin同一目錄下,然後再命令列執行命令
“tttt/delfile short_AP1.lnk”,刪除成功會有提示,然後執行命令
“tttt/addfile short_AP1.lnk”,新增成功也會有提示,並且列出ROM的空間使用情況,見圖十二
這樣替換檔案就完成了,刪除和新增檔案也都是一樣。
這個操作只適合少量檔案的處理,如果是大量檔案操作,建議還是解出來比較方便。雖然可以編一個批處理來新增和刪除,但是畢竟沒有直接操作直觀和方便。

七、重新生成imgfs_removed_data.bin檔案(沒有解出檔案的請跳過這一步)
在命令列執行命令:
“tttt/buildimgfs”
之後是一個較長時間的等待,並且你的電腦資源會被消耗殆盡,完成之後會有成功的提示。
原始的imgfs_removed_data.bin檔案必須存在,否則命令會失敗。

八、重新生成nb檔案
在命令列執行命令:
“tttt/make_imgfs os.nb -nosplit”
本文提及的各種ROM,nosplit引數是必須的,這個過程非常快,完成之後會有提示。如圖十三。
原始的nb檔案必須存在,否則命令會失敗。

九、重新生成nbf檔案
在tttt下面點選開啟nb2nbf_tornado.exe軟體,在介面下方勾上第一行的複選框,filename選擇剛才建立好的nb檔案,image name下拉框選擇“OS”,在stataddress的地方點一下,會自動填上開始地址和長度,在outputfile的位置指定輸出檔案為tttt目錄下的nk.nbf,然後按“traslate”按鈕,稍等片刻,會提示建立成功,如圖十四。
至此,屬於你的ROM出爐了!  :)