Yegat 发表于 2020-8-27 17:32:40

【教程】 WM ROM 刷机包 DIY 教程( 四 )问题解决方法

本帖最后由 Yegat 于 2020-8-27 17:35 编辑

主要参考自52dopod论坛、mikesh 所编写的资料。

第四部分:ROM定制中问题的解决方法

https://www.dospy.wang/static/image/hrline/5.gif

A。开始运行Buildos导致的报错
报错原因大致有以下几点:

1。缺少必要组件导致的报错
比如:缺少SYS文件夹,缺少OEM文件夹,缺少ROM文件夹等
最常见的情况下,很多人在替换SYS和XIP部分时,把原来的SYS删除后忘记了放入新的SYS或者新的SYS没有放到模板的根目录,导致Buildos找不到可用的SYS,于是出现报错,见下图中,没有SYS文件夹部分,于是buildos就出现报错了。


2。新添加的OEM包错误或者不兼容导致的报错

我们在使用模板的时候,很多情况下我们都要集成自己喜欢的一些软件,但是模板里没有这些软件的OEM包,怎么办呢,最方便的方法是我们直接去网上找来,然后放入OEM文件夹里,部分OEM包因为有机型的限制,所以定制的时候容易出现Builos报错,还有部分OEM可能本身存在错误,也导致Buildos出现报错。

所以我们在添加OEM包的时候一定要注意:对于一次有很多OEM包要添加到模板的OEM文件夹的时候,最好采取谨慎的操作,一个个地添加,添加完后运行下Buildos.bat批处理,看看是否出现报错,然后再添加下一个,这样做能很好的避免添加后报错不知道错在哪个OEM包上,导致又要从头来一个个地排查,工作量很大。

对于报错的OEM包,推荐暂时弃用,或者另找别的版本的再试。



https://www.dospy.wang/static/image/hrline/line7.png

B。运行Buildos过程中出现的报错

具体表现在Buildos在生成文件的过程中跳出报错导致Buildos定制不能进行下去。

1。因存在重复文件导致的报错

ROM定制是不允许有两个完全同名的文件存在的,否则就会出现报错,如上图的提示,说明文件重复了。这是最常见的报错。
在buildos选择组件的时候,很多只能是“只选其一”的,比如拨号面板,同名的软件等,如果把只选其一的选了两个或以上,就会出现报错。不同版本的同名软件或者同功能软件选了两个,就出现报错,比如两个QCellCore都选了,就出现报错。

报错了,我们可用回头检查,重新检查buildos里是否选择了相同的软件或组件,如果有,请只留一个,其他的把前面的勾取消掉。
部分同名文件存在于其他的文件中,而并不是由同名软件造成的,记住重复的文件名,我们就可以去提示的文件夹中将其删除掉。

2。生成注册表过程中导致的报错

同名文件的报错不存在了,buildos就会开始生成注册表了

生成注册表过程中报错的情况比较多,并且从图中是不容易让你看出错在哪的,那么我们可以进入temp文件夹的log.txt中来查询了。

如果你对整个OEM的RGU有GUID码的备份,那我们一眼就可以看出这个RGU存在于哪个文件夹中,去对应的文件夹中找这个注册表项,可能注册表指定的文件路径中不是以双杠"\\"来表示的,也可能是RGU尾部缺少空行,仔细检查后再重新运行一次Buildos即可。

https://www.dospy.wang/static/image/hrline/line7.png


C。因定制过程出现问题导致ROM刷入机器后产生的错误

这是大部分玩ROM定制的机油最容易出现的问题,也是最难排解的问题,定制过程都能顺利通过,但是定制出的ROM刷入机器后出现各种各样不正常的情况,导致机器不能正常使用,大体可分为以下几种情况:

https://www.dospy.wang/static/image/hrline/line8.png

1。开机卡屏
ROM刷入后手机重启进不了系统设置界面,直接被卡在第一二三屏的界面不能通过,这就是我们常说的定屏现象.
卡屏现象分为两种:

a.卡在第一屏
上面我们已经学习了系统加载的顺序为IPL>SPL>OS,IPL是负责加载系统的底层应用程序,IPL加载过后,SPL将首先加载在系统中缓存的信息,比如拨号面板,字体包,输入法,图片等,而这两项加载过程如果出现不匹配或错误,将直接导致机器进入系统卡在第一屏.

