2008-6-17 15:50:12 ·RSS ·WAP ·加入收藏 ·设为首页

banner
如何定制你自己的wm5设备rom,980,838,900通用,解决838水货wifi的几个方案.
作者:harlemyin 来源: 发布时间:2008年03月07日 点击数:
按照软件作者的提醒,错误的diy最严重的后果就是彻底损坏设备,最不严重的后果是启动进入系统后一些功能有问题.
如果你是980用户,你自己diy的rom即使有问题理论上是不会损坏系统的,因为980是ipl,boot,系统分开升级的,错误的rom一般不会导致boot损坏,只要你的boot没有损坏就可以使用官方rom如01 19来恢复.
上诉链接内的软件其实是为htc的ppcpe 699,700,838与900定制的,使用在其它设备上有很大风险,不过经过试验980的rom是完全适用的,无任何风险,所有风险来自你的操作和理解.
diy如果看懂了我写的东西将是非常简单的一个过程.

正文 part1 过程概述
看到这里你的软件下载好了么?
他们应该是这两个文件



解压imgs_tolls,得到如下文件.






新建文件夹和新建文件夹2是我自己的软件资源,不包含在下载文件内.

里面的exe都是dos软件无法直接双击运行的,他们的作用如下

prepare_imgfs.exe
Splits nk.nba into imgfs_raw_data.bin and imgfs_removed_data.bin.
imgfs_raw_data.bin - contains raw IMGFS data
imgfs_removed_data.bin - contains extra data (something like FAT table).
Usage:
prepare_imgfs.exe nk.nba [-nosplit]
Use "-nosplit" for HTC Wizard and Universal ROMs that don't contain extra
blocks of data. In this case imgfs_removed_data.bin would be empty.
将*.nba的rom文件提取成imgfs_raw_data.bin和imgfs_removed_data.bin两个文件,-nosplit 在838,900和980上是必须的,加上参数的结果,imgfs_removed_data.bin将是空文件,不过它还是必须存在. 而696,700的wm5 rom请不要使用该参数

make_imgfs.exe
Reverse of prepare_imgfs. Combines imgfs_raw_data.bin and imgfs_removed_data.bin
into nk.nba file. Use -nosplit if it was specified for prepare_imgfs.exe.
Usage:
make_imgfs.exe nk.nba [-nosplit]
The nk.nba file would be used as a template, its contents would be overwritten.
从imgfs_removed_data.bin文件合成*.nba的rom,如果你提成的时候加入了-nosplit参数,此时必须加此参数

viewimgfs.exe
Dumps the contents of imgfs_raw_data.bin to "dump" subdirectory. Files are
dumped as is, modules as directories. File time and attributes are preserved.
Tool creates dump_MemoryMap.txt with address ranges occupied by modules.
Usage:
viewimgfs.exe imgfs_raw_data.bin
从第一个命令提取的imgfs_raw_data.bin文件释放rom内所有东西为文件形式,自动生成dump文件夹,rom所有文件将在此文件夹内.


BuildImgfs.exe
Reverse of viewimgfs. Reconstructs imgfs_raw_data.bin and imgfs_removed_data.bin
from files in "dump" directory. Overwrites contents of imgfs_raw_data.bin/imgfs_removed_data.bin
files. Does not check for errors or end of free space. Approximate free space
left is displayed when program is finished. In case of error contents of bin
files is undefined.
Usage:
BuildImgfs.exe
It would overwrite imgfs_raw_data.bin/imgfs_removed_data.bin in current directory.
从dump文件夹将所有文件组合出imgfs_raw_data.bin文件,组合时,原来的imgfs_raw_data.bin文件被自动覆盖

DelFile.exe
Deletes one file or module from imgfs_raw_data.bin. Wildcards are not supported.
Usage:
DelFile.exe filename.ext
Uses imgfs_raw_data.bin from current directory. Does not check for errors.
不使用释放imgfs_raw_data.bin为dump文件夹二直接使用该命令删除rom内文件

AddFile.exe
Adds one file to imgfs_raw_data.bin. Would reuse space freed by DelFile.
Usage:
AddFile.exe filename.ext
Uses imgfs_raw_data.bin from current directory. Does not check for errors.
同上,添加文件.

The typical process should be:
prepare_imgfs.exe nk.nba
viewimgfs.exe imgfs_raw_data.bin
...modify "dump" directory as you need...
BuildImgfs.exe
make_imgfs.exe nk.nba

or
prepare_imgfs.exe nk.nba
DelFile.exe filename.ext
AddFile.exe filename.ext
...you may add/delete as many files as you need...
make_imgfs.exe nk.nba
diy你自己的rom有两个标准过程,第一个比较直观,

