分类: ‘XIP移植教程’
随意调节其rom大小,技嘉T600的big storage工具。
转自数码部落:http://www.pdaclan.com/viewthread.php?tid=13520&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D14
由:ronggenqi
感谢!
技嘉T600的big storage工具。随意调节其rom大小
无意中刷了技嘉T600的75M版的小rom,再也刷不回原来港版的87M大 rom了。经过分析,终于找到改变Rom大小的方法。现在我用这个工具做了个119M大的nb0文件。
终于可以随意调节big storage 、NB0文件的大小,再也不用为集成那个软件、在取舍中烦恼。现在就担心集成的软件不够多。
目前技嘉T600、i350、M998已测试可用,i128不能用。请他请机友自行测试
###原创工具,转载请注明出处!!!!!

工具下载见:http://www.t2home.cn/article.asp?id=324
如何移植G900的XIP
转自pdaclan.com 原文作者Tsinghe
这个应该是大家最头疼的,很多人都不敢说自己真的会,我更加是这样。之所以还是要斗胆写一下,一方面应召Star老大的说法,全面一点,一方面也是感谢曾将帮过我的N多技术狂人,star,小桥老师、秋天、T2、freepk,我献一下丑,希望能把他们的“玉"引出来,哈哈。
首先需要将xip dump出来。g900的xip是这样提取的,现解压xip工具包,然后将nk.nba复制到该目录并改名为part2.nb0.payload,然后点击fenjie.cmd就可了,你会看到生成了两个文件,一个是part2.nb0.payload.part1,另一个是part2.nb0.payload.part1.xip,后者才是我们要的真正的xip,前者是什么么?是经过压缩的xip,真正存在flash.dio中的xip。
将part2.nb0.payload.part1.xip重命名为xip.bin,运行xipport,依次点击dump xip–〉build maps–〉make package,你会发现多了一个out的目录,打开看看里面有files、modules文件夹还有map.txt、MAP.physical.txt等文件。将map.txt、romhdr.txt备份一下,以备以后需要。
移植的本质就是替换文件。替换什么文件呢?你需要一个要移植的目标新版本,同样的方法解开它,建议使用Beyond Compare来对这两个揭开的目录进行对比,这个工具可以对文件夹和文件进行比较、移动,非常好用。将所有非oem开头的文件夹替换成目标新版本的,就完成了替换操作了。
接下来是移植的重点和难点了。点击undo,将files和modules下的子目录去掉,然后点击reloc和build map。如果你运气不错的话,这两步应该没出什么错,那就用Beyond Compare同时打开新的map .txt和旧的map.txt来看看。先看看新的maps中有没有!!!!!!!!! 如果没有,恭喜你,你简直你买中彩票还幸运,呵呵。接下来搜索rom_00,看看新旧起始地址是否一致,如果是一致的,那你真的太走运了。直接build xip_out.bin吧。
问题处理:
A: 点击reloc提示"Not enough space",xip预留空间不够了。你需要修改romhdr.txt, 我一般的处理方法是,但修改phyfirst,适当提前一点,比如原来是80300000改成8020000,然后reloc看看如果还出错,那还得再改前一点。但是修改phyfirst是不能解决问题的,只是为了方便我们察看问题而已,buildmaps后看看End: highest physical address这里还有多少剩的,0×100000-剩的=你需要加大的xip空间。
怎么加大呢?请先将phyfirst还原,然后同时修改physlast、ulRAMStart、ulRAMFree以保证他们同步后移,当然这个时候ram中的程序都必须后移了。
B:点击buildmaps时提示“same entery already exist”,主要是第一段的地址冲突了。用Beyond Compare打开就的map.txt和目标新版本的map.txt,看看oem中的模块地址被谁占用了,赶走它,hoho,整个世界清静嗮……
build xip_out.bin之后,对于生成的xip_out.bin还需要再进行srpx压缩,点击hebing.cmd就可以了。
相关工具参看http://www.t2home.cn/article.asp?ID=145
XIP 移植完整教程(ATOM)篇/更新wm5—wm6.1
聚集好久的能量,今天终于爆发,在t2老大的指导下,终于完成了第1个成功的xip.发篇教学,当自己的学习体会和记录,也算感谢老大几个月的指导咯.转载请著名www.t2home.cn
第一步:
准备工具,提取XIP.BIN(假定你已经知道如何提取和写入XIP.BIN了)

XIPPort的版本比较混乱,建议用大小是72,704字节的版本。日期是

第二步:
解开ATOM 的XIP,WRITEMAP、BuildPkg(分类xip):

检查你的out目录,应该长这样:

其中,OEM开头的File和Modules目录是要保留的。
第三步:
同样解开一个更高版本的ROM的XIP,我用的XXX版Build19580的XIP。

其中,WinCENLS_WWE和LangDB我们都可以不管(对ATOM目前来说,没用到SYS部分已经包含了)
第四步:
文件替换
新建文件夹为atom 19580作为您的工作目录

1.将atom 19900的所有内容拷贝进去(Files和Modules),
2.将ATOM XIP的Files和Modules目录的MSXIPKernel和MSXIPKernelLTK都替换为XXX 19580新的版本。
第五步:
尝试Reloc Slot0和Slot1
5.1检查地址冲突

Undo的意思是将刚才打好包的MSXIPKernel、OEMXIPKernel之类的文件夹里的东西重新直接移回到Out里。
Realloc P是重新计算各模块的位置。
WriteMaps是将计算结果写入到MAP.TXT里。
小窍门:很多朋友在Realloc P 这里会报错
解决方法:打开 ROMHDR.txt 修改 physlast: 9AF08100 到9FF08100 也就是加大物理地址结束点,我们先加大再说,这样就不会报错了.

