我一直在学习内核编程,并学习Eudyptula challenge,任务5要求我修改一个较早的任务的hello world模块,使其在插入USB键盘时自动加载,而在拔出键盘时自动卸载。
现在,为了这个目的,我不会在这里发布我的代码,因为这将严重破坏此任务,并会破坏其他人的乐趣。基本上,它的作用是:
struct usb_device_id
数组,该数组将我的模块绑定(bind)到任何USB键盘struct usb_driver
并初始化适当的字段;特别是,它引用了我先前创建的USB设备ID表数组MODULE_DEVICE_TABLE
注册驱动程序。 注册/注销例程正在运行。手动加载和卸载模块时,会收到预期的调试消息。
我将模块复制到
/lib/modules/$(uname -r)
并运行depmod -a
。该模块已添加到modules.alias
和modules.dep
,但是当我插入/拔出键盘时什么也没有发生。进一步的研究表明,我应该有一个由
modules.usbmap
生成的depmod
文件,其中内核保持要加载的设备和驱动程序之间的映射。我的文件夹树中没有该文件。我也没有modules.pcimap
。我已经检查了内核配置,以确保启用了可加载模块支持以及热插拔支持。这是具有自编译3.16.0-rc5内核的Kubuntu 14.04。我想念什么?我已经完成了内核配置,并检查了最明显的选项。我有点卡在这里。有任何想法吗?
最佳答案
您可能会缺少两件事:
1.)USB键盘通常不仅是通用USB设备,而且是HID类设备。 Linux将USB HID设备视为一个单独的子类。您有考虑到这一点吗?
2.)modules.usbmap和modules.pcimap仅与module/pci/usb实用程序的某些较早版本一起存在。在现代版本中,等效于那些文件中的信息被包含在modules.alias中。您的研究 Material 可能已过时。
关于c - 基于Ubuntu的发行版缺少modules.usbmap和modules.pcimap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24832032/