IPL,主要负责加载系统底层的驱动和硬件的应用程序,驱动不是通用的,绝大部分都会有机型的限制,如果应用程序的驱动不匹配,或者不能被正常调用,IPL就不能实现正常的加载,开机就会直接进入三色屏或者直接卡在第一屏.所以,一定要注意的是系统驱动程序以及与其匹配的源文件,包括MUI文件,DLL文件等.

SPL在加载的顺序上是首先加载和底层驱动配套的应用程序以及需要缓存在系统中的信息文件,如果这些信息文件存在错误,比如字体包,输入法,在缓存过程中出错,就会直接导致卡在第一屏,至于错误出在哪,可能与系统底层的驱动不匹配,可能文件格式不正确,也可能是自带的DLL源文件不能识别,比如很多安装过手写输入法的机油就出现过装完重启被卡在第一屏的情况,总之,错误的原因是多方面的,建议大家使用已经测试过的OEM包,并非最新版本的OEM包就是最好的,大家要注意这个问题.

另外,需要说明一下的是,对于自行移植XIP和SYS的朋友,如果XIP移植不完整或者SYS移植过程中有部分文件未替换,一样会导致卡在第一屏,具体情况留到后面的移植部分中再详细说,所以卡第一屏的情况是比较复杂的,原因只能这么简略地谈谈,具体还在于大家在自己动手动脑地测试和排除才能找到实际原因所在。

b.卡在第二(三)屏

同理,卡在第二屏的情况指的是第二屏动画结束就定屏了,如同死机一般。这种情况一般是由于系统调用部分DLL出现错误导致的。SYS移植后注册表项可能和系统驱动里底层的DLL源文件名的定义或者路径的定义不一致,导致不能正常调用DLL,这种情况下需要手动更改DLL的路径指向或者更改DLL在注册表里所定义的文件名,让注册表能正常调用DLL,另外动画图片的尺寸不正确也可能导致卡在第二屏,所以推荐大家在自行移植的时候注意这个问题,特别是注意底层驱动对应的DLL文件名及路径。

卡在第三屏也是同理,在这里有两种情况,一是进入第三屏直接卡住,一种是跳出调整界面的文字提醒的时候卡住,屏幕触摸无反应,前面一种情况可能和Touch.dll这个文件有关,部分注册表的定义可能会被定义为Hwtouch.dll,文件名不能和注册表对应导致无法正常调用,后一种情况可能和触摸的Touch.dll有关,也可能和输入法的注册表定义正确与否有关,总之原因比较多,。一切在于靠自己的经验摸索着去解决。

https://www.dospy.wang/static/image/hrline/line8.png

2。程序或软件不能正常调用
表现在很多方面,这里只举几个例子来说明

a.该程序找不到相应的组件,或者其证书验证不能通过,或提示为一个非本设备可使用的组件
这种情况一般为相应的exe程序没有被定制进去,或者缺少相应的DLL组件导致程序不能正常打开或运行。这个大家可以去Windows下找找,看有无源程序或相应的模块存在,如果没有则是未定制进去,如果存在源程序,就可以尝试点击它打开,如果依然打不开则说明该软件OEM包可能并不支持该机型,使用在该设备上不能生效。

b.设备的“程序”或“设置”列表里未出现相关的快捷图标
在排除804MUI文件出错的情况下,“程序”里未出现快捷方式和定制ROM时对该软件的快捷方式的定义有关,在该软件的所指定的快捷方式不正确或者路径出错导致的,我们可以找到该软件OEM包里的initflashfiles.txt,打开它查看一下所定义的快捷方式是否指向了“程序”文件夹;而“设置”项里缺少快捷方式则直接与注册表项的定义有关,我们可以打开HKEY_LOCAL_Machine\ControlPanel\下,看看所定义的软件名称与HKEY_LOCAL_Machine\ControlPanel\MyCpl下的软件名称是否一致,然后再查看下是否设置了隐藏,该软件的Group项的键值是否在0到2的范围内以及是否设置了Hide为1的双字节值。

3。程序界面出现显示错误
一般出现在拨号面板,输入法,以及字体上面,部分软件界面会出现界面大小及界面字体不正常的现象。
拨号面板最容易出现的是显示错误,面板定制进去变成白板或者直接就打不开,这个原因也比较多,我们可以采取排除法来找原因

首先,我们一定要注意这个拨号面板是针对VGA还是QVGA的,因为显示屏的分辨率不同会导致面板成为白板或出现其他显示不正常的情况;在此,还是对VGA和QVGA进行下简单解释吧:

VGA(Video Graphics Array)全名视频图像阵列,是IBM在1987年提出的一个使用模拟信号的电脑显示标准,这个标准对于现今的个人电脑市场已经十分过时了。即便如此,VGA仍然是大多制造商所共同支持的一个低标准,个人电脑在加载自己的独特驱动程式之前,都必须支援VGA的标准,VGA在指定色版颜色时,一个颜色频道有6个bit,红、绿、蓝各有64种不同的变化,因此总共有 262,144 种颜色。在这其中的任何 256 种颜色可以被选为色版颜色,通常情况下,VGA的分辨率点阵为640×480,但是由于采用了Windows Mobile系统的缘故,致使VGA的显示被限制在65000色(16位色)之内。

QVGA (Quarter VGA)意指四分之一的VGA视频图像阵列,VGA的阵列为640×480,除以4后得到的阵列模式为320×240,QVGA的点阵数较VGA减少到了四分之一,换句话说,在同样尺寸的液晶屏上进行视频图像显示输自然就比不上VGA细腻、清晰和逼真了,但是,不管运用哪种显示分辨率都有其好处所在,VGA分辨率高,但是因为其点阵队列较密集些,所以在显示图像上需要加载的时间也会较QVGA长很多,对CPU的处理频率也要求更高,在没有配备独立显卡的情况下,同样主频的CPU在同样尺寸的VGA和QVGA屏上处理图像显示的时候,QVGA屏在收到指令后显示图像的速度较VGA屏快得多,这就是为什么HTC在使用德州仪器201主频的CPU上只使用QVGA屏的原因,如果使用VGA的话,打开图片或者图像文件的过程将会成为漫长的等待;而使用VGA屏的话,要想图像和图片显示速度提高,只能通过提高CPU的主频,或者配备独立的硬件显卡,否则,就会如同“小牛拉大车”,所以,要华丽和眩目是需要硬件配备付出代价的,而这些代价的付出将直接连带着其他配件性能的相应提高,比如更强的电源管理能力和更大容量的电池续航能力。

总而言之,使用Q屏最大的好处就是在较低的硬件配备上可以获得同样快速的操作体验,缺点就是屏幕色彩不够华丽和丰富。

解释完这个之后,我们应该明白了一个道理,如果把V屏使用的拨号面板应用到Q屏之上,就会出现显示不正常,因为它们的分辨率是完全不同的,所以大家一定要看清楚拨号面到底是Q屏之下的还是V屏之下的。

拨号面板出现不能正常显示的另外一个重要原因还和其搭配的DLL有关,众所周知,拨号面板的“拨号”功能是通过调用DLL来实现的,如果DLL缺失或者DLL指向错误,拨号面板一样不能正常显示,因为缺乏必要的DLL的显示支持,所以我们可以经常看到部分拨号面是需要连带集成相应的智能拨号插件才能正常显示的,所以大家在集成拨号面板的时候也要注意这个问题。

下面说说字体包
字体包是系统调用的显示字体,有人喜欢宋体,有人喜欢雅黑,也有人使用别的字体,这里说一下,Q屏之下宋体是最清晰的字体,因为它和屏幕的显示模式是相同的,同样使用了矢量点阵的模式在显示,所以宋体是不需要开启任何辅助就能直接显示的。而别的字体比如雅黑,这是微软根据其英文字母在PC环境之下的显示而创建的,对于汉字来说,显示很模糊,纵然开启了所谓的效果渲染ClearType,一样得不到改善,因为这种渲染同样是基于英文字母的,很遗憾,微软没有为Windows Mobile系统研发专门的汉字效果渲染技术。

闲话到此,我们来看看字体会出现哪些常见问题

a。汉字字体显示为“口口”等方框模式
这种情况应该是大家经常碰到的情况;大家知道,系统要调用一种字体是有几个前提条件的:
a.系统里存在该字体文件,一般在 Windows\ 下,也可能可以放在 Windows\Font\下
b.该字体文件的路径是正确的,就是说系统能根据你指定的路径找到它,在你指定的路径之下找不到当然就无法调用了
c.字体文件名是正确的,比如“msyh.ttf",不然找到了该路径找不到这个文件名一样调用不了
d.字体文件的字体名称是正确的,比如"微软雅黑"
e.字体的映射是正确的,下面我们来看看映射:
以“微软雅黑”为例,字体映射就是把系统原来的汉字显示部分的字体或者全部字体改变为“微软雅黑”,比如你安装的软件原本是宋体的,比如系统里的字母通常为Tahoma字体,你需要把这些字体全部改为调用“微软雅黑”来显示,如果你不定义原来软件里宋体为调用“微软雅黑”,那么系统就会寻找宋体来显示,但此时你没有集成宋体,那该软件里的字体就会变成“口口”了。