首先prepare_imgfs.exe 释放nba为imgfs_raw_data.bin
然后viewimgfs.exe释放imgfs_raw_data.bin为dump文件夹
接下来按照普通文件的删除粘贴方式删除dump文件夹内你不想要的rom文件,加入你自己的东西.
BuildImgfs.exe将你修改过的dump文件夹合成为新的imgfs_raw_data.bin
最后make_imgfs.exe 将新的imgfs_raw_data.bin合成为新rom.
刷机


第二个方法就是不释放imgfs_raw_data.bin为dump文件夹,使用del和add命令直接删除田间文件在imgfs_raw_data.bin内.

这里我们推荐使用的一种方法,它只更直观,因为如果你不释放为dump文件夹,作为不是开发者的我们是不知道rom内有哪些文件的.
part2 具体操作过程

这里使用980的1223rom作为例子,虽然是980为后缀名的,但是本质上它是一个nba的rom,我们无需改后缀名,htc系列机器的用uab刷的 rom就是nba的rom,sd提取的是nbf的rom,如果你想把nbf转换成nba或者反之,可以使用xdadeveloper那个链接里提到的工 具,也就是说你并不需要手头有一个usb刷机rom来diy.


ok,将rom放到dos工具同一文件夹下,否则一些dos命令找不到rom。

然后开始菜单,运行,cmd.





通过cd命令将路径变成dos工具目录,可以直接通过复制文件夹上的文字粘贴到cmd,前面加入cd空格就可以,不用一个个字的打.







然后使用prepare_imgfs.exe命令,输入prepare_imgfs chs1223.980 -nosplit,回车,cmd将提取rom到imgfs_raw_data.bin和imgfs_removed_data.bin,第二个文件为0字节.
这里chs1223.980为你需要修改rom的文件名.





回车后的提取过程很短,显示dump后一分钟内就能看见done.







现在我们得到了imgfs_raw_data.bin文件,你可以在dos软件相同目录下找到他们,



接下来要从imgfs_raw_data.bin得到dump文件夹.
cmd输入viewimgfs imgfs_raw_data.bin




这时软件开始从imgfs_raw_data.bin获得dump文件夹和文件,这个过程比较漫长,cmd的窗口可以监视到过程.



等到它结束




好了在dos软件同一目录你可以看到多了一个dump文件夹和一个dumpmap的文本,进入dump文件夹它,里面全部都是rom内的文件.你可以在第三张图片找到wince.nls这个关键文件.









接下来就是简单的右键删除,右键,复制粘贴,自己diy一下文件夹内的文件.



diy好dump文件夹后就要把前面的过程反过来做了.
首先要从diy好的dump文件夹得到 imgfs_raw_data.bin
cmd内输入BuildImgfs,回车,命令自动从dump整合出 imgfs_raw_data.bin并自动覆盖掉原来的 imgfs_raw_data.bin.这个命令不需要任何的参数和文件名出现,只要dump文件夹和 imgfs_raw_data.bin在该在的地方就可以.



这个命令执行的过程也比较长,cmd表现和提取dump差不多




等待它结束




好了imgfs_raw_data.bin此时已经被覆盖更新为与你diy好的dump文件夹相应.

最后一步就是从imgfs_raw_data.bin得到可刷的nba的rom.
cmd输入make_imgfs chs1223.980 -nosplit,回车,命令会将imgfs_raw_data.bin合成为chs1223.980,并自动覆盖原来的chs1223.980.
此处chs1223.980依然为你需要更改的rom的文件名,开始你使用的什么文件名就不要更改该文件的名字,并保证该文件存在于和dos软件们的同一目录下,否则命令会出错.




这个过程和从nba的rom得到imgfs_raw_data.bin看起来差不多,只是dump提示变为fixing,fixing一会就done了.




好了,大功告成,将nba的rom替换升级rom内相应文件,升级你wm5的ppc.
part3 关于838水货的wifi,中文解决方案

手头没有838,所以只能给出建议,我自己没有条件去实践.

方案1
最简单的方案
替换水货wince.nls为中国的wince.nls,加入需要的字库,修改注册表指向新字库或者不修改注册表使用修改好硬启动后导入注册表.这样水货不需要安装中文之星就可以阅读中文,且没有ie和word,qq乱码问题.也不用忍受中文之星的不稳定与冲突问题.
此方案没有任何难度,只是简单的文件删除,添加,风险最小.不过对于不喜欢外语界面的用户来说不完美.

方案2
复杂但是完美的方案
提取水货rom的wifi驱动,无线管理器和相关注册表.搞清调用关系,整合成一个补丁或者直接写入rom.
虽然完美,但是难度在需要一定的技术,要很清楚整个wifi模块的运行原理,要找出所有相关的文件和注册表.
如果有遗漏可能导致系统一些功能失效.需要时间反复试验,技术去寻找相关文件,需要细心来完成。

该diy的软件是专门为838和900写的,所以它制作出来的rom如果出问题,几乎可以肯定是diy过程出错,比较容易判断问题,不像我在980上花了很多时间在先期软件试验上。
part4 rom diy必须注意的细节

重中之重,所有加入文件必须是英文名,中文名文件会出错的。

首先你只能在dump文件夹内添加单个的文件,不能把文件夹放入dump文件夹内。
因为
在viewimgfs命令从imgfs_raw_data.bin得到dump文件夹的过程中cmd内可以看到,dump出来的东西有些是作为module有些是作为file。
反之在BuildImgfs命令,我们也可以看到dump文件夹内的文件有些作为file有些作为module整合到imgfs_raw_data.bin。
我们需要知道的就是文件夹会被认为是module,只有单个的文件才会被作为file,作为module的文件夹一般都是系统dll,mui,而且必须特殊处理过。

所以如果你把tcpmp文件夹复制粘帖到dump内,合成的过程是不会成功的,会卡在tcpmp,cmd会提示你tcpmp作为module写入失败。

其次
如果看了我980的定制rom发布帖子会注意到我没有再rom内整合相应的注册表信息,而是用了备份注册表恢复。
当然要做到整合需要的注册表在rrom内,这是完全可以的,你必须修改dump文件夹内rom的注册表。
注册表的修改就不那么简单了。

在dump文件夹内我们可以找到两个文件default.hv和user.hv

这两个文件就是注册表相关文件,但他们不是可以直接编辑的,必须使用我们下载的另一个make_hv.rar软件包,他的作用就是把变成 rgu后缀名的文件,rgu文件就可以用记事本打开,里面就是整个rom的注册表信息用文本记录着,你要做的就是细心的查找和添加注册表信息。然后再用软 件把rgu变会hv文件,覆盖dump文件夹内原来的hv就可以了。

修改注册表在中文机上的难度在于,make_hv.rar软件包不支持中文字符,会在hv到rgu过程中将中文rom内的所有中文注册表信息丢失,如果你直接把他得到的rgu文件修改再变成hv,那肯定是不行的,很多信息都丢失了。

而且整个系统的注册表文本编辑很容易出错,所以我选择了注册表恢复来做980的定制rom。

最后
如果你要把resco photoviwer这样的绿色软件放入rom,我建议你选择放弃skin文件夹,没有skin,reso photoviwer依然可以正常运行的。
建议你放弃的原因是
由于第一个细节提到的,我们只能放单个文件进入dump,而放入dump内的文件都只会出现在ppc的windows的文件夹根目录下。
那有人要问了,那开始菜单内的快捷图标哪里来的?programm files内的东西怎么来的?
wm5的rom原理通过initflashfiles.dat文件来做到移动文件的。
initflashfiles.dat也是个文本,里面通过语句规定了硬启动后windows根目录下的文件如何自复制一个副本到指定的ppc其他目录内。



文本里的语句现在给出个例子
Directory("\x005C\x0077\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x0052\x0069\x006E\x0067\x0073"):-File("\x5FEB\x63A5\x7535\x8BDD\x5427\x002E\x006D\x0070\x0033","\Windows\kjdhb")

意思就是这个文件
\Windows\kjdhb
放到
\x005C\x0077\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x0052\x0069\x006E\x0067\x0073
这个目录下
显示名称为
\x5FEB\x63A5\x7535\x8BDD\x5427\x002E\x006D\x0070\x0033
里面的005c之类均为unicode,整个语句翻译出来就似乎\Windows\kjdhb这个文件放到windows下rings文件夹内,显示为快接电话吧.


整个原理就是联想在dump里放了一个kjdhb文件,其实就是个mp3,后面后缀名删除了。
然后当980硬启动后该文件就会被复制一个副本到windows的rings文件夹下,这样我们就可以用他当铃声了。

使用resco photoviwer的朋友应该知道他在一级目录下还有个skin文件夹,如果你想整合到rom的resco photoviwer能有皮肤文件,你需要这样做
把skin里面的文件直接放到dump文件夹内,然后修改initflashfiles.dat,指定这些文件在硬启动后复制副本到你指定的skin文件夹下。

不过这样做除了麻烦外,对resco photoviwer软件也是毫无意思的,因为硬启动后复制的副本将会占用你的rom空间,而如果放弃skin文件,直接把resco所有单独文件放入 dump,这样整合的rom这些文件直接作为写入rom的文件存在于windows文件夹下,我们只要给出快捷方式就可以直接调用resco了,因为大部 分绿色软件可以直接找到同一文件夹下的所有组件,这就不会占用任何客户rom。

