udev が特定のデバイスイベント番号を生成するように強制したり、デバイスイベント番号を変更したりできます。

udev が特定のデバイスイベント番号を生成するように強制したり、デバイスイベント番号を変更したりできます。

/dev/input/event2私はUSBキーボード入力を読み書きすることを専門とするカーネルモジュールを持っています/dev/input/event3

一部のデバイスでは、event2とevent3はキーボードに割り当てられていませんが、キーボードが割り当てられて/dev/input/event3モジュール/dev/input/event4の入力が失われます。

udevのルールと例を見てみましたが、udevに特定のevent#文字デバイスを割り当てるように強制する方法が見つからないようです。などの他の追加項目を割り当てることができますが、/dev/input/mydeviceこの場合は役に立ちません。可能ですか?

雪上に接続されたデバイスは、実際のキーボードではなくワイヤレスプレゼンターであり、ここにマウスが割り当てられているということです。イベント2、音量アップ/縮小ボタンイベント3と進むボタンと戻るボタンイベント4。このように:

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情報を使用すると、次のような結果が得られます。

[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"

答え1

イベントを取得するためにカーネルAPIを使用する代わりに、特定のファイルを開いてイベントを読み取るカーネルモジュールは、軽く言うと珍しいです。

この問題を解決したのは、dd16進エディタを使用してカーネルモジュールをパッチし、シンボリックリンクで生成された別のパスを使用することでしたudev

関連情報