Deprecated: Creation of dynamic property Kirki\Field\Repeater::$compiler is deprecated in /home1/diywmcom/public_html/baifaqimei/wp-content/themes/blogstream/functions/kirki/kirki-packages/compatibility/src/Field.php on line 305
【转】I780 XIP 移植 – 白发齐眉

【转】I780 XIP 移植

Jerry在Spaces上写的I780的XIP移植教程,很不错,转过来先。


 

刚好今天看到XBeta上面有人发了一个新的ROM,版本号是21032,不知道是真是假,暂且信他一回,就用这个开刀了,失败了再改现有版本做实验。
image
我们先移植XIP,再移植SYS。好了,开始动手吧。
XIP移植
先拷贝下载过来的XIP文件到xip_tools目录下面并重命名为xip.bin
image 
运行XIPPort.exe
image
先点击dump xip.bin,这时会在当前目录下面和成一个OUT目录,暂时不管它,紧接着点write maps。
这时我们打开OUT目录看一下。
image
里面有两个目录及四个文本文件:
FILES

MODULES

MAP.physical.txt

MAP.txt

PARTHDR.txt

ROMHDR.txt
我们MAP.txt跟ROMHDR.txt是我们主要要改的两个文件,当要也要对应的改MODULES里面一些文件。这时候顺便提一下,一般i780的ROM可能都是用EFN的Kitchen来做的。在做ROM时,Kitchen里面有几个文件夹:
ROM

SYS

OEM
在ROM里面还有一个文件夹XIP,里面放的就是FILES里面的文件。
好了,我们接着进行,刚刚的XIPPort.exe没有关掉吧?关掉了也没关系,重新打开,点击make pkgs,这样,FILES跟MODULE里面的文件会分门别类的放在一起。
image
看起来舒服一点了吧?不会那么乱了。接下来先把XIPPort.exe关掉吧。
把OUT目录改一个名字放着备用吧,我们就命名为OUT_21032好了。把xip.bin也改一个名字,改成xip_21032.bin这样,一看就知道,哪个OUT目录是由哪个bin生成的。
image
接下来我们要找一个要移植目标ROM,我们用i780最新的PDXHL2吧。前段时是做了个HL2的中文ROM,可惜死机现象有点严重,就用这个做为目标好了,移植了看一下会不会好点。拷贝ROM的bin文件到XIPPortting文件夹并改名为i780.bin。
image
运行dump_xip.bat,要等大概一半钟。我们可以看到在当前目录下生成了xip.bin文件。跟之前一样,我们把xip.bin拷贝到xip_tools文件夹里面,然后,dump xip.bin,write maps,make pkgs,这个OUT目录就是我们的目标了。这个OUT目录我们先复制一份,重命名成OUT_20270,把xip.bin改成xip_20270.bin。看一下现在的结构。
image
接下来,就要正式开始移植了。
我们把OUT目录下的FILES,MODULES里面的MSXIPKernel和MSXIPKernelLTK删掉,再将之前dump出来的OUT_21032目录下同名文件夹拷贝过来,注意千万别弄错文件夹了~~。来看一下结构。
image
好了,在XIPPort.exe上面点击undo按钮,这个按钮是make pkgs的逆操作,就是将FILES跟MODULES恢复成平板结构。我们接着点击realloc P,看一下有没有问题。唉,咋回事,居然不报错,打开MAP.txt看一下,也没有问题,一般点击都会报错的。记得刚学开始接触XIP移植时看到有人说过,如果移植XIP一次性成功那就可以去买彩票了,不过,现在太晚了,不知道哪还有彩票好买。再换个XIP来讲好了,不报错没什么意思。我把移植后的XIP插入刚刚的ROM里刷机看了一下,看来很成功嘛。
Screen001
明天找有冲突的XIP移植来说明好了。
……过了两天……
那个21032的SYS有问题,算了,不移植了。找别的ROM来移植好了。这几天Windows Mobile 6.5 21176闹得很凶,各大论坛都出了各种各样的版本,谁也说不准哪个是所谓的正式版了,我们这些小网民只能等着他们捂够了再搭最后一般车了,唉,废话太多了。言归正传,现在没有看到有原生的QVGA资源,但XIP是没差别的了,我们就先移植XIP了,如果可以成功,再用21169的资源来做SYS好了。
跟之前一样,我们把相应的XIP都dump出来,并替换,这个XIP是从XBeta上面下载过来的。先看看结构吧,OUT跟OUT_20270是一样的,因为我们要把21176移植过来,OUT_20270是备份着用来对比的。
image
好,我们打开XIPPort.exe,然后,点击undo按钮,记得这之前可要把21176的替换进去。点完了之后,进去看看里面是不是恢复成平板结构了,确认后,点击realloc P按钮。又没有报错,不过,先别急,我们打开OUT下面的MAP.txt看一下。搜一下!!!!,我们发现这回出现冲突了,那我们开始动手吧,这儿注意几个原则就可以了 (结合网上与自己总结的,不一定全对)。
1. MAP.txt文件是一个输出文件,是让我们用一确认XIP是否正确的。所以,如果用这个MAP.txt来改地址,千万别随便点realloc P按钮,搞完一部分再点。