现在打开MAP.TXT,会发现很多!!!!!!!,这是冲突的地址。
先看头两行位于Slot0里的冲突地址:
01f901fd – 01f901fd L00000000 Start: first DLL address
01f901fd – 01fd3000 L00042e03 NUL
01fd3000 – 01fd4000 L00001000 initialized data of region_1 ceddk.dll
01fd4000 – 01fe3000 L0000f000 initialized data of region_1 TrueFFS.dll
01fe3000 – 01fe4000 L00001000 initialized data of region_2 cecompr.dll
01fe4000 – 01ff1000 L0000d000 initialized data of region_1 stratad_intel_l.dll
01fef000 – 01ff1000 L00002000 !!!!!!!!!!!!!!!!!!
01fef000 – 01ff0000 L00001000 initialized data of region_1 regenum.dll
01ff0000 – 01ff1000 L00001000 initialized data of region_1 pm.dll
01ff1000 – 01ff2000 L00001000 initialized data of region_1 mspart.dll
意思是:
01fe4000 – 01ff1000 L0000d000 initialized data of region_1 stratad_intel_l.dll
(region_1 stratad_intel_l.dll的o32[1].o32_realaddr从01fe4000开始,长度是d000)
01fef000 – 01ff1000 L00002000 !!!!!!!!!!!!!!!!!!
(这里两个DLL之间,重叠了2000长度的区域!)
01fef000 – 01ff0000 L00001000 initialized data of region_1 regenum.dll
(regenum.DLL的o32[1].o32_realaddr从01fef000开始,长度是1000)
5.2计算地址
因此,SLOT0里共缺了两处2000的长度。显然我们需要将regenum.dll和pm.dll的o32[1].o32_realaddr移动到合适的地方,我们可以看到,在 map的开始
01f901fd – 01f901fd L00000000 Start: first DLL address
01f901fd – 01fd3000 L00042e03 NUL
这里有42e03的空间,完全可以放下regenum.dll和pm.dll的长度
因此我们把regenum.dll和pm.dll移到最前面.跟我继续
5.3Reloc模块
1. 打开regenum.dll模块修改imageinfo.txt
修改为 
2. 打开pm.dll模块修改imageinfo.txt
修改为 
IMAGE.TXT改完以后,还需要用M’Reloc修改模块S00X:
regenum.dll
改为 
pm.dll
改为
5.4 检查
咱们再用XIPPORT,Reloc P,WriteMAP。现在MAP.TXT中SLOT0和SLOT1看上去相当的和谐。 没有!!!!了.
第六步:修改RAM部分地址:
80500000 – 80500000 L00000000 Start: start of RAM
80500000 – 80506000 L00006000 uninitialized data of region_2 nk.exe
80506000 – 80561000 L0005b000 initialized data of region_3 nk.exe
80561000 – 80566000 L00005000 NUL
80566000 – 80567000 L00001000 initialized data of region_1 giisr.dll
80567000 – 80567000 L00000000 —— start of RAM free space
80567000 – 84000000 L03a99000 NUL
84000000 – 84000000 L00000000 End: end of RAM
这里看起来没有!!!!!!实际上有2个dll被挤出RAM区域了.
hd.dll osaxst0.dll
我们要把他们叫回来哦
80561000 – 80566000 L00005000 NUL这里有5000的空间,看看19900的map
我们发现
80561000 – 80562000 L00001000 initialized data of region_1 hd.dll
80562000 – 80566000 L00004000 initialized data of region_1 osaxst0.dll
这2个的长度相加刚好5000,可以放进去哦.继续修改
hd.dll
改
osaxst0.dll
改 
现在WriteMAP
80500000 – 80500000 L00000000 Start: start of RAM
80500000 – 80506000 L00006000 uninitialized data of region_2 nk.exe
80506000 – 80561000 L0005b000 initialized data of region_3 nk.exe
80561000 – 80562000 L00001000 initialized data of region_1 hd.dll
80562000 – 80566000 L00004000 initialized data of region_1 osaxst0.dll
80566000 – 80567000 L00001000 initialized data of region_1 giisr.dll
80567000 – 80567000 L00000000 —— start of RAM free space
80567000 – 84000000 L03a99000 NUL
84000000 – 84000000 L00000000 End: end of RAM
嘿嘿,他们回来了.这里还要继续修改模块S000
用ue或winhex打开hd.dll模块的S000,我们在上面的修改中可以看到,原地址是80472000
在s000中这些数值是倒过来排列的如: 00204780


修改为80561000 既00105680

