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

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

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

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

长期以来,Windows Mobile(以下简称“WM”)的ROM(只读内存)定制技术掌握在极少数高手的手中,但随着参与的手机玩家越来越多,ROM的分解、制作、合成工具越来越简单化,现在只要有一点电脑基础的人都可以利用网络上的现成工具制作出自己的个性ROM。尽管网络上流行的ROM定制工具和教程很多,但万变不离其宗。由于本文篇幅较长,因此分成了多个部分,本期主要介绍ROM定制的基础知识和主要工具。

ROM定制知识扫盲

对于大多数非专业出身的手机玩家而言,ROM文件基于系统层面的内容是无法修改编译的,因此,通常我们所说的ROM DIY其实就是利用某些工具对ROM先解包,然后添加、删除或者替换部分文件,再进行打包、转换的过程。为方便理解,有必要先来了解一些ROM定制经常用到的术语。

硬件知识

IPL(Initial Program Loader,初始程序加载):是CPU复位向量用以引导启动的的软件组件。其负责主板、电源、硬件的初始化程序,并把SPL装入RAM(随机存取存储器)中。若IPL损坏,由于不能加载SPL,因此手机将无法使用任何由SPL完成装载的操作系统。

SPL(Second Program Loader,第二次装系统):负责装载操作系统到RAM中。同时,SPL还包括许多系统命令,如mtty中使用的命令等。SPL损坏了可以用烧录器重写。 一般SPL具有以下功能:检测手机硬件、寻找系统启动分区、启动操作系统、为系统的基本维护提供操作界面、通过数据线与操作终端(如PC)建立连接、接受和执行相应命令等。我们常说的三色屏就是由SPL驱动的。IPL和SPL的版本可以在三色屏中查看,具体方法是:按住照相键不放,然后短按电源开机键即可进入三色屏查看相关信息。

RADIO:负责PPC作为手机功能的通讯功能,包括它的电话和上网功能,事实上,RADIO硬件模块在手机出厂时已经内置,我们所刷入的不过是软件部分,因为软件决定了RADIO硬件模块接收和传递信号的频段分配,所以硬件RADIO的称谓已经被弱化,我们把这种RADIO软件层面的东东一律称为RADIO。

刷机原理

刷ROM:指将新的ROM刷入PPC。ROM部分有IPL、SPL、OS、EXTROM、RADIO、STORAGE等,我们刷入的ROM一般只包含OS部分。OS部分又分为XIP和IMGFS,而这两部分正是影响系统的主要因素。

刷RADIO:即刷入RADIO模块的应用软件,不同地区、不同通信网络、无线通讯基站在接收和发送无线信号上的频段各有不同,那么处于这个地区和这个通讯服务网络之内的RADIO硬件模块,在频段调整上越接近于本地基站,手机的通讯信号就会越好,信号接收和发送就会越完整越快速,信号搜索上也会越稳定,从而使PPC的信号强劲且省电。

解锁:PPC在出厂时对机器内部核心的CID(Customer IDentity,手机的平台版本)地址段进行了上锁。上锁的原理是基于微软对于开放性的WM系统所提供的一种特权保护机制,该机制对应用程序能够访问的系统资源作了限制,而厂家正是利用这一点实现了对系统ROM的锁定。锁定的目的既是为了不同机型间的区别和独立性,又是保障厂家对WM系统推陈出新上的独立自主权。锁定被集中在机器CID地址段上,不同CID的ROM相互之间不能进行交互性的替换,如果强行刷入CID不同的ROM,将无法通过CID校验,严重的会出现系统无法修复的现象。为此衍生出一种通过CID地址段欺骗的手段来对上锁的CID进行破解,进而将新的ROM写入机器。

永久解锁:又称SuperCID,此种方法即便操作失败,原有系统也不会受到较大破坏,且很容易修复,因此我们常称此种解锁能使PPC“拥有金刚不坏之身”。

操作术语

