基于Ubuntu的发行版中缺少modules.usbmap和modules.pcimap

时间:2014-07-18 19:02:07

标签: c linux-kernel linux-device-driver kernel-module

我一直在学习内核编程并使用Eudyptula challenge,而任务5要求我修改一个早期任务的hello world模块,以便在插入USB键盘时自动加载,并在键盘输入时卸载拔出。

现在,为了它,我不会在这里发布我的代码,因为这对于这项任务来说会是一个巨大的破坏者,并会破坏其他人的乐趣。基本上,它的作用是:

  1. 创建一个struct usb_device_id数组,其中一个条目将我的模块绑定到任何USB键盘
  2. 创建struct usb_driver并初始化正确的字段;特别是,它引用了我之前创建的usb设备id表数组
  3. 使用宏MODULE_DEVICE_TABLE注册驱动程序。
  4. 注册/取消注册例程正在运行。当我手动加载和卸载模块时,我得到了预期的调试消息。

    我将模块复制到/lib/modules/$(uname -r)并运行depmod -a。该模块已添加到modules.aliasmodules.dep,但插入/拔出键盘时没有任何反应。

    进一步的研究表明,我应该有一个由modules.usbmap生成的depmod文件,其中内核保持设备和驱动程序之间的映射以加载。我的文件夹树中的任何地方都没有此文件。我也没有modules.pcimap。我已检查内核配置以确保启用了可加载模块支持,以及热插拔支持 - 它们是。

    这是Kubuntu 14.04,带有自编译的3.16.0-rc5内核。我错过了什么?我已经完成了内核配置并检查了最明显的选项。我有点被困在这里。有任何想法吗?

2 个答案:

答案 0 :(得分:4)

你可能会遗漏两件事:

1。)USB键盘通常不仅仅是通用USB设备,而是HID类设备。 Linux将USB HID设备视为单独的子类。你考虑过这个吗?

2。)modules.usbmap和modules.pcimap仅存在一些旧版本的module / pci / usb实用程序。对于现代版本,相当于那些文件中的信息的信息包含在modules.alias中。您的研究材料可能已经过时了。

答案 1 :(得分:0)

以下是我的建议..

  1. 尝试使用vendor_id,product_id进行注册,并检查您是否注册了正确的硬件设备。
  2. 您可以尝试在

    中编写规则
      

    /etc/udev/rules.d/10-local.rules

    确保正确识别您的硬件。以下命令可以帮助您:

    udevadm monitor or udevadm monitor --env
    udevadm info -a -p [/devices/pci0000:00/0000:00:1a.0/usb1/1-1 -> this has to be get from above command]
    
    1. 确保您rmmod您的模块,清除所有日志[sudo dmesg -c]并插入硬件。