Windows Mobile ROM的Dump和Pack步骤
Windows Mobile的机器很费电,这个是公认的事实。所以挑选一个占用内存小并且稳定的ROM很重要。但是国内大部分论坛提供的简体ROM都是6.5的,而且基本上都集成了马尼拉,我曾经尝试装过某些版本,一个晚上的待机就会耗电50%左右,让人无法忍受。最近发现国外很多网友制作的纯净ROM很好用,但是某些方面又无法满足国情需要(比如中文支持、拼音首字母检索等等),所以修改既有ROM并重新打包就变得很有必要。从一个Windows Mobile的新手跌跌撞撞地在各大论坛潜水了很长时间,终于了解Dump和重新Pack的过程,便将步骤写下来作为备忘。另外,这里主要是叙述HTC的ROM格式nbh(并且以Touch Pro2为例),而类似于nb0等等大同小异,不做叙述。
- 软件的准备:
- osnbtool_v1.59_by_Weisun (Mirror)
- xidump_v1.0_beta (Mirror)
- NBHUtil (Mirror)
- ImgfsTools_2.1rc2 (Mirror)
并非是以上所有软件都会用到,下面会讲到。
NBH to NB
得到的HTC ROM文件都为nbh格式,某些国内小组出的ROM可能会是exe格式,其实只是用某种压缩软件进行了打包而已,用WinRAR或者Universal Extractor解压即可得到真正的ROM文件。
运行NBHUtil,点击进入“Extract NBH”标签,“NBH To Extract”一栏选中的NBH文件,点击“GO!”进行NBH分析,然后点击右侧“NBH Item”栏中的“Extract”按钮开始解包(这里我们只解包OS),成功后会提示“Done!”。

NB Dump
这一步主要使用ImgfsTools工具集在命令行下操作。假设该工具集及NB文件都放置于“E:\roms”下。运行“cmd”并进入该目录。执行下面的命令并得到反馈:
E:\roms>NBSplit.exe -kaiser OS.nb
NBSplit 2.1rc2
Using data chunk size = 0x800 and extra chunk size = 0x8 on file OS.nb
Done.
得到了“OS.nb.payload”及“OS.nb.extra”两个文件。由于这里我们不涉及原理的讲解并且只修改ROM的内容,所以只会用到 “OS.nb.payload”。这里请注意,需要根据机型选择不同的参数,Touch Pro2应该选“-kaiser”,有些机型可能需要使用“-hermes”参数。
继续执行下面的命令并得到反馈:
E:\roms>ImgfsFromNb.exe OS.nb.payload imgfs.bin
ImgfsFromNb 2.1rc2
Sector size is 0x800 bytes
ImgFs partition starts at 0x00380000 and ends at 0x04380000
Dumping IMGFS at offset 0x00380000 (size 0x04000000)
Done!
这时得到真正的ROM文件imgfs.bin,继续解包它(时间会稍长):
E:\roms>ImgfsToDump.exe imgfs.bin
......
Header type: FFFFFFFF, Addr: 03FF4FC0
Empty header
正常完成解包过程后,目录下会生成“Dump”的文件夹,该文件夹内的文件即ROM的文件,可以根据自己需要往其中增删改文件了。
另外需要了解的是,ImgfsTools工具集内已经有编辑好的批处理文件,可以将上面“OS.nb→OS.nb.payload→imgfs.bin→Dump”的步骤一次性完成,效果是完全一样的:
E:\roms>NBDumpKaiser.bat OS.nb
NB Pack
自定义修改了Dump文件夹内的文件之后的步骤就是将其打包,可以理解为Dump的逆向操作“OS.nb←OS.nb.payload←imgfs.bin←Dump”。保持之前的文件还处于相同的相对位置。
E:\roms>ImgfsFromDump.exe imgfs.bin imgfs-new.bin
Processing "********" as file
......
Total Sectors: 0x****
这是以imgfs.bin这个ROM包为模板,将修改的Dump文件夹打包为新的ROM包imgfs-new.bin。继续:
E:\roms>ImgfsToNb.exe imgfs-new.bin OS.nb.payload os-new.nb.payload
ImgfsToNb 2.1rc2
Using bigstorage mode
Sector size is 0x800 bytes
Writing imgfs to offset byte 0x380000, sector 0x700
Padding ImgFs from 0x3ff9000 bytes (0x7ff2 sectors)
to 0x4000000 bytes (0x8000 sectors)
Not conservative mode. Changing imgfsEnd from 0x4380000 to 0x4380000
Partition entry before:
File System: 0x25
Start Sector: 0x00000700
Total Sectors: 0x00008000
Boot indicator: 0x00
First Head: 0x00
First Sector: 0x01
First Track: 0x1c
Last Head: 0x3f
Last Sector: 0x01
Last Track: 0x21b
Partition entry after:
File System: 0x25
Start Sector: 0x00000700
Total Sectors: 0x00008000
Boot indicator: 0x00
First Head: 0x00
First Sector: 0x01
First Track: 0x1c
Last Head: 0x3f
Last Sector: 0x01
Last Track: 0x21b
Partition entry before:
File System: 0x04
Start Sector: 0x00008700
Total Sectors: 0x00031000
Boot indicator: 0x00
First Head: 0x00
First Sector: 0x01
First Track: 0x21c
Last Head: 0x3f
Last Sector: 0x01
Last Track: 0x25b
Partition entry after:
File System: 0x04
Start Sector: 0x00008700
Total Sectors: 0x00031000
Boot indicator: 0x00
First Head: 0x00
First Sector: 0x01
First Track: 0x21c
Last Head: 0x3f
Last Sector: 0x01
Last Track: 0x25b
ImgFs Flash Region log blocks was 0x200, now is 0x200
Storage Flash Region log block was 0xffffffff, now is 0xffffffff,
Done!
得到“os-new.nb.payload”,再将它merge为NB文件,同样还是根据机型选择参数:
E:\roms>NBMerge.exe -kaiser os-new.nb
NBMerge 2.1rc2
Executing NBMerge.exe with data chunk size = 0x800 and extra chunk size = 0x8 on file os-new.nb
Partition 0: start sector: 0x00000002, total: 0x0000003e
first used: 0x00000002, used: 0x00000001
Partition 1: start sector: 0x00000040, total: 0x000006c0
first used: 0x00000040, used: 0x0000069d
Partition 2: start sector: 0x00000700, total: 0x00008000
first used: 0x00000700, used: 0x00007ff2
Checking os-new.nb for bad NAND block marker
Checked 0x8700 sectors successfully!
Done.
“os-new.nb”是根据“os-new.nb.payload”来输入的,就是说,如果该payload文件名为“12345.nb.payload”,那么命令就应修改为:
E:\roms>NBMerge.exe -kaiser 12345.nb
这时就得到了os-new.nb文件。
ImgfsTools工具集内同样提供了NB Pack的批处理命令文件:
E:\roms>NBBuildKaiser.bat os.nb
这样就可以一次性完成上述步骤。
到这里已经基本完成了,就差将NB文件打包为NBH了。
NB to NBH
这个步骤还需要使用NBHUtil软件。首先需要确定手机的Device ID,最简单的方法,就是用NBHUtil加载一个可以正常刷机的既有ROM,比如说我们这里用来做示例的原RUU_signed.nbh文件。

