Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-plugin-bluehost domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home1/diywmcom/public_html/baifaqimei/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-pagenavi domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home1/diywmcom/public_html/baifaqimei/wp-includes/functions.php on line 6114

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