MCPLive > 杂志文章 > Windows Mobile系统ROM定制指南(二)

Windows Mobile系统ROM定制指南(二)

2010-11-183Gfly工作室 Tonney Eszc《微型计算机》2010年11月上

你在使用Windows Mobile手机吗?官方ROM固然稳定,但并非佳选择。现在你将有机会从官方ROM中去掉运营商定制的客户端、修改开机画面,甚至按照个人喜好对系统功能重新定制,从而打造一套完全属于自己的手机操作系统,还不赶快来试试?

在上期文章中,我们详细介绍了Windows Mobile系统(以下简称“WM”)的ROM定制的相关知识和操作术语,并通过实例分析了ROM的主要结构。俗话说“工欲善其事,必先利其器也”,接下来我们就来一起了解用于WM系统ROM定制的常用工具。

ROM合成工具

ROM合成工具现在比较通用的有2种:imgfstools和Platformrebuilder。imgfstools出现较早,包含ROM分解、合成打包等功能,每项功能均有单独的命令实现,使用较为复杂,且无法对模块地址排序进行处理。Platformrebuilder则简单易用,加上诸多国内外高手为之开发的可视操作界面,使其应用更为广泛,大有取代imgfstools之势。

imgfstools原理及介绍

imgfstools主要用来把OS.nb分解成多个小文件,能够解包、封包os.nb文件。大家使用的多的就是解开ROM的imgfs部分,即平时所说的DUMP,利用它可以将ROM的imgfs解开并保存在DUMP文件夹中。用户可以对DUMP目录做合理修改,然后按照解包步骤逆向操作,生成新的OS.Nb。下面我们将分解和封包的步骤梳理一遍。

分解过程链条:RUU-signed.nbh→(NBH_Extract)→OS.nb→(NBSplit)→OS.nb.payload→(ImgfsFromNb)→imgfs.bin→(ImgfsToDump)→DUMP目录

封包过程链条:DUMP目录→(ImgfsFromDump)→imgfs-new.bin→(ImgfsToNb)→OSnew.nb.payload→(NBMerge)→OS-new.nb→(NBHGen)→RUU-signed-new.nbh

●NBInfo

利用NBInfo可以看到OS.nb文件的结构,并能从指定的OS.nb文件输出信息。特别是分区表和MSFLSH区块,以及搜索各部分关键标记。

用法:NBinfo <foo.nb.payload>

●NBSplit

很多厂家的ROM都包含了很多额外的数据,为了防止刷机过程中数据的丢失、错误,而采取在发布的ROM中进行效验插值处理。

用法1:NBSplit -hermes|-kaiser|-titan|-wizard|-athena|-sp|-data <number> -extra <number> <filename.nb>

用法2:NBSplit -data <payload-chunksize> -extra <extra-chunk-size> <OS.nb>

●ImgfsFromNb

前身为prepare_imgfs,主要功能就是从OS.nb.payload中提取imgfs部分,并写入到一个叫imgfs.bin文件中。

用法:ImgfsFromNb <OS.nb.payload><imgfs.bin>

●ImgfsToDump

Imgfs好比是操作系统的镜像快照,而一个操作系统里面有很多文件,ImgfsToDump的作用就是把文件从imgfs文件释放到DUMP目录。需要说明的是,RecMod是一个把模块还原成单文件的一个工具,如果它和ImgfsToDump在同一个目录,那么生成的DUMP目录里面的所有模块文件,都会在模块目录里面重建一个单文件(DLL或者EXE)。

用法:ImgfsToDump <imgfs.bin>

●ImgfsFromDump

以原始的imgfs.bin为模板,从DUMP目录,生成新的imgfs-new.bin文件,它的前身是BuildImgfs,BuildImgfs和ImgfsFromDump大的区别是BuildImgfs只能生成和原始imgfs.bin文件大小一模一样的imgfs-new.bin,而ImgfsFromDump则可以根据DUMP目录文件内容,自动调整IMGFS文件大小,有效节约了空间,避免浪费,毕竟PPC的内存是宝贵的。

用法:ImgfsFromDump <imgfs.bin><imgfs-new.bin>

●ImgfsToNb

这个工具把imgfs-new.bin结合OS.nb.payload为模板,写入到一个新的os-new.nb.payload文件中。如果用了“-conservative”参数,那么在NBMerge的时候,也要使用“-conservative”参数。

