自定义USB VID / PID - 使Windows 7& 8自动选择usbser.sys驱动

时间:2017-01-09 05:41:02

标签: usb usbserial cdc usb-descriptor

我正在使用STM32F070微控制器为USB设备开发固件。我使用STM32CubeMX生成了一个裸机(无操作系统)代码库,将设备设置为USB CDC(通信设备类),以便Windows自动将其检测为VCP(虚拟COM端口) 7,8和10.驱动程序详细信息显示它正在使用Windows usbser.sys驱动程序。

USB CDC configuration in STM32CubeMX

USB Serial Device detected in Windows Device Manager

当我更改USB供应商ID(VID)或产品ID(PID)或制造商字符串时,它仍然可以被Windows 10设备管理器快速检测为USB串行设备,但不能被Windows 7或8检测到.Windows 7和8花了很长时间在Windows Update上搜索驱动程序,然后无法找到它。

如何修改设备固件/描述符以使Windows 7和8主机能够在设备具有USB VID,PID和制造商字符串的供应商特定值时自动为设备安装usbser.sys驱动程序?

2 个答案:

答案 0 :(得分:4)

Windows 10附带一个名为usbser.inf的新驱动程序,它将匹配符合USB CDC ACM规范的设备,并为其加载usbser.sys驱动程序。

要让您的USB CDC ACM设备在旧版Windows上运行,您需要自己提供一个INF文件,告诉Windows在看到带有您的供应商ID和产品ID的USB设备时加载usbser.sys。对于Windows 7,Vista和XP,只需编写INF文件并将其分发给客户即可。对于Windows 8及更高版本,您需要购买代码签名证书,然后签署INF文件(或查看zadig和libwdi等软件实用程序,以便绕过签名检查)。

请注意,签名与WHQL不同。获得签名证书后,您可以自行签署驱动程序,无需等待时间或Microsoft的任何批准。

以下是使用usbser.sys的INF文件示例:

https://github.com/pololu/a-star/blob/master/drivers/a-star.inf

我在本文中写了很多关于如何签署驱动程序包的文章:

http://www.davidegrayson.com/signing/

答案 1 :(得分:1)

问题是.inf文件。在win 10中有一个新的(usbser.inf)在win 7和8中自动加载驱动程序usbser.sys你必须编写自己的.inf文件,将你的PID和VID链接到usbser.sys驱动程序,请参阅https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspxhttps://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx

  

在Windows 8.1及早期版本的操作系统Usbser.sys中   连接USB到串行设备时不会自动加载   一台电脑。要加载驱动程序,您需要编写一个INF   引用调制解调器INF(mdmcpq.inf)并包括[Install]和   [需要]部分。实例化这些部分是必需的   服务,复制收件箱二进制文件和注册设备接口   应用程序需要查找设备并与之通信的GUID。那   INF将“Usbser”指定为设备堆栈中的下层过滤器驱动程序。

来源:https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspx

Do I need to write my own host side USB driver for a CDC device中, https://community.nxp.com/thread/301439androidannotations issues page是win 7和8的示例.inf文件。