同理修改osaxst0.dll的s000
现在咱们再用XIPPORT,Reloc P,WriteMAP。
这2部分的修改就算结束了!!!!
继续检查map
9ac00000 – 9ac00000 L00000000 Start: first physical address
9ac00000 – 9ac01000 L00001000 RomLDR.PARTHDR
9ac01000 – 9ac80398 L0007f398 o32 region_0 rva=00001000 vsize=0007f398 real=9ac01000 psize=0007f398 f=60000020 for nk.exe
9ac50000 – 9ac80398 L00030398 !!!!!!!!!!!!!!!!!!
9ac50000 – 9ac5195d L0000195d o32 region_0 rva=00001000 vsize=0000195d real=9ac50000 psize=00001960 f=60000020 for hd.dll
9ac5195d – 9ac52000 L000006a3 NUL
9ac52000 – 9ac520a0 L000000a0 o32 region_2 rva=00003000 vsize=000000a0 real=9ac52000 psize=000000a0 f=40000040 for hd.dll
9ac520a0 – 9ac54000 L00001f60 NUL
9ac54000 – 9ac5d624 L00009624 o32 region_0 rva=00001000 vsize=00009624 real=9ac54000 psize=00009624 f=60000020 for osaxst0.dll
9ac5d624 – 9ac5e000 L000009dc NUL
9ac5e000 – 9ac5e2e0 L000002e0 o32 region_2 rva=0000b000 vsize=000002e0 real=9ac5e000 psize=000002e0 f=40000040 for osaxst0.dll
9ac5e2e0 – 9ac81000 L00022d20 NUL
9ac81000 – 9ac829d3 L000019d3 o32 region_1 rva=00081000 vsize=000019d3 real=9ac81000 psize=000019d4 f=60000020 for nk.exe
9ac829d3 – 9ac83000 L0000062d NUL
9ac83000 – 9ac85448 L00002448 o32 region_4 rva=00083000 vsize=00002448 real=9ac83000 psize=00002448 f=40000040 for nk.exe
9ac85448 – 9ac96000 L00010bb8 NUL
9ac96000 – 9ac9644e L0000044e o32 region_0 rva=00001000 vsize=0000044e real=9ac96000 psize=00000450 f=60000020 for giisr.dll
9ac9644e – 9ac97000 L00000bb2 NUL
9ac97000 – 9ac97040 L00000040 o32 region_2 rva=00002000 vsize=00000040 real=9ac97000 psize=00000040 f=40000040 for giisr.dll
9ac97040 – 9ac98000 L00000fc0 NUL
这里出现了错误.
这个就比较麻烦点,自己理解下把
L00030398 !!!!!!!!!!!!!!!!!!这里有30398的重叠,我们现在将hd.dll osaxst0.dll下移 跟我继续,拿出计算器(16位)
9ac85448 – 9ac96000 L00010bb8 NUL这里有10BB8的空间,计算hd.dll osaxst0.dll的空间
195D+A0+9624+2E0=B301<10bb8
因此我们可将4个地址移到下面的空位
9ac50000 – 9ac5195d L0000195d o32 region_0 rva=00001000 vsize=0000195d real=9ac50000 psize=00001960 f=60000020 for hd.dll
长度195d
9ac85448 – 9ac96000 L00010bb8 NUL我们移到这里 改
[color=Red] o32[0].o32_dataptr: P+00085448
o32[0].o32_realaddr: P+00085448[/color]
9ac52000 – 9ac520a0 L000000a0 o32 region_2 rva=00003000 vsize=000000a0 real=9ac52000 psize=000000a0 f=40000040 for hd.dll
长度a0
9AC85448+195D=9AC86DA5
改
[color=Red]o32[2].o32_dataptr: P+00086DA5
o32[2].o32_realaddr: P+00086DA5[/color]
9ac54000 – 9ac5d624 L00009624 o32 region_0 rva=00001000 vsize=00009624 real=9ac54000 psize=00009624 f=60000020 for osaxst0.dll
长度9624
9AC86DA5+A0=9ac86e45
改
[color=Red]o32[0].o32_dataptr: P+00086E45
o32[0].o32_realaddr: P+00086E45[/color]
9ac5e000 – 9ac5e2e0 L000002e0 o32 region_2 rva=0000b000 vsize=000002e0 real=9ac5e000 psize=000002e0 f=40000040 for osaxst0.dll
长度2E0
9AC86E45+9624=9ac90469
改
[color=Red]o32[2].o32_dataptr: P+00090469
o32[2].o32_realaddr: P+00090469[/color]
现在WriteMAP,检查map
9ac85448 – 9ac86da5 L0000195d o32 region_0 rva=00001000 vsize=0000195d real=9ac85448 psize=00001960 f=60000020 for hd.dll
9ac86da5 – 9ac86e45 L000000a0 o32 region_2 rva=00003000 vsize=000000a0 real=9ac86da5 psize=000000a0 f=40000040 for hd.dll
9ac86e45 – 9ac90469 L00009624 o32 region_0 rva=00001000 vsize=00009624 real=9ac86e45 psize=00009624 f=60000020 for osaxst0.dll
9ac90469 – 9ac90749 L000002e0 o32 region_2 rva=0000b000 vsize=000002e0 real=9ac90469 psize=000002e0 f=40000040 for osaxst0.dll
9ac90749 – 9ac96000 L000058b7 NUL
可以看到这4个地址已经按要求排列好了,呵呵,map也没有!!!!了,和谐啊.

现在看map最后
9af07eec – 9af09026 L0000113a filedata 1f23b941-38f8-def5-83a6-b0a8eadaa267.dsm
9af09026 – 9ff08100 L04fff0da NUL
9ff08100 – 9ff08100 L00000000 End: highest physical address
因为我们调大了物理地址结束点physlast: 为 9FF08100
因此这里有大量的多于空间,我们要将物理地址结束点physlast: 改为9af09026+1=9af09027 加1点点空间
现在咱们再用XIPPORT,Reloc P,WriteMAP。
9af04544 – 9af07ee9 L000039a5 filedata sysroots.p7b
9af07eec – 9af09026 L0000113a filedata 1f23b941-38f8-def5-83a6-b0a8eadaa267.dsm
9af09027 – 9af09027 L00000000 End: highest physical address
和谐了吧,哈哈,检查没有!!!!
到这里map调整完毕,基本很好了.
最后我们修正 nk.exe 模组中的 S000 文件
然后你需要修正 nk.exe 模组中的 S000 文件,在那里放上你的新 ROMHDR offset。
首先查找旧的(ATOM 19900) ROMHDR offset,在你自己的旧的 MAP.txt 文件有类似的一行:

9ad24a6c – 9ad24ac0 L00000054 rom_00 header: dlls=01f901fd-02000000 phys=9ac00000-9af08100, 27 modules, 9 files, 4 copyentries ext=9ac0271c ram=80500000-84000000 cputype=000001c2
告诉你这个XIP中含有27 个modules, 8个 files, 4 个copyentries ,你见到 – 9ad24a6c – 它是你的旧offset –
在 nk.exe 的 S000 部份查找这 hex 数值,在 hex 中这一个数值为 6C4AD29A


, 修正它为你的新 romhdr offset,9ADC1940 HEX中为4019DC9A

新的romhdr offset你可以在上面2中产生的 MAP.txt 文件中找到,