用法1:ImgfsToNb <imgfs-new.bin> <OS.nb.payload> <os-new.nb.payload>

用法2:ImgfsToNb <imgfs-new.bin> <OS.nb.payload> <os-new.nb.payload> -conservative

●NBMerge

实际上就是NBSplit的逆向操作,重新对os-new.nb.payload进行插值处理,生成os-new.nb。

用法1:NBMerge -hermes|-kaiser|-titan|-sp|-wizard|-athena <os-new.nb>

用法2:NBMerge -hermes|-kaiser|-titan|-sp|-wizard|-athena <os-new.nb>
-conservative

用法3:NBMerge -data <payloadchunk-size> -extra <extra-chunk-size> <osnew.nb>

用法4:NBMerge -data <payloadchunk-size> -extra <extra-chunk-size> <osnew.nb> -conservative

Platformrebuilder原理及介绍

Platformrebuilder(PRB)是2009年推出的一款制作ROM的工具,其特点是快捷简便,省去了移植XIP、重拍地址的种种麻烦,并在一定程度上对生成的ROM做了加密(仅保留1个DSM)。PRB在工作过程中,会将XIP和ROM中的所有模块文件放在一起打包,再将所有的DSM文件信息打包到一个DSM文件中,然后对所有模块文件进行重新排列,生成ROM。

排序工具

上文已经提到了PRB具备模块排序功能,故下面介绍的2个排序工具仅针对imgfstools。

●G'reloc

该工具是用来为ROM的模块(module,通常是个DLL文件)地址进行重定位的,通常是BUILDOS之后的第一步操作。WM系统中的模块部分在移植后生成ROM之前必须对所有模块地址按.rom和.vm文件中的地址范围进行重新定位,以保证模块地址不冲突、不超范围,否则生成的ROM无法正常开机。

当然,对于直接分解的原始ROM,如果未加入新的模块文件,则没有必要重排地址。此工具虽然有图形界面,但是实际在使用时有命令行格式。值得一提的是,G'Reloc只能用于WM6.1以前的ROM,不支持WM6.5。

用法:G'Reloc -doit -dump

●WMReloc

和G'Reloc相比,WMReloc重排速度更快并且可以记录重排地址的日志,使用中相对稳定一些。WMReloc针对WM6.1和WM6.5有两个不同的版本。WMReloc没有图形界面,只是一个命令行工具,用法如下:

WMReloc -g[dir] -m[module] -s0[Slot0] -s1[Slot1] -l[logfile]

-g参数后是需要重排地址的文件夹;

-l参数后是记录日志的文件名称;

-m参数后是模块名称;

-s0指定Slot0部分的地址;

-s1指定Slot1部分的地址。

ROM定制高级工具

如今广泛使用的ROM定制高级工具有很多,如基于imgfstools的BuildOS、myBuildOS、PPCKitchen等以及基于PRB的EVK、OSKitchen、PRBuildOS等。其中,BuildOS、myBuildOS和EVK本文将作重点讲解,其它工具的使用方法则可依此类推。

BuildOS

这是第一个图形化的WM系统ROM定制工具,后来的ROM定制图形化工具基本上都是从此BuildOS改进而来。其基本原理是,将各功能模块以文件夹的形式分开,通过图形化的界面组织在一起。用鼠标点选需要的模块,然后BuildOS就会将你定制好的模块所需的全部文件和注册表信息放到固定文件夹中,再通过ROM合成工具合成,即可生成用于刷机的个性化ROM。值得一提的是,在使用BuildOS之前需要用分解工具将原始ROM分解,并用PackageTool等工具处理成BuildOS能用的模板形式(我们将在其它部分介绍)。

BuildOS界面中各模块是分组显示的,分组、OEM名称和注释等信息是由各文件夹中的option.xml来控制的。进入界面后只需选择所需模块(某些SYS下的关键功能模块必须选择)和OEM软件,然后点击工具栏上的 按钮即可开始ROM文件的生成过程。此过程处理完毕,会在当前目录empdump下形成所有需要的文件,接下来再用模块地址修改工具重排模块地址、用imgfstools等工具合成ROM等等。

myBuildOS

