原创 移植PPC的XIP探讨[转]

2008-4-18 09:01 2301 3 3 分类: 软件与OS
转贴:
提供网上搜到的xip移植方法共享(地址等不适用2046,但是方法应该是共通的)
移植PPC的XIP探讨
有了Kitchen和G'Reloc.exe之后移植WM的高版本的系统已经是简单的事了,但Kitchen没有办法对XIP部份的系统内核进行操作,因此对这一部份的移植得另外用其他办法:
一、准备工具:XIPPort.exe、G’reloc.exe、Winhex.exe、RomMaster.exee等工具,工具的用法在这篇文章中会涉及到一些,但如大部份的工具你都不会用,那这篇文章不适合你,你应该在其他的帖子或是其他的论坛上去潜水进修一下。
二、ROM操作、提XIP、查找XIP在ROM中的地址ROM制作,不管原来的ROM文件是NBF或是HNB文件文件,都要先解出不带加密或是标志插值的干净的WM系统ROM,假设文件名为nk.nb
用RomMaster.exe从ROM中提取出XIP.bin:
    RomMaster.exe -x -w 5 nk.nb -o xip.bin
查找XIP在ROM中的地址,备用
方法:
第一个first xip部分,从FE 03 00 EA 00 00 00 00 00 00 00 00 00 00 00 00
可能在第二个或是第三FE 03 00 EA 00 00 00 00 00 00 00 00 00 00 00 00,到F8 AC 2C 9D .......... ,这一部分应该就是移植内核XIP需要改动的部分最好对比一下提出来的XIP.bin的内容,第4部分:imgfs部分,通常做ROM时修改dump文件夹就是对这里,呵呵!这个也可以作为查找XIP的一个参考,记下XIP区域的FE 03 00 EA 00 00 00 00 00 00 00 00 00 00 00 00所在的地址。
三、借想要的XIP:
准备好想借XIP的xip.bin文件和你自己要升级的xip.bin文件,放在两个不同的目录,分别将XIPPort.exe放到他们在的目录,并运行
1 、用XIPPort的dump xip.bin解开两个xip.bin文件,会多出来out目录
2 、分别执行write maps,可以在out目录得到MAP.physical.txt和MAP.txt,复制到别的地方备用
3 、分别执行make pkgs,out目录被重新非配,将要借的XIP下的\OUT\MODULES\MSXIPKernel目录下的文件复制到自己的XIP的\OUT\MODULES\MSXIPKernel目录,替换相同的文件。(此处注意,仅仅替换module形式的exe和dll,还有同名的txt文件,nk.exe, cecompr, ceddk, fsdspy等文件不要替换,如果有的话,OEMXIPKernel的目录更不能替换!!!!。)
4 、在自己的XIP的目录下操作:执行Undo操作,
四、重新分配地址,在自己的XIP目录下操作
1、执行Relocate P'操作(如果能执行不出错是你福气!祝贺你!!! 。
2、 执行write maps,得到新的MAP.physical.txt和MAP.txtROM制作,t智能手机改进,Diypda,PPC乐园.
3、然后你需要修正 nk.exe 模组中的 S000 文件,在那里放上你的新 ROMHDR offset。
首先查找旧的 ROMHDR offset,在你自己的旧的 MAP.txt 文件有类似的一行:
8019bb68 - 8019bbbc L00000054 rom_00 header: dlls="01fa01fe-02000000" phys="80000000-80276358", 25 modules, 8 files, 3 copyentries ext="8000291c"  ram=80277000-83a00000 cputype="000001c2",告诉你这个XIP中含有25 个modules, 8个 files, 3 个copyentries ,你见到 - 8019bb68- 它是你的旧offset - 在 nk.exe 的 S000 部份查找这 hex 数值,在 hex 中这一个数值 68 BB 19 80, 修正它为你的新 romhdr offset,新的romhdr offset你可以在上面2中产生的 MAP.txt 文件中找到,如果相同就不用找了
五、生成新的xip.bin文件
1、 打开新产生的的MAP.txt文件,如果没有哪一行出现“!!!!!!!!!!!!!!!!!”那么证明地址没有冲突基本成功了!那你的运气真是太好了
2、执行build xip_out.bin,会在你的目录来新产生一个xip_out.bin的文件
3、将nk.nb文件也复制到你的XIP的目录下,在XIPPort的界面中的下面两个输入框中的第一个填入第二中找到的地址,如00320000,在第二框中填入nk.nb
4、执行build xip_out.bin to:将会把xip_out.bin加入到nk.nbROM文件中的00320000的地址中,至此你的nk.nb文件的XIP已经和那个借来的XIP的版本一样了。
六、问题解决:
在第五的中1,发现在“!!!!!!!!!!!!!!!!!”
       1、在MAP.TXT中发现有类似的这些内容(篇幅问题,裁减了些实际内容):
00000000 - 01fa01fe L01fa01fe NULDIYPDA.COM7
01fa01fe - 01fa01fe L00000000 Start: first DLL address
01fa01fe - 01fea000 L00049e02 NUL
01fea000 - 01feb000 L00001000 initialized data of region_1 relfsd.dll
01feb000 - 01fec000 L00001000 initialized data of region_1 FLASHDRV.DLL
01fec000 - 01fed000 L00001000 initialized data of region_3 FLASHDRV.DLL
01fff000 - 02000000 L00001000 initialized data of region_1 busenum.dll
02000000 - 02000000 L00000000 End: last DLL

02000000 - 03e42000 L01e42000 NUL
03e49000 L00007000 Virtual base address of relfsd.dll
03e49000 - 03e54000 L0000b000 Virtual base address of FLASHDRV.
03ffa000 - 04000000 L00006000 Virtual base address of busenum.dll
04000000 - 80000000 L7c000000 NULwww.diypda.com* s
如果在其中的某些行有“!!!!!!!!!!!!!!!!!”则要参考自己的旧的MAP.TXT文件,用mreloc.exe对相应的模块的地址按自己旧的MAP.TXT文件的地址进行修改
2、如果是在类似这样的地址80000000 - 80000000 L00000000 Start: first physical address的这一行到80276358 - 80276358 L00000000 End: highest physical address之间的地址出现“!!!!!!!!!!!!!!!!!”
说明新装进来的文件在调入RAM时他们的地址和其他的东西有冲突了,你必须要调他们的地址,地址重复的地址长度在这一行的LXXXXXXXX中,,查看前后行的LXXXXXXXX值,看看他们的地址长度是多少,再查找有NUL的行,它的LXXXXXXXX代表那里有相应的空的地址,如果空出的长度能装下出现“!!!!!!!!!!!!!!!!!”的上行或下行的地址长度+“!!!!!!!!!!!!!!!!!”行的地址长度,你要做的是将那一行的数据移到空的地方!!
移动完一个数据段的数据,再做一下write maps,再重新查看MAP.TXT文件,如此重复,直到不再有“!!!!!!!!!!!!!!!!!”出现为止!
这样再做上面的第五步就可以了

3、数据段的移动方法:查看当前要移动的那一行的第一个数据,它是个地址值,如:80243fd8 - ,在OUT\MODULES对应的文件目录中imageinfo.txt中查找它,它可能是P+某个值或是D+某个值,P或D的值可以在OUT里面的ROMHDR.txt中看到,修改imageinfo.txt的这个数据使其+P或+D的值等于你移动数据的目标NUL那一行的地址值,因为imageinfo.bin和imageinfo.TXT的值是一一对应的,用WINHEX修改对应的数据,保存! 呵呵!这个是个细心量大的手工活,没有耐心的就不要做了

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /2 下一条