保存. 咱们再用XIPPORT,Reloc P,WriteMAP。
最后检查一次没有!!!!!,OK
可以输出XIP_OUT.BIN了.到此xip移植完毕
写入rom开刷
—————————————————————————————————————-
[color=Red]其实wm5—wm6.1道理和方法同上,要注意的是在输出前,必须多做步nk.exe s000的修正
搜索
0200001A0330D5E5010053E30A00008A
改为 0200001A0330D5E5020053E30A00008A
也就是看你那第二行的第一个01改成02[/color]
—————————————————————————————————————-
下载电子版
点击下载此文件
乱写P535XIP、SYS移植步骤
网上一直没有P535教程,现把我移植步骤分享一下,希望对大家有帮助。移植XIP有风险,请慎重,否则刷成板砖不要怪我哦。
为了部落的发展,转载请注明源自数码部落 ,谢谢!
已移植19209XIP到猫版的6.6为例
所需工具:
1. P535开机动画修改(秋天)
2. XIPport.exe
3. M'Reloc.exe
4. Beyond Compare
5. WinHex.exe
6. Ultra Edit
7. RomStudio_V1.5_by_IMG.exe
当然还需准备一个新版本(19209)的XIP和SYS。
移植XIP步骤:
1. 打开P535开机动画修改
2. 选择要移入XIP的ROM文件
3. 选择WORK WITH XIP
4. 点UNPACK得到P535的XIP文件
5. 复制xip_raw.bin到XIPPORT所在目录
6. 运行XIPPORT.EXE
7. 点DUMP XIP.BIN解开P535的XIP
8. 点WRITE MAP和MAKE PKGS
9. 备份得到OUT目录下的所有文件
10. 解压缩19209XIP
11. 将XIPPORT.EXE和pkgcommon.dll复制到19209XIP目录下
12. 在19209XIP目录下:
运行XIPPORT.EXE
点DUMP XIP.BIN解开P535的XIP
点WRITE MAP和MAKE PKGS
13. 替换文件
删除P53XIP目录下OUT\MODULES\MSXIPKernel里的所有文件。
将19209XIP\OUT\MODULES\MSXIPKernel目录下的所有文件复制到P53XIP的OUT\MODULES\MSXIPKernel下
将19209XIP\OUT\FILES\ MSXIPKernel目录下的所有文件复制到P53XIP的OUTFILES\MSXIPKernel下
将19209XIP\OUT\FILES\ MSXIPKernelLTK目录下的所有文件复制到P53XIP的OUTFILES\ MSXIPKernelLTK下
此处注意:OUT\FILES\OEMXIPKERNEL和XIPPORT\OUT\MODULES\OEMXIPKERNEL下的内容不能替换。如果你的OUT\MODULES\MSXIPKernel有这些文件(nk.exe, cecompr, ceddk, fsdspy等)也不要替换
在P535XIP的目录下:
执行Undo操作
执行Relocate P'操作
执行write maps,得到新的MAP.physical.txt和MAP.txtR
14. 打开备份OUT目录下的MAP.TXT看看那行有!!!!!!!!!。(没有?那你命太好了,可以去买彩票了^_^)
如果在first dll….和last dll之间发现有“!!!!!!”,则要参考被移植的XIP的MAP.TXT文件,用mreloc.exe对相应的模块的地址按被移植XIP的MAP.TXT文件的顺序进行修改,同时要对每个模块的imageinfo.txt文件做修改。
运行M'Reloc.exe,点choose mudule参照旧的MAP.TXT将所有模块目录下的imageinfo.bin的e32_vbase和o32[1].o32_realaddr的值改为旧的模块下imageinfo.bine32_vbase和o32[1].o32_realaddr值。
用Beyond Compare分别打开备份OUT\MODULES\MSXIPKernel\busenum.dll的imageinfo.txt和P535XIP\OUT\MODULES\MSXIPKernel\busenum.dll下的imageinfo.txt,将 e32_vbase: V=03FFA000和 o32[1].o32_realaddr: D=01FFF000这两个值分别替换为旧的地址。用Beyond Compare怎么替换就不用说了吧?
做完后运行WRITE MAPS,first dll….和last dll之间的!!!!!就会消失。
15. 如果是在类似这样的地址80000000 – 80000000 L00000000 Start: first physical address的这一行到80276358 – 80276358 L00000000 End: highest physical address之间的地址出现“!!!!!!”说明新装进来的文件在调入RAM时他们的地址和其他的东西有冲突了,你必须要调他们的地址,地址重复的地址长度在这一行的LXXXXXXXX中,,查看前后行的LXXXXXXXX值,看看他们的地址长度是多少,再查找有NUL的行,它的LXXXXXXXX代表那里有相应的空的地址,如果空出的长度能装下出现“!!!!!!”的上行或下行的地址长度+“!!!!!!”行的地址长度,你要做的是将那一行的数据移到空的地方!!移动完一个数据段的数据,再做一下write maps,再重新查看MAP.TXT文件,如此重复,直到不再有“!!!!!!”出现为止!(这个太麻烦,我懒得改,听秋天的直接把造成地址冲突的hd.dll、osaxst0.dll,以及对应的txt文件给删了。^_^)
16. 至此XIP一直完毕可以BUILD XIP了。执行build xip_out.bin得到xip_out.bin,将其改名为xip_raw.bin复制到P535开机动画修改\ASUS_P535_NB0_Kitchen覆盖P535原始的xip_raw.bin。
17. 运行PACK newXIP,压缩XIP
18. 用WinHex打开xip_raw.bin.xiporg,将第一行的前半部分改为78 01 A6 00 78 01 A6 00。这个数值可以从srpx_raw.bin中得到,第一行就是。部落里的tsinghe谈到压缩后的第四行里有压缩前的文件大小,这个经常错,请手动修改。注意它是反序的!我改了到启动不了了,不改倒没事,奇怪。
19. 运行Combine NB0,刷机试试看版本是不是变了?内部版本还是老版本,别急,SYS还没有移植呢。
20. 移植SYS,用IMG的右键总管解开刚刚移植好的ROM,怎么接这就不多说了。
21. SYS移植我只移植了一下文件:
.ROM
MediaOS开头的除文件名里含有0409的文件
OS
OSFiles
Redist
Shell
不知对不对?请各位补充。
有人说Metadata也要移植,我移植后连接出现问题,所以没有动它。
22. 注意,由于现在出的ROM大部分把DSM和RGU删掉了,无法正常分解出OEM和SYS文件,所以没办法只能各个打开新SYS下需要移植的文件夹,将其里面的文件全部复制到刚刚解出的DUMP文件夹下覆盖同名文件。
23. 将G'Reloc.exe复制到DUMP的同级目录下
24. 将DUMP文件夹改名为SYS,运行G'Reloc.exe,G'Reloc各个数值都别动,点DOIT,等出现DONE后,再把SYS文件夹改回DUMP。
25. 生成ROM。刷机,看看版本是不是都变成19209了?
XIP移植教程,目前较完整的一个!(ZINC篇)
本贴转自xbeta ganfan所写,大至上能解决不少人的问题,但xip移植说简单时就简单,说复杂就复杂的东东,希望大家多点用心。
第一步:
准备工具,提取XIP.BIN(假定你已经知道如何提取和写入XIP.BIN了)

XIPPort的版本比较混乱,建议用大小是72,704字节的版本。
第二步:
解开ZINC的XIP,WRITEMAP、BuildPkg:

检查你的out目录,应该长这样:

其中,OEM开头的File和Modules目录是要保留的。
第三步:
同样解开一个更高版本的ROM的XIP,我用的Kaiser 沃达丰英国版Build19199的XIP。

其中,WinCENLS_WWE和LangDB我们都可以不管(对ZINC目前来说,没用到)
第四步:文件替换
将ZINC XIP的Files和Modules目录的MSXIPKernel和MSXIPKernelLTK都替换为Kaiser的版本。在替换以前,记得备份ZINC XIP的整个OUT目录。
第五步:尝试Reloc Slot0和Slot1
5.1 检查地址冲突