myBuildOS是某国内玩家在BuildOS的基础上进行修改而来,主要针对CHT9000的机型进行设计。由于其解决了BuildOS无法保存已选组件的问题,故在PRB未出现之前被国内广大ROM制作爱好者所广泛使用。myBuildOS功能相对简单,同样是选好选项后直接点击工具栏上的“开始定制”。myBuildOS比BuildOS多出的功能有:第一、选择好的SYS和OEM选项可以保存,下次再用或移植后直接打开的便是用户原来选好的选项;第二、左边增加了分类列表,以方便选项过多时进行查找;第三、在某个OEM上点右键,可从菜单里打开该OEM所在的文件夹。

对于新手而言,初次使用myBuildOS未必一帆风顺,其中以下两种错误时常遇到的。

错误一:因存在重复文件导致报错。定制好的ROM中不允许有两个完全同名的文件存在,因为所有文件默认定制完后都在WINDOWS目录下,否则会报错。在myBuildOS选择组件的时候,很多只能是“只选其一”,如拨号面板、同名不同版本的软件等。如果把只选其一的选了两个或以上,就会出现报错。不同版本的同名软件或者同功能软件选了两个,就出现报错。遇到此种错误后,需要去模板的OEM和SYS目录下搜索提示的文件名,看其在哪些文件夹下。如果是不同版本的同名软件,从选项里去掉一个不需要的就行了。如果不同软件里有同名文件,而且不是相同的文件,那就需要改其中一个的文件名,然后在initflashfiles.txt里将其从WINDOWS文件夹改名、复制到该软件的目录。

错误二:生成注册表过程中出现报错。myBuildOS的Build过程先将需要的文件复制到tempdump文件夹下,后才生成注册表。如果RGU有问题,并提示“建立 default.hv and user.hv文件错误,请查看templog.txt!”,这时需按提示信息找到templog.txt的后提示出错的RGU文件名,然后去OEM和SYS目录搜索下,找到其所在位置,用UltraEdit等编辑工具打开检查。

EVK

EVK全称是Ervius Visual Kitchen,由国外网友Ervius基于PRB制作而成,功能强大,并具备以下特性:

1.不仅支持各种HTC手机,貌似还支持Eten、华硕等机型;

2.简单的XIP Porting(系统的核心程序);

3.在Cook ROM时,无需一个对象配一组rgu机码;

4.由于bepe的程序代码采用了原生的C++语言,所以运行速度比较快;

5.新的Kitchen把常用程序放在EXT数据夹,便于配置及管理;

6.支持在同一个Kitchen建立多种语言以及版本的ROM;

7.XIP采用了封装的方式。

EXT数据夹的结构

这里的结构可用build_rom.bat指定,若使用Visual Kitchen则有自己的自订方式。一个以bepe Kitchen为结构的ROM主要包括Kitchen、OEM、SYS、ROM(子目录为XIP)、Tools等文件夹。其中,OEM文件夹主要用于放置ROM的驱动程序以及系预设程序档案,建议新手不要乱动。SYS文件夹则用于放置系统预设程序,如IE、MSN、Office等,当然用户也可以将它们删掉。ROM文件夹是放置XIP(核心)的地方,除非用户要替换核心,否则不要乱动。EXT文件夹是放置一些HTC预设程序的地方,需留意各OEM Package的兼容性。此外,Tools文件夹无需过多理会。为了便于理解,下面我们以EVK为例教大家如何来操作。


首先,下载EVK v1.8.2软件包,解压缩后可以看到如图所示的文件夹。

点击ErviusKitchen.exe,接下来你会看到如图所示的弹出窗口,这是因为程序侦测不到文件夹内有任何关于ROM的东西所显示的错误提示。


点击“确定”后,出现EVK的主界面。

由于刚开始我们没有Source,所以请大家随便找一款官方开放下载的ROM来当练习材料(本文将以HTC Touch Pro的ROMCODE来讲解)。

将下载的ROMCODE用Winrar或7zip解压缩,在这里我们只需要RUU_Signed.nbh。接着把它取出来放到EVK目录下,点击DUMP分解官方ROM。进入XXXXX_DUMP文件夹,若见到如图所示的文件夹及文件,则说明已经准备好Kitchen所需要的素材了。

分享到:

用户评论

用户名:

密码: