我正在使用STM32F070微控制器为USB设备开发固件。我使用STM32CubeMX生成了一个裸机(无操作系统)代码库,将设备设置为USB CDC(通信设备类),以便Windows自动将其检测为VCP(虚拟COM端口) 7,8和10.驱动程序详细信息显示它正在使用Windows usbser.sys
驱动程序。
当我更改USB供应商ID(VID)或产品ID(PID)或制造商字符串时,它仍然可以被Windows 10设备管理器快速检测为USB串行设备,但不能被Windows 7或8检测到.Windows 7和8花了很长时间在Windows Update上搜索驱动程序,然后无法找到它。
如何修改设备固件/描述符以使Windows 7和8主机能够在设备具有USB VID,PID和制造商字符串的供应商特定值时自动为设备安装usbser.sys
驱动程序?
答案 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
我在本文中写了很多关于如何签署驱动程序包的文章:
答案 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.aspx和https://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/301439和 androidannotations issues page是win 7和8的示例.inf文件。