/ / Linuxカーネルモジュール、probeの後にusbcoreが別のインタフェースを登録しないようにする - c、linux-kernel、kernel

Linuxカーネルモジュール、プローブ後にusbcoreが別のインタフェースを登録しないようにする - c、linux-kernel、kernel

私は、usbcoreが "request"プローブの後にusbhidやその他の新しいインターフェースを登録するのを防ぐ方法を探しています。

C関数Linuxカーネルモジュール(mUSBdriver.c)

...
static int mUSBdriver_probe(struct usb_interface *interface, const struct usb_device_id *id){
printk(KERN_INFO "mUSBdriver: new USB device PLUGGED!");
return 0; // indicate we will manage this device
//return -ENODEV;  indicate we will NOT manage this device
}
...

ここに私のステップのコンパイルと挿入があります

rmmod usbhid
rmmod mUSBdriver
make
insmod mUSBdriver.ko

デバイスをホットプラグすると

~# tail -n 50 /var/log/syslog
...
...kernel: usbcore: registered new interface driver mUSBdriver
...kernel: usb 2-1: Product HID Keyboard
...
...kernel: mUSBdriver:new USB device PLUGGED!
...

私のデバイスはHIDキーボードクラスです

~# tail -n 50 /var/log/syslog
...
...kernel: usbcore: registered new interface driver mUSBdriver
...kernel: usb 2-1: Product HID Keyboard
...
...kernel: mUSBdriver:new USB device PLUGGED!
...kernel: usbcore: registered new interface driver usbhid
...kernel: usbhid: USB HID core driver
...

私が管理することから(返品0)このデバイス。 私はドライバがプローブを受け取った後、usbcoreが別のインターフェースを登録しないようにするための解決策を探しています。私はこのデバイスを「不良USB」とみなし、他のすべての操作をキャンセルしたいと考えています。私はusb.hで検索しますが、何も検索しません。

どのようなアイデアを取るのですか?

my idea:
- send a notification to usbcore ?
- hook on usbcore  ?

(but I do not know how to do it)

回答:

回答№1は0

usbcore 同時に2つのドライバを同じインターフェイスに接続することはできません。

usbcore 実際には新しいインターフェイスを登録することでした ドライバ。これは、そのドライバのインタフェースが存在するのか、実際に利用可能なのかとは関係ありません。そのドライバ(モジュール)がロードされているときに発生します。


しかし、問題が発生する可能性があります。最初に検出されたドライバが勝ちます。もし usbhid ドライバが既にロードされている場合は、自分のドライバの前にアタッチする可能性があります。

予防する usbhid あなたのデバイスに接続することから、モジュールオプションを使ってそのデバイスを無視するように指示する必要があります:

options usbhid quirks=0x1234:0x5678:4

または HID_QUIRK_IGNORE へのエントリ drivers/hid/usbhid/hid-quirks.c.