Linux
可以強制 udev 創建特定的設備事件編號,或更改設備事件編號
/dev/input/event2
我有一個核心模組,它專門從和讀取 USB 鍵盤輸入/dev/input/event3
。在某些設備上,鍵盤沒有被分配 event2 和 event3,它被分配了
/dev/input/event3
,/dev/input/event4
這當然會導致模組失去輸入。我仔細研究了 udev 規則和範例,但似乎找不到強制 udev 分配特定事件#字元設備的方法。我可以讓它分配其他任何其他內容,例如
/dev/input/mydevice
,等,但這在這種情況下無濟於事。這可能嗎?更複雜的是,插入的設備並不是真正的鍵盤,它是一個無線展示器,它將滑鼠分配給event2,將音量增大/減小按鈕分配給event3,並將前進後退按鈕分配給event4。如下所示:
drwxr-xr-x 160 Apr 1 00:05 . drwxr-xr-x 240 Apr 1 00:05 .. *lrwxrwxrwxroot 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.0-event-mouse -> ../event2 lrwxrwxrwx 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.0-mouse -> ../mouse0 *lrwxrwxrwx 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.1-event-kbd -> ../event3 *lrwxrwxrwx 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.2-event-kbd -> ../event4 lrwxrwxrwx 9 Apr 1 00:00 platform-imx-i2c.0-platform-max77696-onkey.0-event -> ../event0 lrwxrwxrwx 9 Apr 1 00:00 platform-imx-i2c.1-event -> ../event1
我需要它看起來像這樣:
drwxr-xr-x 160 Apr 1 00:05 . drwxr-xr-x 240 Apr 1 00:05 .. *lrwxrwxrwxroot 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.0-event-mouse -> ../event4 lrwxrwxrwx 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.0-mouse -> ../mouse0 *lrwxrwxrwx 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.1-event-kbd -> ../event3 *lrwxrwxrwx 9 Apr 1 00:05 platform-fsl-ehci.0-usb-0:1:1.2-event-kbd -> ../event2 lrwxrwxrwx 9 Apr 1 00:00 platform-imx-i2c.0-platform-max77696-onkey.0-event -> ../event0 lrwxrwxrwx 9 Apr 1 00:00 platform-imx-i2c.1-event -> ../event1
我認為需要更改的值是“KERNEL”值。在滑鼠設備上使用 udevadm info 我得到以下結果。
[root@kin input]# udevadm info -a -p $(udevadm info -q path -n /dev/input/by-path/platform-fsl-ehci.0-usb-0\:1\:1.0-event-mouse) looking at device '/devices/platform/fsl-ehci.0/usb1/1-1/1-1:1.0/input/input26/event2': KERNEL=="event2" SUBSYSTEM=="input" DRIVER=="" looking at parent device '/devices/platform/fsl-ehci.0/usb1/1-1/1-1:1.0/input/input26': KERNELS=="input26" SUBSYSTEMS=="input" DRIVERS=="" ATTRS{name}=="Genius Wireless Mouse" ATTRS{phys}=="usb-fsl-ehci.0-1/input0" ATTRS{uniq}=="" ATTRS{modalias}=="input:b0003v0458p0189e0101-e0,1,2,4,k110,111,112,113,114,r0,1,6,8,am4,lsfw" ATTRS{properties}=="0"
委婉地說,通過打開特定文件而不是使用核心 API 來獲取事件來讀取事件的核心模組是非常不尋常的。
我解決這個問題的方法是使用
dd
或十六進制編輯器來修補核心模組以使用其他一些路徑,它們將這些路徑創建為帶有udev
.