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

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

2010-12-103Gfly工作室 Tonney Eszc《微型计算机》2010年11月下

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

在前两期文章中,我们详细介绍了Windows Mobile系统(以下简称“WM”)的ROM定制的相关知识、操作术语以及ROM定制所需的工具,并通过实例分析了ROM的主要结构。在此基础之上,本期将教大家如何实现WM系统ROM移植以及制作OEM。需要说明的是,ROM移植是一项非常复杂的工作,除了要熟练掌握各种ROM制作工具外,还要对各机型的硬件以及ROM具有一定了解,方可进行移植。

ROM移植

Imgfstools下的ROM移植

在imgfstools下的ROM移植主要是对XIP和SYS的移植,由于imgfstools不具备自动移植的功能,所以很多工作需要玩家手动完成。

XIP移植

XIP即eXecute In Place的缩写,是WinCE核心部分。在微软的定义中,这块区域是以非压缩格式存放的,无需加载,由Bootloader直接调用执行。不同机型的XIP中OEMXIPKernel不同,而移植的目的是将低版本的Windows Mobile系统升级到高版本,即替换XIP中的MSXIPKernel。

●Step 1:获取XIP.BIN

XIP.BIN文件获取方式有很多,下面主要介绍用OSNBTools来获取XIP的方式,具体指令为“osnbtool -sp os.nb”。

从图1中可以看到OS.NB文件已经被分解为纯OS镜像文件:os.nb.OS.NB。分区1为XIP部分,分区2为IMGFS部分。


图1

下面先导出XIP部分,输入“osnbtool -d os.nb.OS.NB 1 xip.bin”,得到了xip.bin文件(图2)。


图2

●Step 2:移植XIP

利用XIPPort,点击dump xip.bin(图3 ),得到OUT文件夹。先按write maps纪录修改前面的地址,将MAP.txt文件另存后再按make pkgs进行整理。替换除OEMXIPKernel文件夹之外的其它文件后,按“undo”→“realloc P”重排地址。


图3

若提示出错,可能是地址重排时出现地址重叠,只要按照之前另存的MAP.txt文件中的顺序,按照新替换的文件大小,重新计算后修改新替换文件的imageinfo.txt中的地址“e32_vbase:”和“o32[1].o32_realaddr:”,然后再次进行realloc P地址重排即可。有时出错是因为替换的新文件超过原来的限制,这时有两个方法:一是删除并不需要的文件后再重排地址;二就是对XIP的大小进行扩容,具体操作为:

打开romhdr.txt,我们主要修改这几个内容:

physfirst: P=80000000

physlast: 803E1A3C

nummods: (00000022)

ulRAMStart: R=803E2000

ulRAMFree: 80487000

ulRAMEnd: 83400000

physfirst是起始地址,physlast是结束地址,我们要增大1M的空间,就要把physlast的地址改后1M(即修改成804E1A3C),后面的ulRAMStart和ulRAMFree也要顺着延后1M地址才行,结果如下:

physfirst: P=80000000

physlast: 804E1A3C

nummods: (00000022)

ulRAMStart: R=804E2000

ulRAMFree: 80587000

ulRAMEnd: 83400000

保存关闭后,点击xipport的realloc P,若没有再报错,则说明空间足够大了。点击write maps,将重新分配模板位置的值写进map.txt。然后再进入out目录,打开map.txt查看有没有地址冲突。如果有冲突,需要修改新替换文件的imageinfo.txt中的地址。

对比修改前后的map.txt文件,可以发现原本在RAM里有几个模块而现在没有了。这是因为加大地址后把那些文件都挤出了地址范围,为此我们要将这些模块加回来。

此外,从修改后的map.txt文件中不难看出physlast从地址80477e8a就已经结束了,后面多出“80477e8a - 804e1a3c L00069bb2 NUL”,重新修改一下ROMHDR.txt,将physlast修改成80477e8c,保存退出后再用xipport realloc P、write maps。打开ROMHDR.txt,把ulRAMStart修改成80478000。