2. MAP.txt里面分成了好几段,我们一般解决冲突只需要解决第二段(第一段只有一行),第三段及最后一段就可以了。倒数第二段有时候也需要调整一下,不过,那个是改的ROMHDR.txt文件。

3. 在第二段和第三段那儿busenum.dll这个文件的地址千万不要动,我们解决冲突也是至下而上的。

4. 还是在第二段和第三段那儿,如果有一两行是NUL的话,是没有问题的,不要有!!!!就可以了。但如果你追求完美的话,把NUL去掉也可以,当然,NUL上面所有的模块都要移动位置。
我们来看一下移植21176之后的MAP.txt文件,每个需要注意的地方我都打了标号,用红框或红线划出来的是我们要改动的地址。第二段没有划出来是因为没有!!!!,而且,为了节约时间,NUL也不打算去了,偷个懒。
map
我们来看第三段,也就是标志为①那一段。这儿的每一行格式是:
[起始地址] – [结束地址] [长度] [其他信息]
我们要保证的是上一个文件的[结束地址]就是下一个文件的[起始地址]。这样我们从busenum.dll上面的certmod.dll文件开始,把中间那行NUL删掉,把busenum.dll的[起始地址]03ffa000拷贝到certmod.dll的[结束地址]位置,然后将这个值减去certmod.dll的[长度]就是certmod.dll的[起始地址]了。来看一下改完后的样子:
image
我们把NUL跟!!!!都删了。记住,这时候千万别去点XIPPort.exe上面的realloc P呀。不然就白改了。我们打开当前目录下面的mreloc.exe,然后点击Choose module,选择刚刚改动过地址的文件(其实是文件夹啦)。
image
然后,我们把上面那个文本框的地址改成是我们刚算出来的[起始地址],如果你是直接粘贴进去的,下面的Doit!按钮是不会变亮的,要去掉后面一个零再手动输入才会变亮,再点击。其他的改动过的也一一的做相应的改动。改完后先不着急,我们还要再改一处,就是刚刚每个文件对应的文件夹里面的imageinfo.txt,第五行:

e32_vbase:           V=03FEC000

这个地方我们也改成是算出来的[起始地址]。这里再说一下,一般的地址有几种形式,一个是V=01234567这样的,这个是绝对地址。另一种是P+01234567这种是偏移地址,是相对于P的偏移值,P是什么呢?我们打开ROMHDR.txt看一下就知道了,看下面的标为①上面的physfirst的地址P=80001000,这个就是P值啦。
romhdr
改完了之后呢,我们再打开XIPPort.exe,然后,点击realloc P按钮,再点击write maps按钮,我们再打开MAP.txt看一下,如果没有!!!!的话,就说明改好了。
这样其实我们已经完成了移植了,但是,我们在大多数移植的时候会出现空间不足的问题,这儿说的空间不足指的是ROMHDR.txt中的physlast值,我们需要把这个值扩大一点,一般对于i780来说,我们先改成80400000再说。下面的②③地址也增大要相应的值。点击realloc P,如果没有报错就点击write maps,再打开MAP.txt来看一下,我们会发现,MAP.txt当中④⑤⑥的值刚好对应ROMHDR.txt当中的①②③的值。一般情况上,如果我们改动过physlast值,上面⑤⑥中间的dll都会被挤走了。
当然,上面说的是没有空间的情况,我们看到MAP.txt中④的上面有一段NUL,这一段是可以节约下来的,我们就拿缩小空间来当例子好了。
如果要去掉NUL的话,那physlast值就应该是803854fe,我们把ROMHDR.txt当中的physlast改成803854fe。点击realloc P,再点击write maps,看MAP.txt上在是不是没有NUL那一段了。
改了physlast后,ulRAMStart的值也必须相应的改,当然,这回不是单纯的加减physlast的相应的值,ulRAMStart的值等于physlast的千位加一,后面清零。physlast=803854FE,那ulRAMStart=80386000。改完了ulRAMStart之后,nk.exe的地址也要做改动。nk.exe的起始地址等于ulRAMStart的万位加一后面清零。在我们这个例子中,nk.exe的值刚好不用改。那如果需要改时该如何改呢?
改nk.exe的值,我们需要一个专用的工具,那就是mreloc_nk.exe,我们打开这个工具,跟之前一样,选择nk.exe模块。
image
这回我们要改的是下面那个文本框的值。改好后,我们仍然需要去改nk.exe文件夹下面的imageinfo.txt