《WINUSB设备的inf文档的编写》
目录
简介... 1
1. 获取inf文件和cat文件模板... 1
1.1 创建WinUSB应用程序... 1
1.2 获取inf文件和cat文件... 3
2. 修改inf文件以安装WINUSB驱动... 3
3. 通过inf文件安装WINUSB驱动... 4
4. 编写inf文件可能遇到的问题... 4
微软实际上是提供了一个inf文件和cat文件的模板,可以按照本文的步骤获取inf文件和cat文件,并且修改它们使它们为自己的设备装上WINUSB驱动。
这一部分是从MSDN中截取下来的(网址为:https://msdn.microsoft.com/zh-cn/library/windows/hardware/dn376872(v=vs.85).aspx),主要是为了方便读者离线操作。
1、 打开 MicrosoftVisual Studio。在“文件”菜单上,选择“新建 > 项目”。会打开“新建目”对话框,如以下屏幕截图所示。
2、 在“新建项目”对话框的左侧窗格中,找到并选择“USB”。
3、 在中心窗格中,选择“WinUSB应用程序”。
4、 在“名称”字段中,如果愿意,更改项目名称。在本主题中,我们将使用默认名称。
5、 在“位置”字段中,输入要在其中创建新项目的目录。
6、 选中“创建解决方案的目录”。单击“确定”。
Visual Studio 创建了两个项目和一个解决方案。你可以看到该解决方案、两个项目以及属于“解决方案资源管理器”中各个项目的文件,如以下屏幕截图所示。(如果“解决方案资源管理器”窗口不可见,则从“视图”菜单中选择“解决方案资源管理器”。)解决方案包含名为 USB Application1 的 C++ 应用程序项目和名为 USB Application1 Package 的驱动程序包项目。如果要查看应用程序源代码,则可以打开出现在“源文件”下的任意文件。
USB Application1Package 项目包含一个 INF 文件,用于安装 Microsoft 提供的 Winusb.sys 驱动程序作为设备驱动程序。
7、 在“解决方案资源管理器”窗口中,右键单击“解决方案“USB Application1”(2 个项目)”,然后选择“配置管理器”。为应用程序项目和包项目选择配置和平台。在本练习中,我们选择 Win7 Debug 和 x64(若是win8.1系统则为:Win8.1 Debug),如以下屏幕截图所示。
在VS中按F7(生成解决方案),然后会在你存放该项目的目录下生成一个x64\Win7Debug\USB Application1 Package的文件夹,里面就有我们需要的inf和cat文件。如图所示:
1、 打开inf文件,找到以下行:
%DeviceName% =USB_Install, USB\VID_vvvv&PID_pppp
将USB\VID_vvvv&PID_pppp替换为你设备的硬件ID,从设备管理器获取硬件ID。在设备管理器中,查看设备属性。在“详细信息”选项卡中,查看“硬件 ID”属性值。
2、 由https://msdn.microsoft.com/zh-cn/subscriptions/downloads/hh450799(v=vs.85).aspx所说,在Win7中应该在最后加上以下行:
;----------添加注册表部分 ----------
[USBDeviceClassReg]
HKR,,,,"UniversalSerial Bus devices"
HKR,,NoInstallClass,,1
HKR,,SilentInstall,,1
HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"
3、 在inf中加上以下行:
[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install
[WinUSB_Install]
KmdfLibraryVersion=1.9
1、 打开设备管理器,右键你的设备,选择更新驱动程序软件。
2、 选择“浏览计算机以查找驱动程序软件”
3、 选择“从计算机的设备驱动程序列表中选择”
4、 选择从磁盘安装,如下图所示:
5、 点击“浏览”,进入你存放inf文件的文件夹选择inf文件,最后点击确定即可。
如果不能正确安装驱动,可以在C:\Windows\setupact.log查看驱动安装时的错误。这里列举两个问题:
1、出现error locating section [USB_Install.Wdf] in infC:\Windows\INF\oem29.inf – status(E0000101)
解决方法:根据字面意思,是在定义[USB_Install.Wdf]时出现了错误。于是我打开编写的inf文件搜索 [USB_Install.Wdf],发现并没有这个节,于是我就在网上查找了这个节如何写,将其加入了自己的inf文件:
[USB_Install.Wdf]
KmdfService=WINUSB, WinUsb_Install
2、出现ReadComponents error: SetupGetStringField for KMDF version failed:status(E0000102)
解决方法:通过字面意思不难理解是读取KMDF版本错误。于是我在inf文件中加入了这一句:
[WinUSB_Install]
KmdfLibraryVersion=1.9