700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux hid 设备驱动 linux hid驱动

linux hid 设备驱动 linux hid驱动

时间:2020-05-18 02:16:55

相关推荐

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。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。