Linux 内核接口

USB 端点被绑在接口中. USB 接口只处理一类 USB 逻辑连接, 例如一个鼠标, 一个键盘, 或者一个音频流. 一些 USB 设备有多个接口, 例如一个 USB 扬声器可能有 2 个接口: 一个 USB 键盘给按钮和一个 USB 音频流. 因为一个 USB 接口表示基本的功能, 每个 USB 驱动控制一个接口; 因此, 对扬声器的例子, Linux 需要 2 个不同的驱动给一个硬 件设备.

USB 接口可能有预备的设置, 是对接口参数的不同选择. 接口的初始化的状态是第一个设 置, 0 号. 预备的设置可用来以不同方式控制单独的端点, 例如来保留不同量的 USB 带 宽给设备. 每个有同步端点的设备使用预备设备给同一个接口.

USB 接口在内核中使用 struct usb_interface 结构来描述. 这个结构是 USB 核传递给 USB 驱动的并且是 USB 驱动接下来负责控制的. 这个结构中的重要成员是:

struct usb_host_interface *altsetting

一个包含所有预备设置的接口结构的数组, 可被挑选给这个接口. 每个 struct usb_host_interface 包含一套端点配置, 如同由 struct usb_host_endpoint 结 构所定义的. 注意这些接口结构没有特别的顺序.

unsigned num_altsetting

由 altsetting 指针指向的预备设置的数目. struct usb_host_interface *cur_altsetting

指向数组 altsetting 的一个指针, 表示这个接口当前的激活的设置. int minor

如果绑定到这个接口的 USB 驱动使用 USB 主编号, 这个变量包含由 USB 核心安 排给接口的次编号. 这只在一次成功地调用 usb_register_dev (本章稍后描述)之 后才有效.

在 struct usb_interface 结构中有其他成员, 但是 USB 驱动不需要知道它们.

原文地址:https://www.cnblogs.com/fanweisheng/p/11147254.html