下面是一段initflashfiles.dat复制ro内文件到开始菜单的语句,大家可以研究一下
Start Menu contents

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-PermDir("\x7A0B\x5E8F")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-PermDir("\x8BBE\x7F6E")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x5E2E\x52A9\x002E\x006C\x006E\x006B","\Windows\help.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x641C\x7D22\x002E\x006C\x006E\x006B","\Windows\search.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x7535\x8BDD\x002E\x006C\x006E\x006B","\Windows\cprog.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x4EFB\x52A1\x002E\x006C\x006E\x006B","\Windows\tasks.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x8C03\x5236\x89E3\x8C03\x5668\x94FE\x63A5\x002E\x006C\x006E\x006B","\Windows\ATCIUI.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x0041\x0063\x0074\x0069\x0076\x0065\x0053\x0079\x006E\x0063\x002E\x006C\x006E\x006B","\Windows\sync.lnk")


Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x65E5\x5386\x002E\x006C\x006E\x006B","\Windows\calendar.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x8054\x7CFB\x4EBA\x002E\x006C\x006E\x006B","\Windows\addrbook.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x0049\x006E\x0074\x0065\x0072\x006E\x0065\x0074\x0020\x0045\x0078\x0070\x006C\x006F\x0072\x0065\x0072\x002E\x006C\x006E\x006B","\Windows\pie.lnk")

; Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("PerfMan.lnk","\Windows\PerfMan.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x4FE1\x606F\x002E\x006C\x006E\x006B","\Windows\tmail.lnk")
; turn off the OLD inbox later
; put the OLD inbox to the program floder (temporary)

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x4FBF\x7B3A\x002E\x006C\x006E\x006B","\Windows\notetake.lnk")
;Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355"):-File("\x5F55\x97F3\x002E\x006C\x006E\x006B","\Windows\voice.lnk")

;Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File(0804_WORLDCLOCKLNK,"\Windows\clock.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x0057\x006F\x0072\x0064\x0020\x004D\x006F\x0062\x0069\x006C\x0065\x002E\x006C\x006E\x006B","\Windows\pword.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x0050\x006F\x0077\x0065\x0072\x0050\x006F\x0069\x006E\x0074\x0020\x004D\x006F\x0062\x0069\x006C\x0065\x002E\x006C\x006E\x006B","\Windows\ppt.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x0045\x0078\x0063\x0065\x006C\x0020\x004D\x006F\x0062\x0069\x006C\x0065\x002E\x006C\x006E\x006B","\Windows\pxl.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x56FE\x7247\x548C\x89C6\x9891\x002E\x006C\x006E\x006B","\Windows\pimg.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x4E0B\x8F7D\x4EE3\x7406\x002E\x006C\x006E\x006B","\Windows\dlagent.lnk")


Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x8BA1\x7B97\x5668\x002E\x006C\x006E\x006B","\Windows\calc.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-File("\x8D44\x6E90\x7BA1\x7406\x5668\x002E\x006C\x006E\x006B","\Windows\fexplore.lnk")

Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F"):-Directory("\x6E38\x620F")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F\x005C\x6E38\x620F"):-File("\x7EB8\x724C\x002E\x006C\x006E\x006B","\Windows\solitare.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F\x005C\x6E38\x620F"):-File("icon.lnk","\Windows\gamesico.lnk")
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x201C\x5F00\x59CB\x201D\x83DC\x5355\x005C\x7A0B\x5E8F\x005C\x6E38\x620F"):-File("\x0042\x0075\x0062\x0062\x006C\x0065\x0020\x0042\x0072\x0065\x0061\x006B\x0065\x0072\x002E\x006C\x006E\x006B","\Windows\BubbleBreaker.lnk")
基于以上问题,我个人建议给rom加入不需要些注册表,自己可以释放注册表,没有复杂文件夹结构的绿色软件

而注册表和相关一些东西的变相解决方法是加入cab在rom内,当然cab和cab内包含的东西也必须是英文的。比如我做的980rom内的快捷方式都是英文名的,安装路径也是英文,不过注册表没有试验可否中文,我还是用的英文。

简单来说如果你想在rom内加入一个梅花输入,是绝对可以的,但也是绝对麻烦的,它的文件夹结构太复杂,还要写很多组册表。
【字体: 】 【收藏】 【打印文章】 【查看评论
用户登录
本月排行TOP10
用户列表
  • 用户名   文章数
  • admin    [1917]
  • 黑白颠倒    [1]
  • txjk    [0]
  • romwei    [0]
  • qq283944    [0]
  • yaolan4    [0]
  • league2001    [0]
网站统计
  • 晓宇网址导航
  • 游戏网址导航
  • 百乐网址导航
  • 好253网址之家
  • “站长版”遨游浏...
  • TOMPDA