以文本方式查看主题 - 曙海教育集团论坛 (http://sun4.cn/bbs/index.asp) -- Wince技术讨论区 (http://sun4.cn/bbs/list.asp?boardid=9) ---- Sun之糊志_D600更换wince.nls过程 (http://sun4.cn/bbs/dispbbs.asp?boardid=9&id=1370) |
-- 作者:wangxinxin -- 发布时间:2010-11-16 10:03:27 -- Sun之糊志_D600更换wince.nls过程 俄罗斯黑客放出了HTC Gene P3400手机(国内型号是Dopod D600)的windows mobile 6的ROM,国内热心的高手第一时间汉化了这个版本,并陆续放出了几个改进的稳定版。本来并不打算升级自己的手机系统,其一自己对手机的系统一无所知,其二刷ROM毕竟有很大的风险,搞不好就会把手机搞报废,但是犹豫了一下,还是为好奇心驱使,一闭眼,刷。 整个刷机过程相当顺利,手机重新启动后进入了WM6,测试各功能均正常,看来汉化的相当好。可没过多久就发现了一个问题,就是无法通过WAP同步mail2web的exchange服务器,网上查了一下,好像没法解决这个问题。但网上使用其他型号的手机在升级WM6后也有发现了这个问题的并提出了一些解决方案,可这些方案几乎都被证实无效,最后发现一个替换wince.nls文件的解决方案尚存一丝希望,决定试一试。因为对手机的系统软件和破解工具一点感念都没有,用了两个晚上来回折腾,总算把问题解决,现在记下来,由于替换这个文件有一定的风险,切莫模仿,风险自负。 要替换wince.nls文件必需知道这个文件放在哪里,网上有其他型号手机的一些替换方法,不过都是直接定制ROM,也就是说网上介绍的方法都是替换在ROM区的wince.nls,而D600中的这个wince.nls文件却是放在了XIP中,也就是核心系统区域,传说在XIP中动手脚,难度和风险要明显高于一般的ROM区域,而且目前关于对XIP的修改几乎没有什么资料,xda-developers论坛上有一些提取和修改工具发放,但具体的使用方法都不怎么介绍,不过没关系,零星的资料加上人类的想象力,开工。 首先,了解一下windows mobile手机的系统结构,像电脑一样,手机加电后也有一个自举程序,类似于电脑里的BIOS,这个自举叫IPL,它负责手机硬件的I/O和调用第二个启动程序SPL,SPL是一个比较关键的东西,如果要自己刷手机ROM就要先更改这里,但这个只要改一次,所谓解锁,以后就能随便刷系统了,传说中手机变成砖头的,也就是在刷SPL时出现错误。这部分其实还是电脑BIOS的一部分,接着SPL就会去调用真正的主角windows mobile操作系统OS。通常定制ROM,就是定制这里。 接着,看看OS怎么构成,OS主要分成XIP、IMGFS两大部分,其中XIP就是系统核心,而其他的软件压缩后放在IMGFS中,需要执行时解压到RAM中,类似于一般的海量存储设备。而XIP则不同,XIP全称是“eXecute In Place”,在XIP中存储的程序是不需要加载到RAM就可以直接执行的,所以在替换XIP中数据的时候一定要考虑物理地址的问题。 手机中还有一个ExtendedRom,通常是存放一些厂家定制的软件,在恢复出厂设置时会自动装入系统。 现在开始替换,准备工具,NBHTOOL,XIPTools,XIPPort,htcrt(必须是加入过HTC gene P3400/Dopod D600设备描述的),还有一个是msflshtool,这个不是必须的,但是由于网上没找到D600XIP的写入地址介绍,无意中发现这个工具可以分析出来。 步骤: 一、ROM选用宇轩r3.6的精简宋体版,用NBHTOOL工具分离出Windows.nb和ExtendedRom.nb,这个没什么好说的,运行程序就是一个界面,点击“Decompile NBH file”按钮,选中刷机ROM的NBH文件,然后指定结果输出目录即可。分解出来的ExtendedRom.nb不去动它,用操作的是Windows.nb文件。 二、打开XIPTools工具,在“Extract”选项卡上选好“OS File”和“Output File”文件,OS File就是刚才分离出来的Windows.nb,Output File可以取名为XIP.bin,然后点击XIP2,XIP就被分解出来了。点击Xipport按钮,调出XIPPort工具。 三、主要的重点工作就在这里。在XIPPort工具窗口上,点击“dump xip.bin”按钮,执行后,目录里会多出一个“OUT”子目录,这个目录下会出现两个文件和Files、Modules两个子目录,要替换的wince.nls文件就在FILES目录下。 先不急着替换,点击“write maps”按钮,OUT目录下会多出两个文本文件,MAP.txt和MAP.physical.txt,备份好这两个文件并打开MAP.txt来分析它,这里有一句“8c33d4a0 - 8c41618a L000d8cea filedata wince.nls”,猜猜它的意思,很明显,这个意思是说wince.nsl文件的数据是储存在从8c33d4a0到8c41618a的地址区间的,长度是000d8cea,那怎么修改呢,MAP.txt只是一个分析报表输出文件,一定有地方告诉它。 打开FILE子目录,wince.nsl就在这里,边上还有一个wince.nls.imageinfo文件,看看它是做什么的,打开文件,关注这两条: nRealFileSize: 000D8CEA nCompFileSize: 000D8CEA 原来是在这里说明了文件的长度,很明显,这个文件没有被压缩储存,实际长度和压缩长度相同,这个长度是哪里来的呢,右击wince.nls文件,点“属性”,显示“大小:867 KB (888,042 字节)”,打开windows附件里的计算器,算一算,咦,怎么这么巧,原来十六进制的0D8CEA正正好好等于888,042,(数学家真伟大)。好了,现在我们拷贝自己的wince.nls去替换这个FILES目录下原来的那个wince.nls,而新的wince.nls的长度是889,018 字节,换算成十六进制就是...多少来着?忘了,问问数学家去:-)。好,现在将这个新的十六进制数据替换wince.nls.imageinfo文件里的老数据。 接着,在生成新的XIP之前,还要做一件重要的事。由于数据在存储器里是一个挨着一个排排坐的,现在换了新文件比原来那个胖,就要占别人的位置,怎么办,那就要一个一个将后面的老兄往后挪,手工的做起来也能做,但很麻烦,还要注意上面储存文件名中的链表指针也要相应修改,如果能不出错该完,说不定真的变成数学家了:P。XIPPort提供了一个工具可以帮助解决这个问题,按“realloc P”按钮,搞定,再write一个Maps,看看新的Map.txt,只要里面没有“!!!!!”这样的字符,就基本搞定,不过再仔细检查一下那些地址变动了。用WinMerge对比一下两个文件,看看是不是链表和数据地址都被改变了。 现在可以重新生成XIP.bin文件了,按“build xip_out.bin”按钮,目录中就会生成一个新的xip_out.bin文件,这个XIP就是已经被替换了wince.nls的XIP了。 XIP.bin是从windows.nb中提取出来了,那么,新的XIP也要回写回去,XIPPort工具中有一个“write xip_out.bin to:”按钮就是来处理这个事的,但是,这个回写地址是多少呢,网上没有说明的,XIPPort的默认地址是00310000,千万不能就这么写进去,这个地址不是D600的。好,现在再用一个法宝,msflshtool。 其实msflshtool完全可以代替XIPTools的工作提取windwos.nb中的XIP,但因为是DOS命令没有XIPTools来得直观和简便,所以就不用它,无意中发现msflshtool的L开关正好帮助解决了回写地址的问题。 在DOS状态下,执行 C:\\Dopod\\MSFlshTool>msflshtool.exe Windows.nb -l *********************************************************** msflsh50dump v0.1 code by blueboy *********************************************************** partinfo part <0> offset <00000400> size <00313400> part <1> offset <00313800> size <00333000> part <2> offset <00646800> size <0338E800> end 看看part <1> offset <00313800> size <00333000>这句,回写地址来了,原来地址是00313800,长度是333000,不用去管长度,在XIPPort中填入这个“00313800”,回写到windows.nb文件中。 四、怎么来就还是怎么回去,既然刷机ROM的nbh文件分解出了Windows.nb和ExtendedRom.nb两个文件,现在针对Windows.nb的修改已经OK了,那么还是要把这两个文件合并成刷机ROM的nbh文件,不过来的时候用的是NBHTOOL工具,回去时就要用到htcrt工具了。 打开htcrt,点击“ROM builder”选项卡,左侧“device”下拉框中选择“Gene”这个就是D600,右侧的“Firmware contents”中只选“ext.ROM: 和“OS:”两项,分别是文件ExtendedRom.nb和Windows.nb,上面的千万都不能选,好,点击“Build!”按钮,选一个文件名,不一会儿,新的刷机文件就生成了。 五、刷机。重启后,这是exchange同步,久违的:正在查找更新“终于出现了。 wince.nls是一个码表文件,要选择一个合适的文件才能设置中国区域,但宇轩r3.6的精简宋体版中的wince.nls虽然支持中国区域,但却不能通过WAP同步mail2web,而现在这个同样支持中国区域设置,又能解决mail2web同步问题。网上还看到一个1.5M左右的wince.nls文件,支持中日韩,但由于文件的大小突出了XIP的余量,试了一次把它移到ROM,在XIP中删除,但没有成功,看来XIP的水还真有点深,怪不得很少有资料。 |