Undo的意思是将刚才打好包的MSXIPKernel、OEMXIPKernel之类的文件夹里的东西重新直接移回到Out里。Realloc P是重新计算各模块的位置,WriteMaps是将计算结果写入到MAP.TXT里。
现在打开MAP.TXT,会发现很多!!!!!!!,这是冲突的地址。咱们运气好,SLOT0里没有冲突,在SLOT1里才有。
先看头两行位于Slot1里的冲突地址:
03e06000 – 03e54000 L0004e000 Virtual base address of TrueFFS.dll
03e54000 – 03e5a000 L00006000 Virtual base address of ceddk.dll
03e56000 – 03e5a000 L00004000 !!!!!!!!!!!!!!!!!!
03e56000 – 03e5a000 L00004000 Virtual base address of regenum.dll
03e5a000 – 03e5e000 L00004000 Virtual base address of cecompr.dll
03e5a000 – 03e5e000 L00004000 !!!!!!!!!!!!!!!!!!
03e5a000 – 03e69000 L0000f000 Virtual base address of pm.dll
意思是:
03e54000 – 03e5a000 L00006000 Virtual base address of ceddk.dll
(ceddk.dll的E32_VBASE从3e540000开始,长度是6000)
03e56000 – 03e5a000 L00004000 !!!!!!!!!!!!!!!!!!
(这里两个DLL之间,重叠了4000长度的区域!)
03e56000 – 03e5a000 L00004000 Virtual base address of regenum.dll
(regenum.DLL的E32_VBASE从3e56000开始,长度是4000)
后面那一串!!!!!!!!也是这个意思,差了4000的区域,就不重复了。
5.2 计算地址
因此,SLOT1里共缺了两处4000的长度。显然我们需要将TrueFFS.DLL和CEDDK.DLL的E32VBASE向前挪8000字节,REGENUM.DLL和CECOMPR.DLL的E32VBASE向前挪4000字节,这样大家就都和谐了。
现在拿起计算器,进行16进制运算,得到需要搬移的4个DLL的E32VBASE:
TrueFFS.dll: 3DFE000
ceddk.dll: 3E4C000
regenum.dll: 3E52000
cecompr.dll: 3E56000
5.3 Reloc模块
OK,记下上面这4个值,分别打开这4个模块的目录,修改imageinfo.txt,例如TrueFFS.dll:

改为

IMAGE.TXT改完以后,还需要用M’Reloc修改模块S00X:

改为:

同样,修改全部4个DLL模块。
5.4 检查
咱们再用XIPPORT,Reloc P,WriteMAP。现在MAP.TXT中SLOT0和SLOT1看上去相当的和谐。
第六步:修改物理地址和RAM起始位置
6.1 检查物理地址
由于新加进来的文件比原来的大,所以一些文件不可避免的越界了,占用了以前系统认为是RAM的虚拟地址。
在MAP.TXT的最后,出现了这样的!!!!!!!!!!!!!!!!!!!:
803fa000 – 80405848 L0000b848 o32 region_0 rva=00001000 vsize=0000b848 real=03e5b000 psize=0000b848 f=68000020 for pm.dll
8040072c – 80405848 L0000511c !!!!!!!!!!!!!!!!!!
8040072c – 8040072c L00000000 End: highest physical address
8040072c – 80401000 L000008d4 NUL
80401000 – 80401000 L00000000 Start: start of RAM
80401000 – 80406000 L00005000 NUL
80406000 – 80407000 L00001000 initialized data of region_1 giisr.dll
80407000 – 8040a268 L00003268 NUL
8040a268 – 80415268 L0000b000 filedata boot.hv
80410000 – 80415268 L00005268 !!!!!!!!!!!!!!!!!!
80410000 – 80416000 L00006000 uninitialized data of region_2 nk.exe
80415268 – 80416000 L00000d98 !!!!!!!!!!!!!!!!!!
80415268 – 8041ca30 L000077c8 filedata boot.rgu
80416000 – 8041ca30 L00006a30 !!!!!!!!!!!!!!!!!!
80416000 – 80439000 L00023000 initialized data of region_3 nk.exe
8041ca30 – 80439000 L0001c5d0 !!!!!!!!!!!!!!!!!!
8041ca30 – 80423a30 L00007000 filedata mxip_lang.vol
80423a30 – 804273d5 L000039a5 filedata sysroots.p7b
804273d8 – 804284fa L00001122 filedata a9b11ebe-60a1-a4c8-9ba1-f13452768aaf.dsm
804284fa – 80439000 L00010b06 NUL
80439000 – 80439000 L00000000 —— start of RAM free space
80439000 – 83c00000 L037c7000 NUL
83c00000 – 83c00000 L00000000 End: end of RAM
可以看到,物理地址不够长了,PM.DLL写越界了,同时,一些文件被放到了RAM里面,我们需要增加物理地址的长度。
6.2 计算物理地址结束点
有两种办法:
1、将所有欠缺的长度、误放置的文件的长度加起来,然后在8040072C的基础上加上这个长度。
2、直接给一个足够大的值,让XIPPORT帮你算真实的值,我喜欢用这一种
打开ROMHDR.TXT:

