2017-11-30 72 views
1

特定のドライバにhidデバイスをバインドします。は、デバイスを特定のドライバに自動的にバインドします。

残念ながら、hid-genericは、デバイスが再接続されたときに何とかバインディングを「盗む」。

私は私が手でこのようにデバイスをアンバインドし、バインドすることができます知っている:

# echo ... > /sys/bus/hid/drivers/hid-generic/unbind 
# echo ... > /sys/bus/hid/drivers/customdriver/bind 

しかし、ドライバを自動的にビンのデバイスへのドライバーのための優先順位のようなものはありませんでしょうか?

ありがとうございます!

+1

一般的なhidにブラックリストが存在する可能性があります。これを確認してくださいhttps://unix.stackexchange.com/questions/55495/prevent-usbhid-from-claiming-usb-device –

+0

Uは、そのためのudevルールを使用することができます。この回答を見てください:https://stackoverflow.com/questions/38786343/prevent-usbhid-from-autoloading-when-usb-hid-device-is-plugged-in –

+0

@OrtwinAngermeierありがとう - しかしあなたは3分です遅すぎる:D(私の答えの2番目の項目を参照) – flood

答えて

0

私は自動的にHID-core.cでhid_have_special_driver構造体にデバイスを追加私のドライバーに

  • をデバイスをバインドする2つの方法を発見しました。

    構造体は、そのような気にいらなります

    static const struct hid_device_id hid_have_special_driver[] = { 
    #if IS_ENABLED(CONFIG_HID_A4TECH) 
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, 
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, 
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) }, 
    #endif 
        //... 
        {} 
    } 
    

    これは、それが正常に行われている方法ですが、私はまだ試していません。 hid-core.c(hid.ko)を再コンパイルする必要があります。

  • udev-ruleのバインド機能とバインド解除機能を使用します。

    自動的にHID-ジェネリックからデバイスをアンバインドし、あなたのドライバ

    アーチのLinux x86_64版の下にそれを結合する/etc/udev/rules.d/にするために(例えば99-mydriver.rulesを)新しいルールを追加します。 Raspbianストレッチアンダー

    ACTION=="bind", KERNELS=="0005:<VENDOR_ID>:<PRODUCT_ID>.*", SUBSYSTEMS=="hid", DRIVERS=="hid-generic", \ 
    RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/$driver/unbind'", \ 
    RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/<MY_DRIVER>/bind'" 
    

    次作品私のために

    ACTION=="add", KERNEL=="0005:<VENDOR_ID>:<PRODUCT_ID>.*", SUBSYSTEM=="hid", DRIVER=="hid-generic", \ 
    RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/hid-generic/unbind'", \ 
    RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/<MY_DRIVER>/bind'" 
    

    needeとして<VENDOR_ID><PRODUCT_ID><MY_DRIVER>を交換してくださいd

関連する問題