如何自动加载/卸载某些Linux设备驱动程序?

时间:2015-01-27 14:11:38

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

关于Linux设备驱动程序,我的理解(从阅读this excellent DIY article获得)是设备驱动程序基本上有六个事件/部分"生命周期" :

  • Load - 已编译的驱动程序通过insmod
  • 作为Linux内核模块加载
  • Open - 设备已打开/准备就绪
  • Read / Write - 使用设备
  • Close - 设备已关闭/已断开连接,目前已无法使用(除非重新打开)
  • Release - 通过rmmod
  • 从内核卸载驱动程序(现在是内核模块)

感谢那篇文章和无数其他人,我现在可以编写一大堆C代码来实现内核发出OpenRead,{{1}时应该发生的事情的钩子/回调}和Write命令。但是,似乎必须通过在shell上发出Close(加载)和insmod(释放)来手动加载/释放驱动程序。

但是,我知道情况并非如此,因为某些设备(如USB)允许您动态/动态地连接/断开它们,并且必须自动加载/释放它们各自的驱动程序 - 飞行也是如此。

因此,这引发了以下问题:某些技术(如USB)如何自动执行rmmodinsmod(因此动态加载/释放USB设备驱动程序)?

2 个答案:

答案 0 :(得分:1)

它基于linux hotplug。以下链接可能对您有用。

http://www.makelinux.net/ldd3/chp-14-sect-7

答案 1 :(得分:1)

热插拔! cf man udev:在/ lib或/ usr / lib或/etc/udev/udev.d中有优先级,你有规则([0-9] * descriptionName.rules),它们将pci和拟合模块之间的设备属性进行匹配加载。 Cf

  

sudo udevadm monitor --env

查看消息