我们直接为物理地址加上1M字节,我猜肯定够了:
将physlast:改为8050072C,因此,RAMSTART、RAMFREE的地址也相应往后排1M,应该改成:80501000,80539000。再用XIPPORT RelocP,WriteMAP
新的MAP.TXT的结尾部分,出现了这句话:
804273d8 – 804284fa L00001122 filedata a9b11ebe-60a1-a4c8-9ba1-f13452768aaf.dsm
804284fa – 8050072c L000d8232 NUL
8050072c – 8050072c L00000000 End: highest physical address
意思是,从804284fa到8050072c,多出来d8232这么多的物理地址!所以,真实需要的物理地址结尾就是:804284fa。
6.3 计算RAM起始点
物理地址的结尾是804284fa,本着最大化RAM的原则,RAM的起始点应该是一个16进制的1000的最小倍数,也就是80429000。
接下来计算FREE RAM的起始点,打开原始版本(刚才备份的)MAP.TXT,最后是:
80401000 – 80401000 L00000000 Start: start of RAM
80401000 – 80402000 L00001000 initialized data of region_1 hd.dll
80402000 – 80406000 L00004000 initialized data of region_1 osaxst0.dll
80406000 – 80407000 L00001000 initialized data of region_1 giisr.dll
80407000 – 80410000 L00009000 NUL
80410000 – 80416000 L00006000 uninitialized data of region_2 nk.exe
80416000 – 80439000 L00023000 initialized data of region_3 nk.exe
80439000 – 80439000 L00000000 —— start of RAM free space
它告诉我们,有4个模块的5个部分通过COPYENTRY放在了高端只读RAM里面。我们回头检查一下,发现NK.EXE和GIISR.DLL是OEM的,HD.DLL和OSAXST0.DLL是微软的。
现在把这四个文件的COPYENTRY收集一下:
这是ZINC原版的:
80406000 – 80407000 L00001000 initialized data of region_1 giisr.dll
80410000 – 80416000 L00006000 uninitialized data of region_2 nk.exe
80416000 – 80439000 L00023000 initialized data of region_3 nk.exe
这是KAISER的:
80306000 – 80307000 L00001000 initialized data of region_1 hd.dll
80307000 – 8030b000 L00004000 initialized data of region_1 osaxst0.dll
现在关注一下这些COPYENTRY的长度:
L00001000 initialized data of region_1 giisr.dll
L00006000 uninitialized data of region_2 nk.exe
L00023000 initialized data of region_3 nk.exe
L00001000 initialized data of region_1 hd.dll
L00004000 initialized data of region_1 osaxst0.dll
加起来:
1000 + 6000 + 23000 + 1000 + 4000 = 2F000
那么FREE RAM的起始地址应该是:80429000 + 2F000 = 80458000
咱们就又把ROMHDR.TXT根据上面算的这些值改回去:
physlast: 804284fa
ulRAMStart: R=80429000
ulRAMFree: 80458000
用XIPPORT RELOCP,WRITEMAP
第7步:修改COPYENTRY
1.计算
拿刚才COPYENTRY的地址出来,根据个人喜好调整一下顺序(我喜欢把NK放在最前面)
L00006000 uninitialized data of region_2 nk.exe
L00023000 initialized data of region_3 nk.exe
L00001000 initialized data of region_1 giisr.dll
L00001000 initialized data of region_1 hd.dll
L00004000 initialized data of region_1 osaxst0.dll
从RAMSTART(80429000)开始,顺序计算各个COPYENTRY的开始地址:
region_2 nk.exe: 80429000(起始地址)
region_3 nk.exe: 8042F000(80429000+L00006000)
region_1 giisr.dll: 80452000(8042F000+L00023000)
region_1 hd.dll: 80453000
region_1 osaxst0.dll: 80454000
2.修改
首先修改NK.EXE,打开NK.EXE的IMAGEINFO.TXT,找到这两句:
o32[2].o32_realaddr: P+00290000
o32[3].o32_realaddr: P+00296000
这里P的意思是ROMHDR.TXT里的physfirst,也就是80180000,因此,新的NK.EXE的O32[2]和O32[3]的地址分别应该是:
80429000-80180000 = 2A9000;
8042F000-80180000 = 2AF000;
根据计算结果,修改IMAGEINFO.TXT
然后用M'Reloc_nk.exe打开NK.EXE,修改O32_REALADDR:

同样的方法修改剩下的三个文件。
注意:M'Reloc_nk.exe有BUG
1、无法输入字母,所以只有用右键菜单粘贴;
2、粘贴后Doit按钮不能用,我一般是把输入框末尾的0删除,又输入一次,Doit就好了;
3、在Reloc DLL的时候,输入的值会被自动加上o32_size,输入前需要自己先减去,(NK.EXE和HD.DLL除外,XIPPORT已经帮你加了)。例如:
=>
第8步:生成XIP_OUT.BIN
现在用XIPPORT,RELOCP、WRITEMAP、BUILD XIP_OUT.BIN,这个MAP基本上可以乱真啦~
第9步:NK.EXE的特殊要求
有的NK.EXE的O32地址好像是有要求的,根据俺这个文章的第一个读者阿秋的经验,将移动的目的地取一个很和谐的大整数,也许可以解决这个问题。
关于hd.dll和osaxst0.dll移植后空间不足又或冲突的问题
这是我和一个网友QQ就怎样处理 hd.dll 和osaxst0.dll移植后空间不足又或冲突的问题,作的交流希望对大家有点启迪作用,还没整理有点乱,改天有空再作编辑处理,在这仅将这位网友改了个名 xxx. 请别见怪。。只是大家问同类问题太多所以。。。
XXX 14:44:59
9000的XIP加了那个HD。DLL,空间不够了
T2 14:45:12
加呀
T2 14:45:22
我每次都加
XXX 14:45:25

XXX 14:45:35
我一加就会出问题,可能我加的方法不对
T2 14:45:44
不会。。
T2 14:46:01
可能是加的方法问题。。
T2 14:46:14
有空来我blog看看。。
XXX 14:46:29
好,学习下
T2 14:46:43
其中有两个例子可以参考一下。
XXX 14:49:32
我是这样加的,:
physlast: 80283860
这个 80283860 +195D
T2 14:49:45
不。。
XXX 14:50:11
现在就这个HD。DLL的空间不够
T2 14:51:13
http://www.t2home.cn/article.asp?id=155
T2 14:51:22
http://www.t2home.cn/article.asp?id=137
T2 14:51:43
这两个就针对这个回的。。
XXX 14:51:48
我看下
XXX 14:59:43
physlast: 802FFF10
ulRAMStart: R=80300000
ulRAMFree: 80386000
这三个我调大了,还是不行。
T2 15:00:09
把xip传我看看。。
XXX 15:00:14
好的
T2 15:01:02
9000的?
XXX 15:01:02
旧的MAP
XXX 15:01:06
是的
T2 15:01:15
只xip就ok
文件“OUT.rar”已经成功接收。
打开文件 打开文件夹 转存至QQ网络硬盘
文件“MAP.txt”已经成功接收。
打开文件 打开文件夹 转存至QQ网络硬盘
T2 15:05:39
空间有多哦。
XXX 15:05:48
那个乱码是什么问题?
T2 15:05:54
?
XXX 15:06:02

