关于Linux设备驱动程序,我的理解(从阅读this excellent DIY article获得)是设备驱动程序基本上有六个事件/部分"生命周期" :
Load
- 已编译的驱动程序通过insmod
Open
- 设备已打开/准备就绪Read
/ Write
- 使用设备Close
- 设备已关闭/已断开连接,目前已无法使用(除非重新打开)Release
- 通过rmmod
感谢那篇文章和无数其他人,我现在可以编写一大堆C代码来实现内核发出Open
,Read
,{{1}时应该发生的事情的钩子/回调}和Write
命令。但是,似乎必须通过在shell上发出Close
(加载)和insmod
(释放)来手动加载/释放驱动程序。
但是,我知道情况并非如此,因为某些设备(如USB)允许您动态/动态地连接/断开它们,并且必须自动加载/释放它们各自的驱动程序 - 飞行也是如此。
因此,这引发了以下问题:某些技术(如USB)如何自动执行rmmod
和insmod
(因此动态加载/释放USB设备驱动程序)?
答案 0 :(得分:1)
它基于linux hotplug。以下链接可能对您有用。
答案 1 :(得分:1)
热插拔! cf man udev:在/ lib或/ usr / lib或/etc/udev/udev.d中有优先级,你有规则([0-9] * descriptionName.rules),它们将pci和拟合模块之间的设备属性进行匹配加载。 Cf
sudo udevadm monitor --env
查看消息