Linux下 hid quirks的研究

2021-06-05 21:27:29 字數 1246 閱讀 6813

者:sam (甄峰)

[email protected]

sam在讀usb hiddriver時,看到quirks這部分內容。因為之前在看usb部分**時,常看到類似的內容,但對它的語義理解並不清楚,只是籠統地認為是乙個需要修正的東西。現在稍微研究一下。

一:quirks簡介:

quirks: 怪癖的意思,也就是說它某種特性與通常的usb裝置不相同。

sam之前是在usb部分看到quirks:

在~/drivers/usb/core/quirks.c中,有個usb_quirk_list列表,它其實就是乙個黑名單,描述了某個裝置有何種問題。例如:,

表明: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中。

Linux下Redis下安裝

redis安裝 檢查是否安裝redis ps ef grep redis2.檢查gcc服務是否安裝成功 rpm qa grep gcc注 安裝成功則顯示 mkdir redis5.解壓redis安裝包 tar zxvf redis 2.8.17 tar.gz c usr local redis 解壓...

Linux下程式設計

windows下我的環境為 windows10 vs2015 opencv3.4.0 opencv3.4.0 contrib python linux下我的環境為 ubuntu16004 也有ubuntu1804 opencv3.4.0 opencv3.4.0 contrib python gnu ...

linux下萬用字元

萬用字元是一類鍵盤字元,有星號 和問號 當查詢檔案呀資料夾時,可以使用它來代替乙個或多個真正字元 當不知道真正字元或者不想建入完整名字時,常常使用萬用字元代替乙個或多個真正字元。星號 可以使用星號代替0個或多個字元。如果正在查詢以aew開頭的乙個檔案,但不記得檔名其餘部分,可以輸入aew,查詢以ae...