XXX 15:06:11
这里
T2 15:06:27
地址冲突了。
T2 15:06:32
要移。。
XXX 15:07:09
晕,我搞错了
XXX 15:07:14
我再试下
T2 15:07:21
XXX 15:12:10
这个是不是要移植P+植?
T2 15:12:29
我已经排好。
T2 15:12:40
你参考一下。
XXX 15:12:45
好的,谢谢
T2 15:13:44
地址空间有多的。。不用扩。。
T2 15:13:52
还多很多。。
XXX 15:13:54
知道,我看错地方了
文件“MAP.txt”(28KB)已经发送完毕。
T2 15:14:47
就是有时候还是速度问题。
T2 15:15:01
T2 15:15:06
打错
XXX 15:15:53
你如何把HD.DLL改成80075F00
T2 15:16:10
这个要用ue
T2 15:16:18
没合适工具。
T2 15:16:24
XXX 15:16:29
这个我不会改
T2 15:16:47
T2 15:17:02
和其他模块一样。
T2 15:17:31

XXX 15:17:57
我是说如何知道这个地址?改我知道
XXX 15:18:07
应该是80284000
T2 15:18:13
T2 15:18:25
这是RAM的地址。。
T2 15:18:33
随你改。
XXX 15:18:40
80075F00 这个值如何算出来?
T2 15:19:05
这是那?
XXX 15:19:37

T2 15:19:38
你说的是start of RAM还是physical address。。。?
XXX 15:19:52
first physical address
T2 15:20:07
呵。。
T2 15:20:16
这上面有呀。。
XXX 15:20:22
我的就是这个地方地址冲突了
T2 15:20:42
不仅是
T2 15:20:54
下面的RAM也要移。。
XXX 15:21:12
RAM的我已经移好了,改成原来一致的了
XXX 15:21:28
80284000 – 80284000 L00000000 Start: start of RAM
80284000 – 80285000 L00001000 initialized data of region_1 hd.dll
80285000 – 80289000 L00004000 initialized data of region_1 osaxst0.dll
80289000 – 80290000 L00007000 NUL
80290000 – 80296000 L00006000 uninitialized data of region_1 nk.exe
80296000 – 802f8000 L00062000 initialized data of region_2 nk.exe
802f8000 – 802f8000 L00000000 —— start of RAM free space
802f8000 – 83a00000 L03708000 NUL
83a00000 – 83a00000 L00000000 End: end of RAM
T2 15:21:35

T2 15:22:28
跟在nk.exe后面。
XXX 15:22:43
哦,
T2 15:23:17
hd.dll,osaxst0.dll,这两个xipport是无法处理的。
XXX 15:23:49
你是如何修改的呢?
XXX 15:24:03
这二个好很多版本都没有移植,就是出问题
T2 15:24:35
和其他模块一样。
XXX 15:25:15
e32_vbase: o32[1].o32_realaddr:
这二个地址我都改了,还是一样
T2 15:25:47
?
T2 15:26:15
和这两个没关系的哦。
T2 15:27:05
o32[0].o32_dataptr: P+00075F00
o32[0].o32_realaddr: P+00075F00
T2 15:27:18
o32[2].o32_dataptr: P+0007785D
o32[2].o32_realaddr: P+0007785D
XXX 15:27:20
哦,明白了
XXX 15:44:51
是了,把你刚才帮我做好的XIP传我一份,我看下和你一样不
T2 15:45:25
没做好哦。
T2 15:45:39
map给你了呀。
XXX 15:45:55
是的,我看下我模块的地址修正的正确不
文件“MAP.txt”(28KB)已经发送完毕
移植 xip 问题解决方法???[不断更新]
这原本是 rainmusic 老兄的一个提问贴,考虑到这类重复问题较多,会在适当时候重新编辑成一个教程
希望大家能珍惜,不反对转贴但请注明来自 www.T2home.cn
这个连接也是关于xip移植中出现问题的解决http://www.t2home.cn/article.asp?id=155
问题 第一阶段
1。我先dump 838 一个版本的xip (WM6.0)
2。write maps
3。make pkgs
然后将 cht9000的 xip 也按上述步骤做
4。然后 用9000 MSXIPKernel替换 838中 MSXIPKernel的文件(只替换同名的文件)
5。然后 838的xip 执行undo
6。执行 realloc p
7。执行 write maps
就报错了
错误提示:An entry with the same key already exists.
问题第二阶段
1。因为不能 write maps 所以
用Mreloc 打开原始的 838 xip 模块
2。用Mreloc 打开已经用9000替换过的 xip 模块
3。用Mreloc 参照原始的838 xip的模块地址 修改9000替换过的xip模块中的 e32_vbase: V=XXXXXX和o32[1].o32_realaddr: D=XXXXXX
4。并修改对应imageinfo.txt中的e32_vbase: V=XXXXXX和o32[1].o32_realaddr: D=XXXXXX
5。如此一一对照后,能正常realloc p和write maps
问题第三阶段
新的map
03e79000 – 03e85000 L0000c000 Virtual base address of imgfs.dll
03e83000 – 03e85000 L00002000 !!!!!!!!!!!!!!!!!!
03e83000 – 03e8d000 L0000a000 Virtual base address of fsreplxfilt.dll
03e8d000 – 03ea2000 L00015000 Virtual base address of fsdmgr.dll
03ea2000 – 03eab000 L00009000 Virtual base address of fatutil.dll
03eab000 – 03ebe000 L00013000 Virtual base address of fatfsd.dll
03ebe000 – 03eca000 L0000c000 Virtual base address of encfilt.dll
03eca000 – 03ed0000 L00006000 Virtual base address of diskcache.dll
03ed0000 – 03edc000 L0000c000 Virtual base address of devmgr.dll
03edc000 – 03f4e000 L00072000 Virtual base address of crypt32.dll
03f4e000 – 03fe4000 L00096000 Virtual base address of coredll.dll
03fe4000 – 03ff2000 L0000e000 Virtual base address of certmod.dll
03ff0000 – 03ff2000 L00002000 !!!!!!!!!!!!!!!!!!
03ff0000 – 03ffa000 L0000a000 Virtual base address of cachefilt.dll
旧的 map
03e79000 – 03e83000 L0000a000 Virtual base address of imgfs.dll
03e83000 – 03e8d000 L0000a000 Virtual base address of fsreplxfilt.dll
03e8d000 – 03ea2000 L00015000 Virtual base address of fsdmgr.dll
03ea2000 – 03eab000 L00009000 Virtual base address of fatutil.dll
03eab000 – 03ebe000 L00013000 Virtual base address of fatfsd.dll
03ebe000 – 03eca000 L0000c000 Virtual base address of encfilt.dll
03eca000 – 03ed0000 L00006000 Virtual base address of diskcache.dll
03ed0000 – 03edc000 L0000c000 Virtual base address of devmgr.dll
03edc000 – 03f4e000 L00072000 Virtual base address of crypt32.dll
03f4e000 – 03fe4000 L00096000 Virtual base address of coredll.dll
03fe4000 – 03ff0000 L0000c000 Virtual base address of certmod.dll
03ff0000 – 03ffa000 L0000a000 Virtual base address of cachefilt.dll
因为fsreplxfilt.dll 和 imgfs.dll 地址冲突
1。用mreloc 打开 fsreplxfilt.dll模块 然后 修改e32_vbase: V=03e83000 为 03e85000 并修改对应imageinfo.txt内的e32_vbase: V=03e83000 为 03e85000
2。这样会导致下一个模块又冲突,用1中的方法继续修改地址,一个一个顺序向下排
3。最后 生成的map不再出现!!!!!!!!!!!!
4。hex修改nk.exe的s0000的偏移量
5。bulid xip_out.bin
6。用xipport将xip_out.bin插入原nk.nb中 插入地址 00310000
刷机
第一屏 移动那个红色的
第二屏 有ipl spl 2.01.1111那个
第三屏 绿色的wm6背景 不出现 调整屏幕 死在这里。
以下 T2 回复:
这是做完第一二阶段后生成的,MAP.

