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

  • 来源:微型计算机
  • 关键字:Windows Mobile,系统,ROM
  • 发布时间:2010-12-02 13:58
  你在使用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部分。下面先导出XIP部分,输入“osnbtool -d os.nb.OS.NB 1 xip.bin”,得到了xip.bin文件(图2)。

  ●Step 2:移植XIP

  利用XIPPort,点击dump xip.bin(图3 ),得到OUT 文件夹。先按writema p s 纪录修改前面的地址,将MAP.txt文件另存后再按make pkgs进行整理。替换除OEMXIPKernel文件夹之外的其它文件后,按“undo”→“realloc P”重排地址。若提示出错,可能是地址重排时出现地址重叠,只要按照之前另存的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 - 804e1a3cL 0 0 0 6 9 b b 2 N U L”,重新修改一下ROMHDR.txt,将physlast修改成80477e8c,保存退出后再用xipport realloc P、writemaps。打开ROMHDR.txt,把ulRAMStart修改成80478000。

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

  80478000 - 80478000 L00000000

  Start: start of RAM

  80478000 - 80479000 L00001000

  initialized data of region_1 hd.dll

  80479000 - 8047d000 L00004000

  initialized data of region_1 osaxst0.dll

  8047d000 - 8047e000 L00001000

  initialized 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就可以了。

  SYS移植

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

  PRB模式下的ROM移植

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

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

  一个完整的OEM Package应包括如下内容:软件自身所需文件、快捷方式(非必要,视软件而定)、dsm文件(不可缺)、rgu(注册表文件,非必要,视软件而定)、initflashfiles.txt(主要用于指定刷机文件的存放位置,非必要,视软件而定)、option.xml(用于系统加载该OEM Package以及显示相关内容,不可缺)。下面我们以PHMRegistry 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/Nodebased”或者“Version4:Random”,然后点击“Get”按钮则会自动生成GUID(图5),将该串GUID码(本文为2e7230bd-1d2e-4c59-8643-85fee5d5f86b)记下。接着是解压cab包的软件。Ocp Software公司出品的WinceManager或CabWUZ均可以用于解压cab包。在下面的例子中,我们将通过CabWUZ软件把regedit.Mrln_ARM.CAB转换成OEM Package。

  一个命名为“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复制到“WindowsStartMenuPrograms”目录下。输入完成后将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"?>

  

  

  注册表编辑软件

  2e72e0bd-1d2e-4c59-8643-85fee5d5f86b

  


  


  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。
关注读览天下微信, 100万篇深度好文, 等你来看……