ROM移植 · 2009/08/08 17

【转】I780 ROM制作-基于模板制作

还是转的Jerry的教程。

工具点我下载!

注意:

  1. 运行”1_解包.bat”会删除当前目录下的dump, temp, SYS, ROM几个文件夹, 还有i780.header, i780.nb0两个文件, 请自行备份, 我在脚本开始时写了, 但是大家可能会没注意到.
  2. 运行”2_打包.bat’后生成的bin文件不再包含dsm文件, 将不能再做为蓝本文件, 如果大家需要把dsm加进去, 请打开”2_打包.bat”文件, 将里面的all_packages_to_one.exe那一行删除就可以了.
  3. 运行imgfstool可能会报错, 那可能是因为没有装VC++的运行库造成的. 找一个装上就可以了. 应该不大的.

i780ROM制作-基于模板定制

开始讲定制以前,我们先来讲一下i780的ROM结构。i780的ROM是一个BIN文件,这个BIN文件包含了四个部分,这个可以通过osnbtool来看,不过osnbtool的使用我们后面再讲,先看一下这四个部分:
image
第一部分:这个是BOOT部分,我们不需要管它,定制时也不需要理这部分。
第二部分:xip部分,定制时,如果我们只是想添加一些软件或汉化或做一些个性化的定制,而不移植新的核心,这部分也不用管的。
第三部分:imgfs部分,这部分是系统的主要部分,我们要定制的主要就是这部分。
完整的Windows Mobile系统包含了xip跟imgfs两部分,之所以这两部分是分开来的,是因为xip是会被直接加载到内存中的,所以,一般来说,xip越小,启动后的可用内存就越多,当然,对于i780,这一两M内存其实也不是那么重要,因为xip本来就只有3M左右,再精简也只能精简到2.5左右。
第四部分:legit DOS,这是个很奇怪的东西,按照我的经验,这个东西是没有用的,因为,在现在的i780ROM里,这个东西都是不完整的。但是又不能删除,我试过删除这部分时,会定在第一屏。这个东西在ROM里占的空间大概是6M左右,但经过osnbtool分解后,会涨到189M之巨(可以看一下上面这部分对应的最后一个数字,15900*800=AC80000就是这部分的大小)但也无所谓了,对我们影响不大,那只是中间文件而已了。
其实,还有一部分没有在上面列出来,就是bin文件的文件头部分,当然,这部分,我们也不用管,只在存在就可以了。
所以,我们要移植一个新的核心的话,只需要移植xip和imgfs两部分就可以了,但是在讲具体的移植步骤之前,我们要来讲一下xip和imgfs的结构。因为不同的机型驱动程序也会不同,比如,i780的鼠标模式并不是Windows Mobile原生支持的,需要用厂家写的驱动,这部分东西我们称为OEM,所以,xip和imgfs又都包含了各自的OEM部分,在移植时,我们要保留OEM部分而将OS部分替换掉。替换的过程就是叫移植了。
接下来,我们再讲一下另一个重要概念,就是文件模块。其实,不管是xip还是imgfs,都是许多文件组成的,这些文件按照一定的顺序放在xip或imgfs中,如果文件以模块形式存在,那可以加快这个文件运行时的载入速度。至于为什么会加快载入速度,说实话,我不清楚。下面我们来看一下文件模块的结构:
image
上面这个是shell32.exe的模块,我们发现,里面并没有shell32.exe文件,其实,shell32.exe已经被分解成S000, S001, S002这三个文件了。而imageinfo.txt里面就描述了,shell32.exe的文件大小,还有就是这三部分各自的大小及存放的位置。如果用工具来dump出imgfs的话,这个文件夹里就会有shell32.exe文件,但其实这个文件没有任何意义,即使你替换了,也没有用,因为在定制过程中,这个文件是会被删除掉的,所以,如果要移植一个以文件模块形式存在的文件,要拷贝一整个文件夹。
好了,了解了几个重要的概念以后,我们就可以开始定制我们自己的ROM了。我将以我刚做的一个比较精简的Kitchen来讲移植和定制的过程。
首先,我们要找到一个基础的ROM,我们将会以这个ROM为蓝本来做,这个ROM必须满足几个要求:
  1. 较高的原生性

    原生性的意思是说,最好是官方发布的ROM,最好不要经过多次定制,因为经过定制的东西可能会因为定制人的一些习惯去掉或加入一些东西,导致你的ROM也会继承一些缺点,那如果有一个ROM有很多优点呢?呵,这个需要我们上另外一招,那就是对比。所以,不要因为一个ROM好,就轻易用来做蓝本。
  2. 完整的DSM列表

    DMS是用来干什么的?我们前面讲到,xip和imgfs会分成OS和OEM部分,那这么多的文件,如何知道哪些是属于OS,那些是属于OEM呢,再进一步,一个OS也有多很文件,又包含了核心部分,WMP播放器部分等。所以,DSM就是用来记录这些信息的。通过DSM,我们才可以将xip和imgfs里面的文件有条理的组织起来,这样,如果我们要换一个新版的WMP,就可以直接替换一个WMP的文件夹来实现了。
  3. 其他的?记起来再补充
