【问题标题】:Custom USB VID/PID - make Windows 7 & 8 automatically choose usbser.sys driver自定义 USB VID/PID - 使 Windows 7 和 8 自动选择 usbser.sys 驱动程序
【发布时间】:2017-01-09 05:41:01
【问题描述】:

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

当我更改 USB 供应商 ID (VID) 或产品 ID (PID) 或制造商字符串时,Windows 10 设备管理器仍会快速将其检测为 USB 串行设备,但 Windows 7 或 8 不会。Windows 7 和8 花了很长时间在 Windows 更新中搜索驱动程序,然后找不到。

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

【问题讨论】:

    标签: usb usbserial cdc usb-descriptor


    【解决方案1】:

    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/

    【讨论】:

    • 非常感谢您在过去几个月里就 USB 问题向我提供的多个有用的回答。 :)
    • 我只想指出 a-star.inf 文件确实对我有用。我所要做的就是更改 VID/PID 值。非常感谢!
    【解决方案2】:

    问题在于.inf 文件。在 win 10 中,有一个新的 (usbser.inf) 可以在 win 7 和 8 中自动加载驱动程序 usbser.sys,您必须编写自己的 .inf 文件,将您的 PID 和 VID 链接到 usbser.sys 驱动程序,请参阅https://msdn.microsoft.com/de-de/library/windows/hardware/ff538820%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

    https://msdn.microsoft.com/de-de/library/windows/hardware/dn707976%28v=vs.85%29.aspxDo I need to write my own host side USB driver for a CDC devicehttps://community.nxp.com/thread/301439 是 win 7 和 8 的示例 .inf 文件。

    【讨论】:

    • 我是否理解正确,在 Win7 和 8 中,.inf 文件是根据 {VID、PID、MfrString} 选择的,所以我所要求的是不可能的?除非我们获得设备 WHQL 认证并将其.inf 添加到 Windows 更新中 - 否则 Windows 会在枚举设备时自动安装驱动程序,对吗?或者,我们是否可以在设备中使用 Microsoft OS 描述符而不是 WHQL,让它向主机显示 WCID,以便主机知道选择 usbser.sys 作为驱动程序,而根本不需要 .inf
    • 您需要 .inf 文件 (WHQL) 或 MS OS 描述符。如果是 MS OS 描述符,则不需要 .inf (microchip.com/forums/m707870.aspx)。因此,使用 MS OS 描述符,无需自定义 .inf
    • INF 文件与 WHQL 不同。您可以在 Windows 7 或更低版本上使用未签名的 INF 文件,甚至在 Windows 8 及更高版本上,签名过程是一件简单的事情,您可以在购买代码签名证书后自己完成,不需要 Microsoft 的批准。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多