字体映射一般是字体显示为“口口”的最大病因,在集成字体之前,请打开你的字体OEM包里的RGU注册表,请注意这项下面的内容:

在这项之下我们会看到有很多字体,比如"细明体"、 "新宋体"、"Times New Roman"等,这些就是系统里可能出现的字体名,需要把这些字体全部换成调用你现在的新字体比如“微软雅黑”,在指定路径的时候请一定记得路径在RGU里是以双斜杠“\\”来表示的,集成到手机注册表里才会变成单斜杠“\“,我们可以这样来表示:"Times New Roman"="\\Windows\\msyh.ttf,微软雅黑",意思是说,如果系统要调用"Times New Roman"这个字体的时候,它就会指向在 \Windows\这个路径之下的字体名为“微软雅黑”的“msyh.ttf”的这个字体文件来调用,如果你不这样指定,那么系统在调用"Times New Roman"这个字体的时候会自动寻找这个字体的文件来调用,如果找不到,这部分的字体就会出现“口口”。
在通常的情况下,软件OEM包里的字体会默认为 “Tahoma",Tahoma是系统里默认用来显示英文字母的字体,如果显示在汉字上,就会出现大小不一甚至显示模糊线条发虚的情况,我们可以看到很多字体是被指定默认为调用“Tahoam”的,比如 :
"细明体"="\\windows\\tahoma.ttf,Tahoma"
"新细明体"="\\windows\\tahoma.ttf,Tahoma"
"新宋体"="\\windows\\tahoma.ttf,Tahoma"
那么在这种情况下,我们只需要重新定义一下"Tahoma"这个字体就OK了,比如: "Tahoma"="\\Windows\\msyh.ttf,微软雅黑",那么在系统默认指定调用 "细明体"、 "新细明体"、 "新宋体"这些字体的时候,它会指向“Tahoma”这个字体,而“Tahoma”这个字体又指向了msyh.ttf,微软雅黑",所以,实质上,中间转了一道弯,系统还是在调用“微软雅黑”这个字体。

另外,我们还要注意这个注册表:
"RichEditHostFontFace"="微软雅黑"
这个注册表是定义系统里默认的字体的,大家一般喜欢把这个默认字体定义为你要装的新字体名比如“微软雅黑”,这样定义道理上来说是没错的,但是,我们在调节字体大小的时候,实质上是以“Tahoma"这个字体名来调节默认值的,如果指定系统字体为“微软雅黑”,那么部分字体的调节是不能生效的,换句话说,系统里会出现字体大小不一的现象,比如前两天有机油问到我关于2DFLO“联系人"里的字体很小,几乎缩到一起去了,还有部分软件界面里的字体看不清楚怎么调都调不大,所以请大家在定义这个默认字体键值的时候,最好定义为:"RichEditHostFontFace"="Tahoma"这样,那么系统里的字体就不会出现大小不一模糊不清的情况了,并且如果你想改变字体的大小,直接可以去下面这个注册表路径里去修改就OK了:

具体还有不清楚的请直接去看我的:三步教你换字体 http://www.52dopod.net/viewthread.php?tid=120213&highlight= ,这个里有详细的关于字体映射和字体大小调节的说明。

b。字体显示为乱码
显示不是“口口”,出现诸如“-%&*#”这类的东东,甚至显示为日文符号或者不能显示是空白,这种情况是由于所定义的字体改变字型所导致的,当然在拨号面板里出现的例外(这是拨号面板的问题),一般出现在部分软件的符号里,这种情况的原因是因为新装的字体包在定义字体调用的时候没注意到符号的调用,本人曾经碰到过安装雅黑粗体的一位机油有过这种情况。

部分字体包不能自行加大字体和加粗字体,否则符号和部分字体将不能被识别,比如擅自改动了以下项:

"Ht"=dword:00000384
"WT"=dword:00000190

"Ht"=dword:00000384
"WT"=dword:00000190

"Ht"=dword:00000384
"WT"=dword:00000190

"Ht"=dword:00000384
"WT"=dword:00000190

