linux --- HID 协议
HID 主机

从上图 linux menuconfig 可知,HID物理通信接口支持 USB 和 I2C
HID 子系统:负责与硬件通信,解析 HID 协议格式的数据,并将原始数据转换为内核可理解的输入事件
INPUT 子系统:HID 设备在解析完成后,会通过 Input 子系统注册为输入设备(如 /dev/input/eventX),并将 HID 事件转换为标准的输入事件(如 EV_KEY、EV_ABS 等)。
hidraw 驱动模块:HIDRAW(HID Raw Device)是Linux内核提供的原始HID设备访问接口,用于直接与HID设备(如键盘、鼠标、游戏手柄等)通信,无需经过内核的HID子系统抽象层,适用于需要自定义设备交互或处理非标准 HID 设备的场景(如固件升级、底层协议调试)。
流程:当 HID 设备(如USB)插入系统时,内核通过 HID 总线通过 hid_bus_match 函数选择 hid-generic 驱动(若未被专用驱动通过 VID/PID 优先匹配,如 USB 鼠标、键盘),匹配后 HID 总线调用 hid-generic 驱动的 probe 函数。probe 函数解析设备的 HID 报告描述符,初始化设备。通过 hidraw_connect 函数在 /dev 目录下创建 hidraw* 设备节点(如 /dev/hidraw0)。
专用驱动开发:可参考 hid-generic 的代码结构(如 drivers/hid/hid-generic.c),理解 HID 总线的匹配和初始化流程。
HID 从机
HID Gadget Function驱动:drivers/usb/gadget/function/f_hid.c

浙公网安备 33010602011771号