linux hid 设备驱动,linux hid驱动
linux hid驅動
以usbhid為例,drivers/hid/usbhid/hid-core.c 。
新設備添加后,usbhid_probe函數執行。
usbhid_probe
|-hid_allocate_device
|-hid_add_device
|-device_add
device_add之后,hid_bus_type的probe函數hid_device_probe執行。(經過match后,usbhid的driver是hid_generic,因為hid_generic沒有probe,所有執行bus的hid_device_probe)
hid_device_probe
|-hid_open_report
|-hid_hw_start
hid_open_report函數解析設備的report描述符。解析之后形成一套數據,由hid_device的report_enum索引。
hid_hw_start
|-usbhid_start
|-hid_connect
|-hidinput_connect
|-hiddev_connect
|-hidraw_connect
不是所有設備都會執行這三個connect函數。一般設備只執行其中的一兩個。hid_conect函數結合設備的quirk生成connect_mask決定執行哪些connect函數。
這三個connect函數實際作用是對接到hid驅動的三個出口。
hidinput_connect對接到input驅動,用戶從/dev/input/xxx獲取設備的數據。hiddev_connect對接到usbdev。hidraw_connect對接到hidraw,用戶從/dev/hidrawx獲取數據。
hidinput用于HID驅動與input驅動的對接。其代碼為hidinput.c
hid_connect
|-hidinput_allocate
| |-input_allocate_device
|-input_register_device
input_allocate_device和input_registervdevice是input驅動提供的接口。其源碼為drivers/input/input.c
hidinput_allocate函數通過input驅動的接口分配一個input_dev,并且設置其中的回調函數指針。
接下來,調用input_register_device注冊input_dev。
總結
以上是生活随笔為你收集整理的linux hid 设备驱动,linux hid驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人际关系图解
- 下一篇: java点到直线距离_求取点到直线的距离