找好ROM,我们就可以开始了,我一般用的母版是官方的PDXHL2,我就加入了一些中文资源。现在有PDXIB1,不过,我们还是用HL2来讲好了。
看一下Kitchen的结构:
image
简单解释一下:
  1. i780.bin是我们找到的蓝本ROM
  2. SYS和OEM是从i780.bin里面生成出来的,也就是我们前面讲的OS部分和OEM部分。
  3. ROM文件夹比较特殊性,里面放的是XIP里面的几个注册表,如果你第一次做ROM,需要将XIP分解来得到这几个文件,以后除非是大版本改变,比如,WM6.1换成WM6.5,这里面的文件一般都不用换。Kitchen里面我附带了这几个文件,要换的,大家分解xip,再将对应的文件替换掉就可以了。
  4. i780.header和i780.nb0也是分解i780.bin时生成的。这两个文件是必须在的。结合我们开头说的bin文件的结构,i780.header就是bin的文件头,i780.nb0呢,就是一个框架,里面有BOOT部分xip部分及legit DOS部分,而imgfs部分是空着的,因为,我们要用SYS+ROM+OEM这几个文件夹来生成imgfs。并将生成的imgfs插入到i780.nb0当中生成新的bin,就是我们定制后的ROM啦。
  5. 另外的就是定制要用的工具和脚本了。
