解决Windows Mobile 唤醒屏不亮的问题之总结
2010-10-13 02:10:00 来源:本站整理解决唤醒屏不亮的问题之总结
前几天报来一个BUG:有时唤醒后屏不亮,USB连接已经在起作用,但连不上ActiveSync。初步判断是哪个驱动在进入D0状态时死掉了,从而引起PM无法继续进行下面的动作。所以写了一个程序去查是哪些驱动还在D4状态,果然有一些驱动依然是D4状态。但无法确定是哪个驱动的问题。所以在PM.dll中打印调试信息。
首选将PM的代码都拿过来加上信息,将其链接成动态链接库。搜索WPC下的PM.dll文件,将其覆盖成新的文件,makeimg,启动后发现新的文件没有起作用。用imgexp工具查看flash.dio文件中的PM文件时间还是老的。觉得makeimg不起作用,所以执行sysgen。花了两小时执行完sysgen以后发现flash.dio文件中的PM文件还是老的。同事告知PM属于msxipkernel.cab.pkg这个cab包,将WPCprebuilt目录下的这个文件删除,将pm.dll文件拷到WPC目录,makeimg时系统就会自动生成这个包,而且使用我们新的文件。但这样做之后发现系统在WPC目录下生成了一个msxipkernel_packagefiles目录,其下有msxipkernel包下的所有文件,但文件时间不对,是新生成的,大小与原来的,及我编译的大小都不一样,所以没有下载试结果。后来老大在他的机器上如法泡制了一下,下载FLASH.BIN以后发现PM有ABORT产生,遂认为还是PM文件有问题,不是我编译的好个文件。查看他的电脑,也是刚生成了这些文件,于是又帮我编译了一个DEBUG版本的PM文件,经测试时可以正常启动的。
所以判断是我自己编译的PM文件本身的问题,查我的代码发现当时着急在打印信息时没有判断要输出的变量是否是空指针。以后就进展的很顺利,加了三次信息以后就很精确地定位到是PM调用ShowStartupWindow这个函数没有返回,但找不到关于这个函数功能的描述。猜测是哪个程序在待机唤醒时有动作而引起的。经了解,这个过程中只有锁屏程序有动作,将锁屏功能去掉以后即解决这个问题。
总结:
因我总想搞清楚为什么编译出的PM文件是系统刚生成的,而多花了一天多的时间。在这个问题上不应该纠缠,当时如果去试一下flash.bin是否能正常启动就行。平常老在告诉兄弟们要多调一调,多试试,但自己有时也会钻牛角尖,会急躁,而影响解决问题的速度。
更多精彩
赞助商链接