модуль ядра usb не загружается по требованию, но отлично работает с insmod и modprobe из оболочки

У меня есть модуль Linux Linux Kernel, который компилирует и создает. Запуск insmod загружает мой модуль, а dmseg и tail -f /var/log/debug показывает мне, что он работает так, как ожидалось.

Запуск depmod -a затем modprobe с терминала загружает модуль и modprobe -r выгружает, и я вижу – tail -f /var/log/debug output, как ожидалось.

Когда я подключаю USB-клавиатуру, хотя она не запускается и не загружается по требованию, как ожидалось.

Я не /etc/udev/rules.d . Любые обходные пути или рекомендации приветствуются. Я запускаю Ubuntu 12.04.4 LTS с пользовательским ядром Linux 3.14.0

 #include <linux/module.h> #include <linux/kernel.h> #include <linux/usb.h> #include <linux/usb/input.h> #include <linux/hid.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Aruna Hewapathirane"); MODULE_DESCRIPTION("A USB Keyboard Driver Kernel Module"); static struct usb_device_id usb_kbd_id_table[] = { { USB_INTERFACE_INFO( USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT, USB_INTERFACE_PROTOCOL_KEYBOARD) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, usb_kbd_id_table); static int __init kbd_init(void) { printk(KERN_DEBUG "USB Keyboard Plugged In.. \n"); return 0; } static void __exit kbd_exit(void) { printk(KERN_DEBUG "USB Keyboard Removed.. \n"); return ; } module_init(kbd_init); module_exit(kbd_exit); 

One Solution collect form web for “модуль ядра usb не загружается по требованию, но отлично работает с insmod и modprobe из оболочки”

Вам не хватает usb_register и probe

Здесь обновлен драйвер устройства с usb_register и probe

 #include <linux/module.h> #include <linux/kernel.h> #include <linux/usb.h> #include <linux/usb/input.h> #include <linux/hid.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Aruna Hewapathirane"); MODULE_DESCRIPTION("A USB Keyboard Driver Kernel Module"); static struct usb_device_id usb_kbd_id_table[] = { { USB_INTERFACE_INFO( USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT, USB_INTERFACE_PROTOCOL_KEYBOARD) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, usb_kbd_id_table); static int kbd_probe(struct usb_interface *interface, const struct usb_device_id *id) { pr_info("USB keyboard probe function called\n"); return 0; } static void kbd_disconnect(struct usb_interface *interface) { pr_info("USB keyboard disconnect function called\n"); } static struct usb_driver kbd_driver = { .name = "usbkbd", .probe = kbd_probe, .disconnect = kbd_disconnect, .id_table = usb_kbd_id_table, }; static int __init kbd_init(void) { int res = 0; res = usb_register(&kbd_driver); if (res) pr_err("usb_register failed with error %d", res); return res; } static void __exit kbd_exit(void) { pr_debug("USB Keyboard Removed..\n"); usb_deregister(&kbd_driver); return; } module_init(kbd_init); module_exit(kbd_exit); 

Пожалуйста, обратитесь к предыдущему запросу SO для использования функции probe .

  • USB Ubuntu с шифрованием всего диска
  • Бесконечный цикл данных от dev / ttyUSB при отправке AT-команд
  • У моей SD-карты есть раздел, но Linux не создает запись устройства для раздела
  • Как предотвратить открытие модуля ядра для определенного устройства?
  • Установка Grub 2 на флэш-накопитель USB
  • Модуль ядра для подключения клавиатуры ps / 2 к USB?
  • Не удалось получить приглашение на вход в / dev / ttyUSB0
  • Последовательная поддержка Grub и usb
  • Как узнать, использует ли что-то последовательный порт?
  • Модем USB 56k не обнаружен
  • Запись файла ISO на USB
  • Linux и Unix - лучшая ОС в мире.