USBD 协议驱动程序
用途
支持 USB 系统驱动程序 (USBD) 协议。
语法
#include <sys/usb.h>
#include <sys/usbdi.h>
#include <sys/hubClass.h>
#include <sys/hidClass.h>描述
UUSBD 协议驱动程序是主机控制器与客户机驱动程序之间的层。 /dev/usb0 特殊文件提供了接口,以允许主机控制器与客户机驱动程序之间进行通信。 此驱动程序负责与相应的主机控制器进行设备通信。 设备连接,断开连接和重新连接是在此级别执行的。 此设备没有父代,并且该设备的 CuDv 条目由从 ConfigRules 字段调用的 /usr/lib/methods/startusb 脚本创建。
/usr/lib/drivers/usb/usbd 驱动程序实现 USB 协议, /usr/lib/methods/cfgusb 文件是 usbd 文件的配置方法。 USB 协议驱动程序更新特定于每个单独 USB 设备的速度 ODM 属性。 在 AIX® 配置期间枚举 USB 设备时,将更新速度。
与设备相关的子例程
UBD 协议驱动程序仅支持 open, close和 ioctl 子例程。 不支持 read 和 write 子例程。
打开和关闭子例程
open 子例程将作为参数传入 open 系统调用的特定设备号与内部适配器设备结构相关联。 如果它找到适配器结构,那么它将验证相应的适配器设备是否已配置,并将状态设置为已打开。 否则,子例程将返回错误。
ioctl 子例程
针对 USBD 协议驱动程序的 ioctl 操作公开给内核和用户环境。
UUSBD ioctl 操作
以下 USBD ioctl 操作公开给用于打开特定 USB 逻辑设备的内核线程:
- USBD_OPEN_DEVICE
- USBD_OPEN_DEVICE_EXT
以下 USBD ioctl 操作向用户线程公开:
| 操作 | 描述 |
|---|---|
| USBD_REGISTER_MULTI_HC | 向 USB 系统驱动程序注册所有 USB 主机控制器。 |
| USBD_REGISTER_SINGLE_HC | 仅向 USB 系统驱动程序注册单个 USB 主机控制器。 |
| USBD_ENUMERATE_DEVICE | 获取已连接到主机控制器的 USB 逻辑设备 (不包括集线器) 的列表。 |
| USBD_ENUMERATE_ALL | 获取已连接至主机控制器的所有 USB 逻辑设备的列表。 |
| USBD_ENUMERATE_CFG | 获取已连接到主机控制器的 USB 逻辑设备的列表以及客户机设备选择信息。 |
| USBD_GET_DESCRIPTORS | 获取逻辑设备的标准 USB 描述符。 |
| USBD_CFG_CLIENT_UPDATE | 更新客户机连接信息。 |
USBD 错误情况摘要
适配器设备驱动程序的可能的 错误号 值如下所示:
| 值 | 描述 |
|---|---|
| EACCES | 当适配器具有一个或多个正在使用的设备时,尝试运行 openx 子例程。 |
| EEXIST | 设备已配置完毕。 |
| EINVAL | 参数无效,或者设备未打开。 |
| EIO |
|
| ENOCONNECT | 发生 USB 总线故障。 |
| ENODEV | 无法选择目标设备或目标设备未响应。 |
| ENOMEM | 由于内存量不足,因此无法完成该命令。 |
| ENXIO | 此适配器不支持所请求的 ioctl 操作。 |
| EPERM | 调用者不具有必需的权限。 |