重启:通过重启可以解决RAM运行不正常的故障,如系统运行中的死机、找不到程序模块等。大部分的WM手机都会在使用一定时间内做重启操作,不是因为断电,而是由于机器运行一段时间之后会有相当一部分的垃圾文件保存在RAM中,这是由于我们频繁操作手机造成的。众所周知,RAM剩余得越少,机器可用的动态存储空间就越小,运行速度也会越慢,耗电量会随之增大。重新开机之后,系统会重新加载应用程序,这时候RAM是一个相对干净的空间。

硬启:和重启一样都需要重新启动机器,所不同的是硬启将丢失保存在ROM和RAM中的所有数据,而重启只丢失RAM。硬启后系统会自动还原为初始状态,所有的设定要重新来做,所有的资料要重新拷贝进去。硬启的原理是利用机器自身进行了格式化,再将保存在ROM中的初始数据调出并重新加载。硬启操作平时不常用,除非系统的ROM出现了无法修复的错误导致手机不能正常运行,那就只能通过硬启来修复系统。

定屏:顾名思义就是屏幕定各住不动、不理会用户的操作。PPC中的定屏现象主要指的是在开机三屏(或者两屏)上,正常情况下开机之后随着系统的加载,开机屏幕会逐步跳过直到出现调整的界面,但是因为ROM制作中出现错误或者遗漏,导致新ROM刷入之后开机屏幕跳不过去。无论你等待多长时间,手机屏幕定格在那不动了,无法进入系统,导致刷机失败。

假死:又称为睡死,是指机器表面上运行正常,但是后台的部分应用程序不能被激发。比如在待机模式下,电话呼入屏幕无显示、无铃声,在操作某项程序时出现激发暂时无反应或者反应延时过长。

三色屏:刷机时必须进入的状态,类似于电脑进入BIOS设置界面。当手机系统出了问题且无法进入时,必须进三色屏才能重刷系统。一般情况下通过按住手机的照相键,再按开机键进入。进三色屏后可以查看当前手机字库的版本,如IPL、SPL版本号等。

实例解析ROM结构

通常一个WM系统的ROM由SPL(装载系统、CID检测等)、IPL、OS(操作系统)、Splash(开机画面)、RADIO(无线部分)、ExtROM等多个部分组成。在这里笔者以多普达S505的ROM为例,简单分析其结构。看过本节之后,相信大家都能把自己购买的新手机的配置文件添加到NBHUtil、htcrt、NBHextract等解包工具中。

下载的EXE文件可以用WINRAR打开并且解压出来,其中RUU_signed.nbh是ROM,其余文件是刷机软件。先解压RUU_signed.nbh到一个新文件夹中。如图1所示,打开NBH Utility软件,点击Extract NBH选项,在NBH To Extract一栏选上刚解压的RUU_signed.nbh,点击“Go!”按钮。再点击图1的③处,可得到0_SPL.nb、1_Splash.nb、2_SubSplash.nb、3_Unknown-785.nb、4_OS.nb、5_Unknown-2560.nb等文件。


图1

用WINHEX打开RUU_signed.nbh.payload文件,如图2所示,1FF之前交代了机型定义、文件版本以及组成NBH有几个模块、各自的起始位置、文件大小等。


图2

如今我们需要在NBHUtil.xml文件中添加S505,具体配置如下:

<device name="HTC S505" chunksize="64">

<ModelID>VOGU21000</ModelID>

<CID>DOPOD701</CID>

<Ver>1.73.706.2</Ver>

<Lang>CHS</Lang>

<Item value="0x200">SPL</Item>

<Item value="0x600">Splash</Item>

<Item value="0x601">SubSplash</Item>

<Item value="0x311">Unknown-785</Item>

<Item value="0x400">OS</Item>

<Item value="0xA00">Unknown-2560</Item>

</device>

OS.nb.payload

