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。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值