Linux下 hid quirks的研究

者:Sam (甄峰) sam_code@hotmail.com

 

Sam在读USB HIDdriver时,看到quirks这部分内容。因为之前在看USB部分代码时,常看到类似的内容,但对它的语义理解并不清楚,只是笼统地认为是一个需要修正的东西。现在稍微研究一下。

 

一:quirks简介:

quirks: 怪癖的意思,也就是说它某种特性与通常的USB设备不相同。

 

 

Sam之前是在USB部分看到quirks:

在~/drivers/usb/core/quirks.c中,有个usb_quirk_list列表,它其实就是一个黑名单,描述了某个设备有何种问题。例如:


 { USB_DEVICE(0x03f0, 0x4002), .driver_info =USB_QUIRK_NO_AUTOSUSPEND },

表明:vid=0x03f0,pid=0x4002的设备(Hewlett-Packard PhotoSmart720 ),不能自动suspend.

这个列表是不断扩展的,不断添加有问题的设备上来。

则判断一个设备是不是在这张黑名单上,然后如果是的,就判断它具体是属于哪种问题,

 

 

二:HIDquirks:

Sam在看USB HID driver时,在modulesinsmod时,会调用hid_init()。它又会调用usbhid_quirks_init()

如果在insmodmodules时,使用modules参数添加了quirks,格式为:quirks=pid:vid:quirks

则将此项内容添加或替换在动态建立的dquirks_list中。换句话说,也就是当modules的提供商知道自己的设备会有什么异常时,可以这样使用。

注意:此处仅仅是将某种PID,VID的quirks添加进动态列表而已。

 

有动态黑名单,就有静态黑名单。静态黑名单在~/drivers/hid/usbhid/hid-quirks.c中--hid_blacklist。它描绘了已知所有的quirks.

 

 

三:如何使用HIDquirks:

在hid设备probe时,会调用usbhid_lookup_quirk(),它则分别调用usbhid_exists_dquirk(动态)——和usbhid_exists_squirk(静态)在静态黑名单和动态黑名单中寻找有没有对应的vid和pid设备。如果有,则将quirks纪录在hid->quirks中。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值