Freescale opensda windows 驱动安装出错排查法
遇到驱动安装出错(失败)该怎么办呢? 别急,先确认其他人有没有问题,如果不想问的话就在网上搜索一下,一般问题是普遍的话很容易搜到.
假设没有搜到,那就说明可能是你的系统有问题.
可能你做过优化导致了这个问题.
OK,看实例学习排错方法.
1. 问题描述
安装飞思卡尔(freescale)的kl25z的demo板子(FRDM-KL25Z), 在连接demo板时已经安装了opensda的驱动.
插上板子后,系统自动查找驱动并安装, 最后剩下一个驱动没有安装好,就是”PEMicro/Freescale – CDC serial Port”,
根据飞思卡尔的文档这个CDC serial Port的驱动文件在这个板子所模拟出的U盘了,跳到设备管理器,找到这个未安装的硬件(其他设备-> PEMicro/Freescale – CDC serial Port),右键它并选择更新驱动程序软件->浏览计算机以查找驱动程序软件->选择板子所模拟出来的盘FRDM-KL25Z->下一步.
以下是FRDM-KL25Z盘,其中SERCDC89.CAT和SERCDC89.INF是驱动文件
很遗憾,驱动安装出错了,显示错误信息是: “Windows 已找到设备的驱动程序软件,但在试图安装它时遇到错误,…系统找不到指定的文件.”
这个问题在公司的windows Xp和windows 7的32位版本上正常,在家里的windows 7的64位版本上出错.
2. 解决方法
查看log,驱动安装的log在%windir%infSETUPAPI.DEV.LOG和%windir%infSETUPAPI.APP.LOG.
如何没有产生%windir%infSETUPAPI.DEV.LOG,可以查看注册表,删除这些设置安装log的键值.
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionSetupLogLevel
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionSetupLogMask
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionSetupLogPath
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionSetupAppLogLevels
参考:
http://msdn.microsoft.com/en-us/library/windows/hardware/ff550882(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/ff550887(v=vs.85).aspx
打开%windir%infSETUPAPI.DEV.LOG,在最后面发现以下的文字.
source media:
Description - [windows cd]
SourcePath - [C:WindowsSystem32DriverStoreFileRepositorymdmcpq.inf_amd64_neutral_9f203c20b6f0dabd]
SourceFile - [usbser.sys]
Flags - 0×00000000
{SPFQNOTIFY_NEEDMEDIA}
{SPFILENOTIFY_NEEDMEDIA}
{SPFILENOTIFY_NEEDMEDIA - exit(0×00000000)}
{SPFQNOTIFY_NEEDMEDIA - returned 0×00000000}
source media: SPFQOPERATION_ABORT.
Error 2: The system cannot find the file specified.
{_commit_copy_subqueue exit(0×00000002)}
FileQueueCommit aborting!
可以看出因为usbser.sys文件找不到,所以abort停止了,与驱动安装出错的提示信息相似,
usbser.sys文件在: C:WindowsSystem32DriverStoreFileRepositorymdmcpq.inf_amd64_neutral_9f203c20b6f0dabd,
查找发现没有这个目录,怪不得驱动安装不成功了.
总结一下: 这个板子的驱动引用了系统驱动库里的一个驱动,但我的电脑的驱动库里没有要引用的驱动mdmcpq.inf,所以出错了.为什么没有呢,因为我用win7优化(减肥/瘦身)大师,或根据网上的瘦身技巧等把驱动库里很多驱动删除了,因为这些驱动用不到.没想到现在用到了.
解决方法就是恢复那个驱动文件夹.
如果暂时找不到同事或光盘复制这个文件夹,那可以看看那个usbser.sys是否已经安装上了, 如果找到了c:WindowsSystem32driversusbser.sys, 说明以前已经安装过了这个驱动文件,那么就没必要去复制那个文件了,只要引用一下就可以了(当然直接从他人电脑上复制usbser.sys到c:WindowsSystem32drivers也是可以的).
打开驱动文件SERCDC89.INF,找到复制的那行.
[DriverInstall.NTamd64] ;这是为WIN7 64位的配置
include=mdmcpq.inf
CopyFiles=DriverCopyFiles.NTamd64 ; 这就是要复制DriverCopyFiles.NTamd64,从下面可以看出DriverCopyFiles.NTamd64就是usbser.sys,使用分号注释掉这行就可以不用复制了
AddReg=DriverInstall.NTamd64.AddReg
[DriverCopyFiles.NTamd64]
%DRIVERFILENAME%.sys,,,0×20
再重新选择这个来安装,驱动就安装上了
*****************************************************************************
win8.1 x64系统,按此方法,还是不行,提示文件的哈希值不对或已被破坏。
- hgyxbll
看驱动安装log里描述的详细信息,具体是哪个路径下的文件有问题,然后去其他机器拿个相同的文件比较一下.
windows的文件一般会有记录哈希值的.所以不能随便随便拿一个文件.
要拿同样目录下的文件.(可能目录名中带有哈希值的一部分)