1.ROM的构成
rom常见的有这么几种 NBF NB0 NB1 NB2 BIN XIP
- NBF
这种是最常见的,也是咱们大家经常刷机使用的格式。
构成:前32字节是rom头,依次是
设备型号如PH20B
'-'分隔符
语言如CHN
'-'分隔符
版本如5.04.06
'-'分隔符
符号意义未知,可能是一个操作Id
'-'分隔符
1个16位的校验码
所以下次大家修改版本号等时注意长度限制,前三个分隔符算在32字节里面,第四个分隔符不算
接下来是256K的bootloader
剩下的30.75M就是os的镜像了。
NBF格式通常是用电脑通过串口或者USB口刷到手机里,它会覆盖手机设备的绝大部分重要区域。如果有错误,就必须返修了。
[list=2]
NB0
它是一个包含256K的bootloader,在rom偏移地址为0x80000000的地方
[list=3]
NB1
它是一个包含30.75M的OS镜像,在rom偏移地址为0x80040000的地方
[list=4]
NB2
它是一个包含31M的bootloader+os镜像,在rom偏移地址为0x80000000的地方
[list=5]
bin
这种格式是通过微软的romtools生成。
[list=6]
XIP
这是微软希望提供rom升级的方式。
它包含
DWORD size this value is the size of the B000FF file
DWORD null
xipentry ( 0x290 bytes )
B000FF file
64 bytes of ?? probably hash or signature?
可通过 updatexip.exe
刷机。
2。ROM的分解和合成
拿D700为例,把附件中文件解压,进入此目录dos窗口,输入
1.xda3nbftool -x nk.nbf nk.nba 0x20040521
;把nk.nbf文件转成nk.nba
2.prepare_imgfs nk.nba
;把nk.nba转成imgfs_raw_data.bin和imgfs_removed_data.bin
3.viewimgfs imgfs_raw_data.bin
;把上步生成的imgfs_raw_data.bin文件释放,在dump的目录下
ROM定制的重点
此时你就可以对dump目录进行定制了,如文件的ti添删,注册表的修改,自启动文件的修改
这个下面会详细介绍
4.buildimgfs
;定制完成后,重新生成imgfs_removed_data.bin文件
5.make_imgfs nk.nba
;重新生成nba文件
6.xda3nbftool -c -u nk.nba
; 因为做了修改,所以crc校验值会改变,此步重新生成新的crc校验
7.xda3nbftool -x nk.nba nk.nbf 0x20040521
;得nk.nbf
然后就可以用新做成的nk.nbf刷机了.
Tips: 第四步第五步中的imgfs_removed_data.bin、nk.nba 文件日期不会改变,但是不要认为此步两个文件没有变化。
For 多普达696:
第一步:xda2nbftool -x nk.nbf nk.nba 0x20040304
第七步:xda2nbftool -x nk.nba nk.nbf 0x20040304
其他步骤一样
.注册表的处理
在ROM的分解和合成过程的第四步,我们得到了dump文件的目录。
里面的default.hv,user.hv就是对应的注册表文件,但是这两个文件不能直接用记事本打开修改。
解压附件中的工具,把以上两个文件拷入,进入目录的dos窗口,输入
1.set _FLATRELEASEDIR=.
;这一步是设置环境变量
2.rgucomp -o default.hv -nologo > boot.rgu
;这一步就是把default.hv转换成boot.rgu文件
下面就是操作重点
生成的boot.rgu就是标准的注册表文件,可用任意的一个文本处理软件打开,推荐editplus或者ultraedit。
(然后请手工在第一行加入如“REGEDIT4”,并存为unicode格式,这步注意,要不然下一步生成报错)
以加入中文内核为例,简单介绍一下:
在注册表中任意位置(不过最好把类似的注册表放在一起,这样清晰些)
加入如下几行:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FontLink\SystemLink]
"Arial"="\\windows\\sunfon.ac3,SC_Song"
"Courier New"="\\windows\\sunfon.ac3,SC_Song"
"MS Sans Serif"="\\windows\\sunfon.ac3,SC_Song"
"Tahoma"="\\windows\\sunfon.ac3,SC_Song"
"Times New Roman"="\\windows\\sunfon.ac3,SC_Song"
"Kingsoft Phonetic Plain"="\\windows\\sunfon.ac3,SC_Song"
这样中文显示就有了。
加入:
[HKEY_LOCAL_MACHINE\nls]
"LegacyLocaleMode"=dword:1
"SystemLCID"=dword:804
"DefaultLCID"=dword:804
"DefaultOCP"=dword:3a8
"DefaultACP"=dword:3a8
[HKEY_LOCAL_MACHINE\nls\overrides]
"LCID"=dword:804
这样中文区域就设置好了。
当然前提是要把sunfon.ac3中文字体和wince.nls中文区域文件拷到dump目录里去。
Tip:如果要使用其他字体也很容易,只要把上步的字体路径和字体名称修改成你想要的,并把相应字体文件拷入就可以了。
如:如想使用微软雅黑字体,因为字体太大,10M多,所以不可能在rom中集成,所以你就可以改成
"Tahoma"="\\Storage Card\\MSYH.TTF,\x6211\x7684\x6587\x6863"
然后你把字体拷入你的存储卡(存储卡名为Storage Card,和上面对应),后面四个字符表示微软雅黑的unicode码。你也可以给这字体改个英文名,就不用写这个unicode字符了。
当然,放在卡里可能还需要加些注册表,相关内容请参考
【1y】随心所欲--替换系统字体,何须修改注册表。(8月29日改善WM2005兼容性)
把相关的注册表文件写入。
Tip2:这个注册表转换工具不支持中文字符,所以涉及中文字符请一律用unicode字符。关于如何找中文的对应unicode字符,下面会详细介绍。
Tip3:硬起后开机自动安装extroom中的软件设置地方,请在注册表中找到
[HKEY_LOCAL_MACHINE\Comm]
"AutoRun"="\\Storage Card\\ExtROM\\AutoRun.exe"
"AutoRunCFG"="\\Storage Card\\ExtROM\\cfg.txt"
哈哈,看到了么,就是这个。你可以按照你的意愿修改了。当然autorun.exe中路径你也要修改一下。
好了,不多说了,这个留着帖子里交流。相应的autorun.exe和extroom的定制会在后面详细说明。
好了,修改完毕。运行
3.rgucomp -b
;这样就把上步的boot.rgu转化成boot.hv,把boot.hv改名为default.hv,拷入rom定制中生成的dump目录中覆盖原来的,好了,输入你自己的注册表就OK了。
Tip:这步没有加文件名,所以如果第一步你不是转化成boot.rgu这个文件名,你这步就要改成标准的boot.rgu文件名了,其他不认。
4.initflashfiles.dat文件的处理
这个文件是刷完系统后自动生成文件和目录的重要文件。
rom定制过程中生成了dump目录,而放入dump内的文件都只会出现在ppc的windows的文件夹根目录下。
那开始菜单内的快捷图标哪里来的?programm files内的东西怎么来的?
wm5的rom原理通过initflashfiles.dat文件来做到移动文件的。
initflashfiles.dat也是个文本,里面通过语句规定了硬启动后windows根目录下的文件如何自复制一个副本到指定的ppc其他目录内。
做一个示例:
文本里的语句
; App Button default links
Directory("\x005C\x0057\x0069\x006E\x0064\x006F\x0077\x0073\x005C\x0041\x0070\x0070\x0042\x0075\x0074\x0074\x006F\x006E\x0073"):-File("\x65E5\x5386\x002E\x006C\x006E\x006B","\Windows\calendar.lnk")
转成正常文字就是
Directory("\Windows\AppButtons"):-File("日历.lnk","\Windows\calendar.lnk")
其中
\x65E5 对应 日
\x5386 对应 历
\x002E 对应 .
\x006C 对应 l
\x006E 对应 n
\x006B 对应 k
意思就是这个文件
\Windows\calendar.lnk
放到
Windows\AppButtons
目录下,显示名称为日历.lnk
这样的话日历硬件按钮对应的指令就是打开日历。知道这个的话就方便了,你就可以任意指定按键映射了。
里面的005c之类均为unicode,因为initflashfiles.dat这个文件不支持中文。如果你不用写中文,当然就不用这么麻烦了,可以直接写英文了。
附件1里为helmi AKU3.2 1.3.2中的initflashfiles.dat
附件2里为我的rom中修改成对应unicode中文的initflashfiles.dat
5。ROM的汉化
通过上面几步,你已经可以打造一个完美的中文内核了,下面的工作就是rom里面文字的汉化了。
这步其实没什么技术含量。
有两种方式
1。自己汉化
把那些对应的*.0409.mui用汉化软件自己汉化了,然后改称*.0804.mui
但是就是太繁琐了,因为文件太多,自己翻译太麻烦还不准。
Tip:如果没有找到对应的*.0409.mui,你也可以把对应的dll/exe文件用汉化软件汉化了,然后改成对应的*.dll.0804.mui/*.exe.0804.mui放到dump目录。
常用的汉化软件有Multilizer,ResHacker、eXeScope等,关于汉化软件的使用,不在本文讨论之内,可以在跟贴里探讨:)
2。找对应版本的中文原版汉化文件
比如我的rom是AKU3.2的,你可以找一个中文发行版本的rom,内核也为AKU3.2,这样你就可以把它的rom分解,把那些对应的*.0804.mui文件拷回来,然后把咱们rom里的那些*.0409.mui全部删掉,替换成0804的,然后重新生成rom。
Ok,你的中文界面中文内核rom出来了,赶紧刷机吧。
但是很不幸,还没有中文正式版本的基于AKU3.2的,这正是D700中文版本难产的重要原因。
我昨天找了半天,发现国内只有联想跟进的最快,它的et980现在最高版本是0818,但也还是基于AKU2.?,具体2点几版本我不太清楚。
但是我看到有3.0的中文版本测试图片出现,但此版本没找到,如果大家能搞到它的3.0中文版本,也可以了。
但即使有,它的版本也才刚到3.0,而我们的是3.2,呵呵,还是英文跟进的快呀。
这样,我们就可以先做个3.0的中文版本,不然只能做个AKU2的版本了。
了使你的mui文件生效,你需要在注册表(就是前一步的default.hv)中加入
[HKEY_LOCAL_MACHINE\Security\ColdInit]
"Locale"=dword:00000804
"ColdInit2Done"=dword:00000001
"ColdInit1Done"=dword:00000001
[HKEY_LOCAL_MACHINE\MUI]
"SysLang"=dword:00000804
"Enable"=dword:00000001
Tips:0804是简体中文的,0409是英文对应的代码。
对了,那个Multilizer 汉化版大家去汉化新世纪下吧,文件太大,将近12M。
4。initflashfiles.dat文件的处理(续)
给大家几个转换unicode-字符的小窍门。
1。字符 -〉unicode
其实java就带了一个很好的转换工具。转到java的bin路径,如C:\Program Files\Java\jdk1.5.0_07\bin
输入
native2ascii -encoding unicode d:\1.txt d:\2.txt
(你现在d盘的1.txt里写入你要转换的中文字符,执行完之后你就可以在2.txt中找到它的对应unicode编码。)
tips:转码后的unicode都是形如\u5fae\u8f6f\u96c5\u9ed1,把\u替换成\xj就可以了。
2。unicode->字符
其实微软输入法也带了一个很好的工具。打开微软输入法,选择辅助输入法-〉unicode码输入。
对应的输入法图标也变了
这时假设你输入5fae,输入完e系统就自动出来了“微”,输入8f6f,系统就自动出现"软"
再给大家一个小Tip:
集成软件的时候可以先找到对应软件的cab安装包,用WinCE CAB Manager打开,把里面的文件释放出来,放在dump目录,把对应的注册表文件集成到default.hv注册表中,完成rom,安装硬起后你的rom就有了这个软件了.呵呵.
关于用WinCE CAB Manager提取文件等用法以后会详细说明,今天没时间了.
ps:早晨到现在一直在写此帖,还没开始工作呢,头估计在哭了,得赶紧工作去了,等有空的时候再更新好了.
希望大家都能够分享自己的经验,早日看到每个人自己的完美rom.
附上一个中文简体拼音和手写的输入法,大家可以把它集成到rom里面去,呵呵.这是前几天从一个日本鬼子网站淘的.
Q表示是qvga屏幕的,还有一个vga屏幕的,如果大家需要,也可放上
发表于 @ 2008年07月03日 22:30:46|评论(loading...)|收藏