我知道在Linux系统中插入任何USB设备时,会加载特定的设备驱动程序。现在我想在插入USB鼠标时插入我的驱动程序。
我知道我可以使用两种方法完成此任务:使用depmod或使用udev概念。我在网上看过一些关于它的事情,但我没有得到确切的答案。任何人都可以建议哪种方法最适合在Linux内核树中进行更改?
答案 0 :(得分:2)
感谢大家的帮助。
我遵循udev方法自动加载USB插件
以下是在插入热插拔设备上自动加载驱动程序的过程(我使用USB鼠标进行实验,以下程序正常工作)
运行以下命令
cmd> udevadm info -a -p $(udevadm info -q path -n / dev / input / mouse)
取代??在上面的命令中,用户需要根据其在/ dev中的条目添加设备ID(例如,根据设备标识,对于USB闪存驱动器:sdb1或sda1等)
从上述命令的输出中获取以下参数的值 KERNEL,ATTRS {idVendor},ATTRS {idProduct},ATTRS {serial}
转到/etc/dev/rule.d目录并添加规则
cmd> sudo vim 40-usbmouse.rules 行动=="添加",SUBSYSTEM =="阻止",KERNEL ==" sd?1",ATTRS {idVendor} ==" 058f&# 34;,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/ 强>
现在,在定义规则后,用户需要重新启动udev,以便内核通知您的规则。 cmd&gt; sudo stop udev
cmd&gt; sudo start udev
插入USB并验证您在规则中定义的脚本是否显示其效果。 对于鼠标用户可以使用以下命令
cmd&gt; udevadm info -a -p $(udevadm info -q path -n / dev / input / mouse)
P.S。:cmd代表命令shell(终端)。上述过程适用于任何USB设备。
答案 1 :(得分:1)
您可以在驱动程序中使用MODULE_SOFTDEP
中定义的module.h
宏,您可以在其中指定插入USB鼠标时加载的USB驱动程序的名称。这将自动加载您的驱动程序。 depmod
方法是可行的方法。
答案 2 :(得分:1)
使用MODULE_DEVICE_TABLE
宏。这将导出支持的设备表,以便您的hotplug工具(无论是udev还是其他)可以加载您的模块。我在此answer中描述了加载过程。
要查看示例用法,请参阅drivers/hid/usbhid/usbmouse.c。如果此驱动程序编译为模块,则每次连接任何USB鼠标时都会加载它。