Linux下 hid quirks的研究

Sam在读USB HID driver时,看到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 PhotoSmart 720 ),不能自动suspend.

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

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

 

 

二:HID quirks:

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

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

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

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

 

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

 

 

三:如何使用HID quirks:

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

 

 

源链接:http://blog.sina.com.cn/s/blog_602f87700100dw35.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值