以上项是改动字型的高度和宽度的,汉字因为是笔画点阵结构,所以改动会生效,但是符号和字母如果在调用相同的字体的时候就会出现显示为乱码,这是因为改动后在点阵上不能支持而导致的,所以请大家注意这个问题,擅自改动有可能会导致不能正常显示符号和字母。如果硬要改动不可,那么请将字母和符号映射到其他的字体上,字母和符号的在注册表里的具体映射项为:
"Arial"="\\Windows\\Tahoma.ttf,Tahoma"
"MS Sans Serif"="\\Windows\\Tahoma.ttf,Tahoam"
"Courier New"="\\Windows\\Tahoma.ttf,Tahoma"
"Nina"="\\Windows\\Tahoma.ttf,Tahoma"
或者直接在下进行定义,将键值直接定义为调用其它字号的字体,这里就不罗嗦了。

c。字体越界
貌似很多机油在碰到这种情况之下只能对字体进行弃用,最容易越界的几个地方在开始-设置:"时钟"的"闹钟"界面 、"关于"、"菜单"、"屏幕"、"电源"里,很容易出现"剃头"(字体头部被削掉了)和"切尾"(字体脚部被切掉了)的现象。

所有的越界几乎都和字号变大有关。PPC系统字体的字号默认是9号字,所以对话框就专门为9号字体为标准订做的,如果字体字号改得过大(一般来说超过了13号),就会超出对话框的限制,从而出现上面的"剃头""切尾"的情况。

所以我们在改字体大小的时候一定要注意,其他地方的字体大小可以改,但是涉及到对话框里的字体项请不要改大,对话框里的字体最大的显示限度是13号,如果改为14号,一般情况下(未修改对话框大小的情况下)就必定会越界,下面我们来看看系统GDI字体里的字号定义:


"SC_Song:14"="Tahoma:14"
"SC_Song:10"="Tahoma:14"
"SC_Song:12"="Tahoma:14"
"SC_Song:18"="Tahoma:14"
"SC_Song:16"="Tahoma:14"
"SC_Song:15"="Tahoma:14"
"MS Shell Dlg:8"="Tahoma:14"
"System:14"="Tahoma:14"
"System:8"="Tahoma:14"
"Tahoma:16"="Tahoma:-15"
"Tahoma:-16"="Tahoma:-15"
"Tahoma:14"="Tahoma:14"
"MS Sans Serif:-13"="Tahoma:14"
"Arial:-14"="Tahoma:14"
"version"=dword:0009000c
"Tahoma:17"="Tahoma:14"
"Tahoma:18"="Tahoma:14"
"Tahoma:20"="Tahoma:14"
"Tahoma:-11"="Tahoma:13"
"Tahoma:-10"="Tahoma:13"
"Tahoma:-9"="Tahoma:14"

注意上面的键值:"Tahoma:-11"="Tahoma:13","Tahoma:-10"="Tahoma:13",这两项是直接关联到对话框里的字号的,如果你强行改为14,或者在13前面加上一个“-”号,那么字体就会出现越界,甚至导致对话框也跟着越界(对话框有部分跑出屏幕外面去了)。


其他部分的字体可以随便改,但是一样不要改得超过16,否则一样会越界,如果想改大系统的字体,你可以添加"Tahoma:-12"="Tahoma:13",请注意别在13前面添加"-"号,虽然你想让英文和汉字的字号跟着一起变的心理是好的,但是要说的是雅黑字体之下的英文会导致你的对话框极度越界(几乎一半跑到屏幕外面去了)。

有个最头疼的问题是,如果将"Tahoma:-12"="Tahoma:13"加入,"时钟"里的"闹钟"界面的"星期六"你很可能就看不到了,或者你最多只能看到是" 星期六"的"六"字的一半,另一半越界了,有些问题就是这么恼人,就如同前些天至胜兄(hmh88)的10级背光驱动一样,换个新核心定制进去几乎一半跑到屏幕外面去了。

遇到这种情况要么直接把字体改小点或弃用显示不太正常的软件,要么直接手动修改对话框,当然前提是你只有那么很少的两处越界,当然你不怕麻烦也可以全部改一遍。


对话框一般存在于exe文件或MUI文件之中,所以我们需要下载能编辑这种类型文件的软件,在这里我们可以使用ResHacker 或者eXeScope等

页: [1]
查看完整版本: 【教程】 WM ROM 刷机包 DIY 教程( 四 )问题解决方法