关闭

手把手教你修改定制WM5的ROM(带图和相关工具)

标签: 工具string文本编辑integerwindows语言
4782人阅读 评论(2) 收藏 举报
分类:
官方版本WM5ROM定制教程
作者:zihao@ioicn

一、获取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出炉了!  :)

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:509254次
    • 积分:1564
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:68篇
    • 译文:0篇
    • 评论:7条
    最新评论
    RCF 文档 英文网址
    RFC 文档 中文网址