接下来需要往map.txt中加入nk、hd.dll、osaxst0.dd和osaxst1.dll模块,后用xipport realloc P、write maps处理,得到如下结果:

80478000 - 80478000 L00000000 Sart: start of RAM

80478000 - 80479000 L00001000 nitialized data of region_1 hd.dll

80479000 - 8047d000 L00004000 nitialized data of region_1 osaxst0.dll

8047d000 - 8047e000 L00001000 nitialized data of region_1 osaxst1.dll

8047e000 - 80480000 L00002000 NUL

80480000 - 80486000 L00006000 uninitialized data of region_1 nk.exe

80486000 - 80504000 L0007e000 initialized data of region_2 nk.exe

80504000 - 80517000 L00013000 initialized data of region_1 kd.dll

80517000 - 80517000 L00000000 ------ start of RAM free space

80517000 - 83400000 L02ee9000 NUL

83400000 - 83400000 L00000000 End: end of RAM

点击xipport的build xip_out.bin,会生成一个xip_out.bin,这就是替换后的新XIP了,接着我们要导入xip_out.bin到os.nb.payload里。如图4所示,在xipport的“write xip_out.bin to:”两个框填00320000(XIP的起始地址)及OS.NB.payload(要导入的文件名),然后按一下write xip_out.bin就可以了。


图4

SYS移植

SYS的移植其实很简单,不管从任何渠道得到的SYS文件,只需要保留原SYS文件夹中的.VM和.ROM文件夹即可,其余部分可以完全替换。

PRB模式下的ROM移植

前文已反复多次提到,在PRB模式下可自动移植并对模块文件进行重新排列,那么在PRB模式下进行ROM移植将会是一件非常简单的事情,这也是为什么众多的ROM爱好者喜欢用PRB生成ROM的原因之一。在PRB模式下,仅需替换掉MSXIPKernel内的所有文件,即可完成ROM移植。

制作OEM

OEM Package是ROM模板的关键部分,通过选择不同的OEM Package可以定制出不同的ROM,接下来我们将介绍如何将软件的cab安装包制成OEM Package。

一个完整的OEM Package应包括如下内容:软件自身所需文件、快捷方式(非必要,视软件而定)、dsm文件(不可缺)、rgu(注册表文件,非必要,视软件而定)、initflashfiles.txt(主要用于指定刷机文件的存放位置,非必要,视软件而定)、option.xml(用于系统加载该OEM Package以及显示相关内容,不可缺)。下面我们以PHM Registry Editor V0.70为例,来介绍如何将该软件的cab安装包regedit.Mrln_ARM.CAB转换成OEM Package。值得一提的是,PHM Registry Editor是一款免费的PPC注册表编辑软件,从网上下载该软件的cab安装包(选PocktPC 2002/2003,ARM/PXA)。

