Модуль ядра USB не проверяет - PullRequest
1 голос
/ 10 марта 2020

Я написал простой драйвер USB-устройства, но он не проверяется, когда устройство подключено к системе, вместо этого ядро ​​вызывает вместо этого модуль USB-хранилища.

Код для моего модуля ядра:

#include <linux/module.h>
#include <linux/usb.h>
#include <linux/device.h>

#define USB_IT8951_VENDOR_ID        0x048d  //ITE Vendor ID
#define USB_IT8951_PRODUCT_ID       0x0220

static int it8951_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
    pr_info("test_string 2\n");

    return 0;
}

static void it8951_usb_disconnect(struct usb_interface *interface)
{
    pr_info("Disconnect enter\n");
}

static const struct usb_device_id it8951_usb_devices [] = {
    { USB_DEVICE(USB_IT8951_VENDOR_ID, USB_IT8951_PRODUCT_ID) },
    {},
};
MODULE_DEVICE_TABLE(usb, it8951_usb_devices);

static struct usb_driver it8951_usb_driver_struct = {
    .name        = "it8951_usb",
    .probe       = it8951_usb_probe,
    .disconnect  = it8951_usb_disconnect,
    //.fops        = &skel_fops,
    .id_table    = it8951_usb_devices,
};

static int __init it8951_usb_init(void)
{
    int result;

    pr_info("test_string 1\n");

    result = usb_register(&it8951_usb_driver_struct);
    if (result < 0) {
        pr_err("usb_register failed for the "__FILE__ "driver."
            "Error number %d", result);
        return -1;
    }

    return 0;
}
module_init(it8951_usb_init);

static void __exit it8951_usb_exit(void)
{
    usb_deregister(&it8951_usb_driver_struct);
}
module_exit(it8951_usb_exit);

Dmesg, когда устройство подключено:

[  668.940000] usb 1-2: new high-speed USB device number 3 using atmel-ehci
[  669.130000] usb 1-2: New USB device found, idVendor=048d, idProduct=0220
[  669.130000] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  669.140000] usb 1-2: Product: Digi-Photo-Frame
[  669.140000] usb 1-2: Manufacturer: Smedia  inc.
[  669.140000] usb 1-2: SerialNumber: 14024689FA08
[  669.160000] usb-storage 1-2:1.0: USB Mass Storage device detected
[  669.170000] scsi host0: usb-storage 1-2:1.0
[  670.240000] scsi 0:0:0:0: Direct-Access     Generic  Storage RamDisc  1.00 PQ: 0 ANSI: 0 CCS
[  670.260000] sd 0:0:0:0: [sda] 1 512-byte logical blocks: (512 B/512 B)
[  670.270000] sd 0:0:0:0: [sda] Write Protect is off
[  670.270000] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[  670.270000] sd 0:0:0:0: [sda] No Caching mode page found
[  670.270000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[  670.320000] sd 0:0:0:0: [sda] Attached SCSI removable disk

Я не могу удалить поддержку usb-хранилища из системы, поэтому есть способ заставить ядро ​​использовать мой модуль вместо usb-хранилища? Или я могу написать правило udev для переназначения устройства?

Заранее спасибо.

...