呵。。这位老兄按上方面完成的前两部份。。


嗯,上面是没问题了但下面就。。。

我们看到highest physical address的地址明显的不足,出现了大大的惊叹号,且还有部分已经挤到下面 RAM 部分去了。在这我想说一下其实很多人都有误解就是以为highest physical address的地址还是像上面那两部分一样移,包括很多“高手”也都这样教人家,是不是不可以这我不知道,但我知道其实不用这么麻烦,因为highest physical address不是固定的,xipprot会自动排列,所以何必去费心一个一个去排?呵。。。说多了。
这里我想说一说我的处理方法供参考,或许不一定对。。
。。反正你就看就办吧,ok..先拿出你的十六进制计算器,
先看我们要处理的几个:

这个还欠 00000F37

这个 boot.hv 要移所用空间 0000B000

这几个mxip_lang.vol boot.rgu sysroots.p7b
我们把这几个都加一下应该是要 1CC50, 意思是说highest physical address还需要 1CC50 的空间才ok.
那这个空间怎么给?。。。打开 ROMHDR.txt。。看看。。

physlast: 8C37F00C 看到这个么?结束地址,加上刚才我们算出来的 1CC50 +8C37F00C=8C39BC5C 实际要填上 physlast: 8C39BC5B 当然你也可以取个整数;
但这样还不行因为这时已经越过了nk的 ulRAMStart: R=8C380000 了所以这个相应向后移取值如:8C39C000
这样空间就够了,保存后重做一次执行 realloc p 执行 write maps
这时回去看RAM下原来的nk..可能没了。。。呵。。。没关系。。
8c380000 – 8c386000 L00006000 uninitialized data of region_1 nk.exe
这个原来是 8C380000 到 txt 里修改region_1 的值为 8C39C000 其实也就是将 80000 改成 9C000

至于8c386000 – 8c3aa000 L00024000 initialized data of region_2 nk.exe 也就按上方法移就ok完成后执行 write maps
转贴:xip移植方法共享
转贴:
提供网上搜到的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修改对应的数据,保存! 呵呵!这个是个细心量大的手工活,没有耐心的就不要做了
(转贴) XIP移植教程
声明:这个贴不是本人所写,只是转贴,出处已经记不起是那了,请知道的说一下我补上,本贴仅供参考.其中有些内容其实有误,所以操作前请小心求证..
先说明一点,如果你的手机变砖头可别怪我,呵呵
一、准备工具:XIPPort.exe、mreloc.exe、Winhex.exe、Scoter Kitchen1.0等工具,工具的用法在这篇文章中会涉及到一些
二、ROM操作、提XIP
701的ROM是bin格式的文件,假设你的ROM文件名是ROM.BIN
从ROM中提取出XIP.bin:
把ROM.BIN复制到C:\Scoter Kitchen\Utilities\TOOLS\SRPX tools下面
执行以下命令:
msflshtool.exe rom.bin -d -p 1
SRPX2XIP.exe rom.bin.part1
把ROM.bin.part1.xip改名为xip.bin
一般最新内核都出现在HTC机型上,这里以NB格式的ROM来提取XIP
把NB文件命名为NK.NB并复制到C:\Scoter Kitchen\Utilities\TOOLS\SRPX tools
RomMaster.exe -x -w 5 nk.nb -o xip.bin
三、借想要的XIP
1.准备好想借XIP的xip.bin文件和你自己要升级的xip.bin文件,放在两个不同的目录,分别将XIPPort.exe放到他们在的目录,并运行dump xin.bin
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.txtR
首先查找旧的 ROMHDR offset,在你自己的旧的 MAP.txt 文件有类似的一行:
80768b30 – 80768b84 L00000054 rom_00 header: dlls=01fa01fe-02000000 phys=80600000-808ff47c, 23 modules, 10 files, 1 copyentries ext=8060283c ram=80900000-
84000000 cputype=000001c2,告诉你这个XIP中含有23 个modules, 10个 files, 1个copyentries ,你见到 – 80768b30- 它是你的旧offset – 在 nk.exe 的 S000 部份查找这hex 数值,在 hex 中这一个数值 30 8B 76 80, 修正它为你的新 romhdr offset,新的romhdr offset你可以在上面2中产生的 MAP.txt 文件中找到,如果相同就不用找了
五、生成新的xip.bin文件
1.打开新产生的的MAP.txt文件,如果没有哪一行出现“!!!!!!!!!!!!!!!!!”那么证明地址没有冲突基本成功了
2.执行build xip_out.bin,会在你的目录来新产生一个xip_out.bin的文件
六、问题解决
1.在第五的中1,发现在“!!!!!!!!!!!!!!!!!”
则要参考自己的旧的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修改对应的数据,保存! 呵呵!这个是个细心量大的手工活,没有耐心的就不要做了
七、合成新ROM
把XIP.bin改名为ROM.bin.part1.xip并复制到C:\Scoter Kitchen\Utilities\TOOLS\SRPX tools下面
执行以下命令:
XIP2SRPX.exe ROM.bin.part1.xip
msflshtool.exe ROM.bin -p 1 -r ROM.bin.part1.xip.xiporg
仓促之际难免出错,此文重点是抛砖引玉,不足之处还请其他大侠来完成,原文出自DIYPDA,此文只是针对701做了一些修改。
