重构os.nb.payload教程(扩建/缩小XIP区域、缩小/删除UDLR、前移IMGFS等)
第一章:这篇教程的用途
这篇教程的用途,如标题所言,介绍扩建/缩小XIP区域、缩小/删除UDLR、前移IMGFS等知识,然后因自己的需要 修改os.nb.payload区域,以实现一些目的。如我的touch pro的ROM是512M的,不必怕没空间用,因此可以考虑将XIP扩建,放多点东西(如使用繁体版ROM的wince.nls,1M多大,包含很完整的 区域)。再比如838、P800、D9000等机型,ROM容量比较小,这样就可以考虑删除UDLR区,缩小XIP区域,前移IMGFS地址,以达到增大 机身空间的目的(雪山兄弟成功在P800上腾出3M的空间)。再比如一些ROM的XIP区域太小,移植XIP后放不下,这时也可以考虑扩建XIP区域。
第二章:认识os.nb.payload的结构
一、os.nb.payload的结构
要想修改os.nb.payload里各部分的内容,必须先了解一下os.nb.payload结构。一般ROM是分为四部分的,即ULDR、XIP、IMGFS和FAT(这部分有些机型没有)
1、ULDR即Update Loader,这部分具体有什么作用我也不是很清楚,希望有高人解疑,如果你的ROM没有FAT部分的话,那ULDR部分可以完全删除。
2、XIP,摘自52dopod.net的教程:XIP(eXecute In Place)中文意:立即执行。XIP所起到的作用是让操作系统内核直接在Flash中运行,不需要拷贝到RAM,即指操作系统或应用程序直接从非易失性 存储器中执行,这样减少了内核从闪速存储器拷贝到RAM的时间,其采用的非压缩映像也减少了内核自解压的时间,换句话说,XIP直接决定了PPC系统运行 和加载程序的时间,也就是直接决定了PPC系统的运行速度。
3、IMGFS,摘自52dopod.net的教程:IMGFS就像一个压缩的GHOST文件,包括了WM的所有系统文件。CE核心启动后就可以访问 IMGFS文件系统上的OS需要的所有文件了,IMGFS是XPR或LZX压缩格式,系统访问上面的文件会自动解压到RAM。因为普通PE文件调入RAM 执行要进行地址重定位,为了提高效率,IMGFS中的文件可以是重定位好的模块形式,这些程序运行就不用再重定位了,直接调入RAM中保留的 PagePool(缓冲池)执行。
4、FAT,这部分我也不清楚是什么,838、P800等机型的os.nb并没有这部分,也希望有高人解疑……
二、四部分在MBR(Master Boot Record)里的定义
os.nb.payload的0x0至0x1FF部分是MBR部分,定义了刚才4部分的起始位置、大小等内容,如果我们想修改那4部分的内容,必须在MBR区里相应修改才可以。我们用WINHEX这个16进制编辑器打开os.nb.payload吧。
如上图所示,1C2、1D2、1E2、1F2处的数值其实是关于这4部分的定义,至于这些数值分别代表什么,其实XIP里的boot.rgu已经定义了,boot.rgu里有这么一段注册表:
[HKEY_LOCAL_MACHINE/System/StorageManager/PartitionTable]
"20"="BOOT"
"23"="RAWFS"
"25"="IMGFS"
"04"="FATFS"
因此,1CX行是定义boot(即ULDR)的,1DX行是定义RAWFS(即XIP)的,1EX行是定义IMGFS的,1FX行是定义FAT的。
三、四部分在MBR的起始地址及大小
如上图所示,1X6至1X9是该部分在ROM的扇区起始地址,1XA至1XD是该部分在ROM的大小
即:
ULDR起始扇区是1C6 – 1C9,扇区大小是1CA – 1CD
XIP起始扇区是1D