这个应该是大家最头疼的,很多人都不敢说自己真的会,我更加是这样。之所以还是要斗胆写一下,一方面应召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这里还有多少剩的,0x100000-剩的=你需要加大的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就可以了。但这一步使用就srpx的很容易出错,请参考我的另外一个帖子说明
http://www.pdaclan.com/thread-9242-1-1.html
[
本帖最后由 tsinghe 于 2008-4-3 14:34 编辑 ]