具体的每个脚本都做了些什么事情,等有时间再讲好了,重点是移植和定制嘛。第一次定制,我们运行”1_解包.bat”,整个过程可能会要三到五分钟。每个步骤都会有提示信息,第一运行,请仔细阅读提示,后面熟悉了就不用管了。
运行完成后,应该就跟上面的图应该一样了。终于可以开始定制了。
首先要移植XIP,我们将i780.bin直接拖到”4_提取XIP.bat”上面。等一会儿,会在当前目录下面生成i780.bin.xip.bin。这个就是xip文件了。我们要将它拷贝到XIPKitchen里面进行移植,具体的移植过程,请看我的另一遍关于i780 XIP移植的帖子。移植完xip后,会生成xip_out.bin文件,我们将这个文件拷贝到Kitchen文件夹下面,拖到”5_插入XIP.bat”上面,就可以将这个xip插入到i780.nb0里面了。至此为止,我们完成了模板的制作。一般来说,以后就不再需要运行”1_解包.bat”而直接可以在这个基础上定制了,即使是换新的核心也一样,只要将移植好的xip插入就可以了。其实,解包的目的是生成i780.header和i780.nb0这两个框架,另外,就是生成imgfs的OEM部分。而生成的SYS部分,虽然移植时都会被替换掉,但其实,用来对比是很好的,比如,一般的QVGA的SYS资源移植到i780后,会出现弹出对话框不居中的问题,通过对比这个蓝本SYS和要移植的SYS的注册表,我们就可以发现这个问题。
这里还有个东西要注意一下,虽然我们说imgfs分成SYS和OEM两个部分,SYS里面放着OS部分,OEM里面放着厂商的驱动及第三方软件,但其实,我们dump出imgfs后,很多OEM的东西都会直接被放在SYS目录里面,而不是OEM里面。其他的Windows Mobile手机的Kitchen里面,都把厂商驱动及厂商应用程序都放在SYS,所以,移植别的机器的SYS的时候,特别要小心,别把不该要的东西也移植过来了。对于i780,因为dsm的关系,dump出imgfs后,厂商部分会在OEM中,如果用的不是官方版本来做蓝本,那可能会有一些集成的软件会在SYS里面,这里要筛选一下,把它移到OEM里面。我们要尽量保证SYS部分是干净的,因为只有这样,在移植其他机型核心才会更容易,对比起来会非常简单。
我们开始移植一个新的核心好了,找到一个新的核心,应该是一个SYS文件夹,把Kitchen里面的SYS重命名名SYS.orginal,什么名字不重要,关键是要留着做对比,把新核心的SYS文件夹整个拷贝到Kitchen里面。然后,打开BeyondCompare,选中SYS和SYS.orginal一起拖到BeyondCompare界面上面。我们要做的事情有:
  1. 从SYS.orginal里面拷贝.VM, .ROM两个文件夹到SYS里面
  2. 从SYS.orginal/Metadata里面拷贝packages.sof, packages.sif到SYS对应的目录里面。
  3. 对比所有的.rgu,.provxml文件,将有必要保留的项目从SYS.orginal拷贝到SYS里面。
  4. 如果是从6.1移植到6.5,那你可能需要重新做几个.cpr文件,因为现在的6.5的ROM里面,320×320的cpr不全,即使有,布局也不好看,自己改改吧。
  5. 关于cpr我再说一下,这点我后面就不再说了,大家在对比时,凡时发现了xxx_240x320.xxx这样的文件,如果没有对应的xxx_320x320.xxx,那就自己做一个,当然也不复杂,拷贝240×320的,然后,进到里面把Width=240的都改成320,呵,当然,如果你对审美有一定要求,肯定要进一步改的。
对于目录的拷贝,我建议的做法是,删除目标目录,再进行拷贝,不然,目标目录里面可能会有多余的文件留下。
我们要重点处理的文件夹有:
  • Base_DPI_96

    这个文件夹里面的注册表直接用原来的注册表替换掉,不然,弹出对话框不居中。
  • Base_DPI_96_resh_240_resv_320

    这个文件夹里面大多是些图片,还有一个.provxml,那几个没用的示例图片可以删掉。而像带stwater.png/.jpg这样的文件是壁纸,但一般来讲都是QVGA用的,我们没用,删掉,放一个自己做的320×320的进去。打开.provxml,到最下面,你会发现,里面有引用到刚删掉的两个壁纸,改成我们自己换的壁纸的名字。
  • Base_Lang_0804

    这个文件夹里头要注意一个,如果你用的是小桥的SYS,那你可以不做改动,但如果是来自其他人的SYS,那你可能需要非常小心,里面可能集成了一些输入法及一个触屏的驱动,当然,这个驱动在i780上是不工作的,要移掉。
  • Base_Lang_0804_DPI_96

    上一个文件夹中如果有集成的输入法,那这个里面就应该会有mboxchs.96.dll和sskim.96.dll,前面的删掉了,这两个也要删掉。
  • Base_Lang_0804_DPI_96_RESH_240_RESV_320

    这里面有默认的主题文件,如果是6.5,一般是ClassicBlue.tsk,这个要改一下的,之前有人碰到过换主题背景变成黑的就是因为没有改这个文件,用WinCabManager打开来,把里面的壁纸删掉,再把我们自己的320×320的放进去,名字必须是stwater.png/.jpg,理论上应该是stwater_320x320.png/.jpg的,不知道为什么,我这么干就是不行。
  • MediaOS_dpi_96_resh_240_resv_320

    这个是WMP的皮肤文件夹,小桥的模板里一般是没有这个文件夹的,你要自己添加去,即使有,一般来讲也是240×320的皮肤,要自己改一下。.skn文件用记事本也可以打开来编辑的。
后面的文件夹,大多是对比.rgu文件就可以了。对比一下,如果有条目不一样,想一想这条是用来控制什么的,然后决定用老的还是新的。不行的话,就把那条注册表拷出来到网上搜一下。