Usb

為什麼單個 Yubico 顯示為多個設備,hid-generic 和 input 有什麼區別?

  • April 28, 2019

當我插入我的 Yubikey 時,它顯示為,

usb 1-1: new full-speed USB device number 46 using xhci_hcd
usb 1-1: New USB device found, idVendor=1050, idProduct=0407, bcdDevice= 5.12
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: YubiKey OTP+FIDO+CCID
usb 1-1: Manufacturer: Yubico
input: Yubico YubiKey OTP+FIDO+CCID as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93
hid-generic 0003:1050:0407.006A: input,hidraw0: USB HID v1.10 Keyboard [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input0
hid-generic 0003:1050:0407.006B: hiddev0,hidraw1: USB HID v1.10 Device [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input1

為什麼 Yubikey 有三個輸入設備?

/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93
usb-0000:00:14.0-1/input0
usb-0000:00:14.0-1/input1

hid-generic和有什麼區別input?以及如何hidraw發揮作用?

部分答案:

input核心層是所有可能的輸入設備的抽象,通過所有可能的傳輸技術。PS/2 鍵盤、串列滑鼠、USB 鍵盤、USB 相機按鈕等最終都顯示為輸入設備。這些設備上的事件可通過 獲得/dev/input/event*,您可以使用它evtest來顯示它們。在其上層(如 X viaevdev或 Wayland via libinput)然後拾取這些事件並使它們可用於(圖形應用程序)。

在層次結構的另一端,這些設備中的大多數還具有與特定傳輸關聯的設備文件。一個重要的類是 HID(= 人機介面設備),這些設備(通常是 USB)帶有用於設備功能的標準化描述符(“HID 描述符”)。所以設備本身告訴核心它是鍵盤、滑鼠、操縱桿等;它生成哪些鍵或移動事件,在某種程度上如何配置它,等等。

HID 設備也總是會得到一個/dev/hidraw*文件,人們可以在其中讀取原始 HID 事件(如有必要)。通常,如果核心能夠理解 HID 描述符,這些事件就會由核心處理,然後作為輸入層事件提供。

所以你需要像這樣閱讀系統日誌條目:

input: Yubico YubiKey OTP+FIDO+CCID as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:1050:0407.006A/input/input93
hid-generic 0003:1050:0407.006A: input,hidraw0: USB HID v1.10 Keyboard [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input0

“有一個類鍵盤的USB HID介面。核心理解這個類,它會得到一個hidraw0設備文件和一個/dev/input/eventX(可能X=93)設備文件。hid-generic核心模組檢測到這一點,並呼叫input核心層。”

hid-generic 0003:1050:0407.006B: hiddev0,hidraw1: USB HID v1.10 Device [Yubico YubiKey OTP+FIDO+CCID] on usb-0000:00:14.0-1/input

“有一個 USB HID 介面,其類不被核心理解。由於無法轉發到輸入層,它將獲取hiddev0通用 HID 事件的設備文件,並且還將獲取hidraw1原始設備文件HID 事件。hid-generic模組檢測到這一點。”

所以看你怎麼算,不是三個,而是兩個HID介面,每個都有兩個關聯的設備文件,一共四個設備文件,其中只有輸入層設備文件是自動使用的。

至於Yubikey為什麼會這樣,只有 Yubikey 知道。一個合理的猜測是,它們提供了一個可以被任何作業系統(鍵盤 HID)拾取的通用介面和一個用於 Yubikey 特殊配置的介面,只有 Yubikey 特定的軟體才能理解。

引用自:https://unix.stackexchange.com/questions/515932