月份:2020年11月


使用微软系统描述符1.0制作免驱动自定义USB设备


本文介绍如何使用微软的操作系统描述符来实现自定义USB设备在Windows系统上的免驱动使用。

前言

在Linux上开发USB设备是不需要特别的驱动的,Linux内核的USB驱动会将USB设备的基本操作都暴露到应用层,由应用层来完成实际的业务逻辑。libusb就是这样的一种通用USB设备访问程序。

为了在Windows上也实现这样的效果,libusb最初提供了Windows上通用的内核态驱动程序,将基本访问接口暴露到应用层,由应用层来实现访问逻辑。随着发展,微软也提供了这样的驱动程序,那就是WinUSB通用驱动程序。

为了给设备安装WinUSB驱动,还需要使用包含设备VID和PID的inf文件,以及签名的cat文件(ST-Link就是使用WinUSB作为驱动的,它的驱动就是一个典型的WinUSB设备驱动)。

对于使用WinUSB驱动的设备来说,这些驱动文件做了两件事,1. 告诉系统使用这个设备使用了WinUSB驱动,2. 告诉系统我这个设备接口的GUID是什么,应用程序就能通过GUID来操作设备。

既然WinUSB的驱动程序只做了这两件事,能不能让这两件事更加自动化一些,这样不作编写驱动程序也可以安装。答案是肯定的,微软的操作系统描述符就是处理这个事情的。

Read More »


使用微软系统描述符2.0制作免驱动自定义USB设备


前言

在《使用微软系统描述符1.0制作免驱动自定义USB设备》一文中,介绍了如何使用1.0版本的系统描述符来制作免驱动设备,这里将介绍如何使用2.0版本的系统描述符来制作免驱动设备。无论是1.0还是2.0,都是为了让系统给设备安装WinUSB驱动,并且给接口指定GUID。2.0版本的系统描述符处理流程更加精简一些。2.0不再需要OS字符串描述符,而是使用了USB标准的BOS描述符来获取设备的vendor code。然后再通过一个叫做描述符集的描述符一次性返回所有接口所有配置的compat ID和属性。

Read More »