编辑NBHUtil软件的“NBHUtil.xml”文件,在“</NBHUtil>”一行前插入:
<device name="Rhodium_W" chunksize="64">
<ModelID>RHOD***</ModelID>
<CID>11111111</CID>
<Ver>3.0.00.00</Ver>
<Lang>0804</Lang>
<Item value="0x200">SPL</Item>
<Item value="0x301">Radio</Item>
<Item value="0x400">OS</Item>
<Item value="0x500">Diag</Item>
<Item value="0x600">Splash</Item>
</device>
其中的字段就是根据上图红框中的内容修改的。
然后运行NBHUtil,在“Build NBH”标签下,“Target Device”一栏选择“Rhodium_W”,右侧“OS”栏加载最后生成的os-new.os,点击“Build NBH!”开始生成最终的NBH文件。
顺便说一句:当时我在定制ROM时,在这里绕了很大的弯路。因为NBHUtil内置的Device型号不包含Touch Pro2,而网上基本上所有的相关教程(尤其是中文贴,大部分都是人云亦云,胡乱转载)都说使用“Hemes”即可,但是我试遍了所有内置的型号,在刷机时都会出现“Error [244] : Invalid model id”的错误(用TF卡刷机的错误代码是“00058002”),搞得我这个新接触Windows Mobile的大菜鸟十分郁闷。
最终得到的NBH文件,可以使用两种方法刷机,一种方法是用ROM Update Utility,这个软件一般各大论坛小组出品的ROM里都会包含,随便找一个来用就可以;另一种方法是使用TF卡刷机,具体来说就是将TF卡格式化为 FAT32,将NBH文件放入TF卡根目录下并更名为特定名称,Touch Pro2为“RHODIMG.nbh”,其他机型随便搜索一下就知道了。然后将手机关机并插入卡,再同时按住“音量减”键及电源键,直至出现三色屏和相关刷机提示。
其它软件
这篇文章里主要是讲述如何用ImgfsTools工具集操作,其实还有其它更为强大的软件,例如osnbtool。最初我使用ImgfsTools的低版本一直无法解包某NBH文件(不过2.1rc2已经没问题了),就是靠osnbtool来完成的。具体步骤其实大致相同,这里就不赘述了,可以参考该软件作者所撰写的教程。
另外,xidump这个软件是ImgfsToDump的最新版本,已经可以直接将NBH文件dump出来,也非常方便。
You can follow any responses to this entry through the RSS 2.0 feed. Responses are currently closed, but you can trackback from your own site.