【问题标题】:How to insert my driver automatically on the insertion of USB mouse in Linux System?如何在 Linux 系统中插入 USB 鼠标时自动插入我的驱动程序?
【发布时间】:2014-08-11 09:40:27
【问题描述】:

我知道在 Linux 系统中插入任何 USB 设备时,都会加载特定的设备驱动程序。现在我想在插入USB鼠标时插入我的驱动程序。

我知道我可以使用两种方法来完成这项任务:使用 depmod 或使用 udev 概念。我在互联网上读过一些关于它的东西,但我没有得到确切的答案。任何人都可以建议最好使用哪种方法以及在我需要进行更改的 Linux 内核树中使用哪种方法?

【问题讨论】:

  • “插入我的驱动程序” -- “插入”到什么?这种“插入”与加载驱动模块有何不同?
  • @sawdust 并没有什么不同。
  • 您是否正在为您的设备编写一个新的驱动程序作为内核模块?还是您只是在寻找一种方法来加载一些驱动程序模块,而不是在您插入设备时将默认的 udev/kernel/modprobe 弹出到内核中?
  • 我只是想在插入 USB 鼠标的默认活动旁边加载我的驱动程序模块(例如简单的 Hello.ko)。
  • 通过以下链接查看答案:stackoverflow.com/questions/25175960/…

标签: linux linux-kernel usb linux-device-driver


【解决方案1】:

感谢大家的帮助。

我按照 udev 的方式在 USB 插入时自动加载模块

以下是在插入热插拔设备上自动加载驱动程序的过程(我用 USB 鼠标进行了实验,以下过程可以正常工作)

  1. 运行以下命令

    cmd > udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse)

    代替??在上述命令中,用户需要根据其在 /dev 中的条目添加设备 ID(例如,对于 USB 闪存驱动器:sdb1 或 sda1 等,基于设备标识)

  2. 从上述命令的输出中获取以下参数的值 内核、ATTRS{idVendor}、ATTRS{idProduct}、ATTRS{serial}

  3. 转到 /etc/dev/rule.d 目录并添加您的规则

    cmd > sudo vim 40-usbmouse.rules ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd?1", ATTRS{idVendor}=="058f", ATTRS{idProduct}=="6387", ATTRS{serial} ==" 4EPLXAXE"、SYMLINK+="usbpd"、RUN+="/usr/local/bin/InsertModule.sh"

    保存此文件。 上述规则是为 USB 鼠标定义的。 参数 SYMLINK 在 /dev 目录中创建设备的链接,在 RUN+ 中,您可以提供将在设备插入时执行的脚本位置。

    有关如何编写规则的更多信息,请参阅下面的链接

    http://hackaday.com/2009/09/18/how-to-write-udev-rules/

  4. 现在,在您定义规则后,用户需要重新启动 udev 以让内核注意到您的规则。 cmd > sudo stop udev

    cmd > sudo start udev

  5. 插入您的 USB 并验证您在规则中定义的脚本是否显示其效果。 对于鼠标用户可以使用以下命令

    cmd > udevadm info -a -p $(udevadm info -q path -n /dev/input/mouse)

P.S.:cmd 代表命令外壳(终端)。上述过程适用于任何 USB 设备。

【讨论】:

    【解决方案2】:

    您可以在驱动程序中使用module.h 中定义的MODULE_SOFTDEP 宏,您可以在其中指定插入USB 鼠标时加载的USB 驱动程序的名称。这将自动加载您的驱动程序。 depmod 方法是要走的路。

    【讨论】:

      【解决方案3】:

      使用MODULE_DEVICE_TABLE 宏。这将导出支持的设备表,以便您的热插拔工具(无论是 udev 还是其他)可以加载您的模块。我已经在answer 中描述了加载过程。

      要查看示例用法,请参阅drivers/hid/usbhid/usbmouse.c。如果此驱动程序编译为模块,则每次连接任何 USB 鼠标时都会加载它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 2014-07-30
        相关资源
        最近更新 更多