OS.nb.payload有点类似于一个已经安装操作系统的磁盘镜像。要弄清OS.nb.payload,笔者认为有两个关键标记一定要记住,一个是E9FDFF00(OS跳转标记),另外一个是MSFLSH50。为什么说这两个地方要记住呢?因为MSFLSH50的偏移地址就是扇区大小,这分为两种情况:一种是MS标准的OS.NB。在一个MS标准的OS.NB里面,扇区大小只有2种可能,要么是200,要么是800,就是说MSFLSH50只可能出现在200或者800的偏移位置。另一种是非MS标准的OS.NB。其实也是在标准的OS.NB上进行插值处理,通常是插入0x8或者0x8的倍数的冗余数据,目的是对数据进行冗余性的编码来防止数据的丢失、错误。如此一来,往往会造成MSFLSH50没有出现在200或者800的偏移位置上,这就需要使用NBSpilt了。

要修改OS.nb.payload,必须先了解其主要结构。该文件通常由4个部分(ULDR、XIP、IMGFS和FAT)组成。

1.ULDR(Update Loader)。ULDR只是在更新时需要使用(包括ULDR的自我更新),有图形界面,显示驱动是uldrui.dll,分区为PART_BOOTSECTION(0x20)格式。在结构上,ULDR是一个独立的分区. 是ImageUpdate重要一环。ULDR只包含小尺寸的必要代码,可以读写系统分区和用户分区实现动态更新。IPL根据用户按键或者UpdateBin.exe设置,有选择的进入ULDR。

2.XIP(eXecute In Place)是WinCE的核心部分。在微软的定义中,这块区域以非压缩格式存放,不需加载,由Bootloader直接调用执行。但因为现在都是NAND ROM,所以XIP模块依然需要调入RAM的PAGEPOOL执行。

3.IMGFS好比是操作系统的镜像快照,XIP启动后就可以访问IMGFS文件系统上的所有文件了。IMGFS可以是XPR或LZX压缩格式(取决于XIP里面的cecompr.dll),系统访问上面的文件会自动解压到RAM。因为普通PE文件调入RAM执行要进行地址重定位,为了提高效率,IMGFS中的文件可以是重定位好的模块形式,这些程序运行就不用再重定位了,直接调入RAM中保留的PagePool(缓冲池)执行。

4、FAT操作系统引导记录区。有些机型没有FAT部分,若遇到这种情况的话,那么ULDR部分可以在定制时完全删除。

OS.nb.payload的0x1BE至0x1FD部分是DPT部分,定义了刚才4部分的起始位置、大小等内容。

Splash

接下来讲的是WM手机的开机画面,即1_Splash.nb和2_SubSplash.nb这两个文件。文件格式比较简单的,甚至还不如部分山寨手机的开机画面文件格式复杂。能够制作这种格式的软件有很多,时下常用的是nb_image_converter,具体操作如下:

 

Step 1:在nb_image_Tool的界面下点击Load按钮;从前文解包出来的文件中选取1_Splash.nb,即可看到现在的开机画面;

Step 2:替换方法也很简单,点击Load载入一张新的图片,然后点击Save.nb就可以了。

这个软件有两个缺点,一是不能把图片另存下来,二是画面的颜色偏差太大,实际显示效果不佳。为此笔者推荐另一款软件——Image Search Editor,可以直接从NBH文件中搜索到开机画面。

Step 1:打开软件会跳出一个文件选择对话框,双击1_Splash.nb。接下来在“视图”菜单里面选择16色,并选择设定图片尺寸,如笔者的手机屏幕分辨率为240×320;

Step 2:大家看到了吧,显示效果和前面那个软件完全是天壤之别。要想把画面保存下来也很简单,进入文件菜单选择另存为BMP图像就可以了。后进入“编辑”菜单,选择“用BMP图片替换文件”便成功替换掉了1_Splash.nb里面的画面。

写在后

利用现下的工具,ROM制作步骤虽然变得简单,但过程中存在着诸多的细节需要斟酌,大家仍然要有充分的细心和耐心,才能制作出一个完美的ROM。

分享到:

用户评论

共有评论(2)

用户名:

密码: