4

私は Linux 用のデバイス ドライバーに取り組んでいます。USBペンタブレットです。問題は、ドライバーのプローブ コールバックが呼び出されないことです。dmesg だけが表示されます:

generic-usb: probe of 0003:099A:2620.000F failed with error -22

デバイスに接続できません。システム ドライバーが何らかの方法でドライバーをオーバーライドしているように見えますか?

私のコードは insmod / rmmod を使用して正しく登録および登録解除しています:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/usb.h>
#include <linux/slab.h>

MODULE_DEVICE_TABLE (usb, id_table);
struct usb_device_id id_table[] =
{
    {USB_DEVICE(0x099a, 0x2620)}, //Zippy Technology Corp. Digi Tablet
    {0}
};

void dt_disconnect(struct usb_interface *interface)
{
    printk("dt_disconnect called\n");
}

int dt_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
    printk("dt_probe called\n");
    return 0;
}

static struct usb_driver dt_driver =
{
    .name = "Zippy Technology Corp. Digi Tablet",
    .probe = dt_probe,
    .disconnect = dt_disconnect,
    .id_table = id_table
};

static int __init dt_init(void)
{
    //0 means success
    int error = usb_register(&dt_driver);
    if(error)
        printk("dt_init failed\n");

    return 0;
}

static void __exit dt_exit(void)
{
    //void
    usb_deregister(&dt_driver);
}

module_init(dt_init);
module_exit(dt_exit);

MODULE_LICENSE("GPL");

dt_probe は呼び出されません。私は Linux 2.6.40 (Fedora 15 の 3.0 バージョン) を使用していますが、これに関するほとんどのドキュメントは非常に古いため、ここで質問したいと思います。何かご意見は?

4

1 に答える 1

3

はい、ushid ドライバーはドライバーをオーバーライドします。実行中のカーネルから usbhid ドライバーを削除する必要があります。最初にデバイスをシステムから取り外し、「modprobe -r usbhid」を使用して usbhid モジュールを削除します。モジュールを挿入してデバイスを接続すると、ドライバーが取得されます。

于 2011-08-26T13:44:09.463 に答える