在将Cab转换成OEM之前,必须获取GUID(UUID)码以及解压cab包的软件。首先,GUID是Globally Unique IDentifier的缩写,每个OEM Package都有一串唯一的GUID码用于系统识别,玩家可以在特定网站(网址为http://www.famkruithof.net/uuid/uuidgen)来获取所需的GUID码。具体方法为,登录网站并在“Get”按钮旁选“Version1:Time/Node based”或者“Version4:Random”,然后点击“Get”按钮则会自动生成GUID(图5),将该串GUID码(本文为2e7230bd-1d2e-4c59-8643-85fee5d5f86b)记下。接着是解压cab包的软件。


图5

Ocp Software公司出品的WinceManager或CabWUZ均可以用于解压cab包。在下面的例子中,我们将通过CabWUZ软件把regedit.Mrln_ARM.CAB转换成OEM Package。

Step 1:下载regedit.Mrln_ARM.CAB后用CabWUZ打开,左边从上到下有Files、Shortcuts和Registry:Files里面包括PHM Registry Editor软件的自带文件,我们等会儿要将这些文件全部导出;Shortcuts是快捷方式,不必管它;Registry里面是软件运行所需的注册表。

Step 2:将左边的Files目录展开,可以看见里面共有9个文件。注意第三栏的Location,指的是该文件的存放位置。除了regedit.exe的存放位置为%InstallDir%外,其余8个文件的存放位置都是%Windows%。

Step 3:点击工具栏上面的Extract按钮,将Files目录下所有文件导出到“桌面/PHM Registry Editor/”目录下。

Step 4:打开PHM Registry Editor目录,里面有2个文件夹,分别为“[INSTALLDIR]”和“Windows”。前者里面只有regedit.exe文件,后者里面有8个文件,即cab包里面的那些存放位置为%Windows%的文件。

Step 5:将两个目录下的9个文件全部复制到PHM Registry Editor目录。

Step 6:新建两个TXT文件,将其中一个命名为“2e7230bd-1d2e-4c59-8643-85fee5d5f86b.dsm”(即GUID码.dsm),另一个命名为“2e7230bd-1d2e-4c59-8643-85fee5d5f86b.rgu”(即GUID码.rgu)。

Step 7:用记事本打开.rgu文件,然后另存为Unicode格式。这点很重要,否则在BuildOS执行时会出错。

Step 8:若用WinceManager替代cabWUZ软件打开regedit.Mrln_ARM.CAB文件,则通过Export to reg功能直接将注册表信息导出。

Step 9: 从Files目录可以看出,regedit.exe是个可执行文件,因此需要为它建立一个快捷方式,使之可以方便地被调用。由于所有OEM Package的文件都会被放置在Windows目录下,所以regedit.exe的路径是“Windows egedit.exe”。在PHM Registry Editor目录下,新建一个TXT文件,然后输入“#"Windows egedit.exe"”并存盘退出,将该TXT文件重命名为“PHM RegEdit.lnk”。

Step 10:在PHM Registry Editor目录下,新建一个TXT文档并重命名为“initflashfiles.
txt”,输入以下内容:

;Start PHM RegEdit

;===========================================

Directory(“WindowsStart MenuPrograms"):-File("PHM RegEdit.lnk","WindowsPHM RegEdit.lnk")

;===========================================

;End PHM RegEdit

这段代码的意思是将Windows目录下的PHM RegEdit.lnk复制到“WindowsStart MenuPrograms”目录下。输入完成后将initflashfiles.txt保存为unicode格式。

Step 11:BuildOS.exe是通过option.xml来加载OEM Package的,如果没有option.xml,则该OEM Package不会被加载。同样地,新建一个TXT文档并重命名为“option.xml”,输入以下内容:

<?xml version="1.0″ encoding="UTF-16″ standalone="yes"?>

<Items>

<Item name="PHM Registry Editor" group="Applications - 应用程序" checked="true">

<Tip>注册表编辑软件</Tip>

<Guid type="p">2e72e0bd-1d2e-4c59-8643-85fee5d5f86b</Guid>

</Item>

</Items>

Step 12:至此PHM Registry Editor的OEM Package已经全部建好。除了软件本身的9个文件外,加上dsm、rgu、initflashfile、shortcut以及option.xml,总共14个文件。如果软件本身不带注册表信息,如绿色软件,可以不用建rgu文件。同样地,快捷方式和iniflashfiles都是可选项。

Step 13:将PHM Registry Editor文件夹复制到“My_ROM_KitchenOEM”目录下,总算大功告成。

写在后

虽然ROM定制这种玩法经历了较长时间的发展,但不少工具的操作依然比较复杂,甚至连图形界面也没有。正因为如此,对于新手而言往往很难上手,建议大家刚开始定制ROM时找有经验的老手协助,或在专业论坛上向他人多多请教。俗话说“有志者事竟成”,大家不妨放手尝试一下制作自己的个性ROM,祝大家早日做出自己喜欢的ROM。

分享到:

用户评论

共有评论(1)

  • 2011.04.23 23:02
    1楼

    太爱MC了 我还本来还想自己把网上下来的教程整理下呢 这下可以省事了

    (0) (0) 回复

用户名:

密码: