某些 Linux 设备驱动程序如何自动 loaded/unloaded?
How are some Linux device drivers automatically loaded/unloaded?
关于 Linux 设备驱动程序,我的 理解(通过阅读 this excellent DIY article 获得)是基本上有六个 events/parts设备驱动程序 "lifecycle":
Load
- 编译后的驱动程序通过 insmod
作为 Linux 内核模块加载
Open
- 设备 opened/readied 可供使用
Read
/Write
- 设备已使用
Close
- 设备 closed/disconnected,目前无法使用(除非重新打开)
Release
- 驱动程序(现在是内核模块)通过 rmmod
从内核中卸载
多亏了那篇文章和无数其他文章,我现在可以编写一大堆 C 代码来实现 hooks/callbacks 内核问题 Open
、Read
时应该发生的事情Write
和 Close
命令。但是,似乎驱动程序必须 loaded/released 手动 通过在 shell.
但是,我知道情况并非如此,因为某些设备(例如 USB)允许您 connect/disconnect 它们 dynamically/on-the-fly,并且它们各自的驱动程序必须自动 loaded/released也在运行中。
所以这引发了以下问题:某些技术(如 USB)如何自动执行 insmod
和 rmmod
(因此动态 loading/releasing USB 设备驱动程序)?
它基于 linux 热插拔。以下link可能对你有用。
热插拔! cf man udev :在 /lib 或 /usr/lib 或 /etc/udev/udev.d 中具有优先级,您有规则 ([0-9]*descriptionName.rules) 可以在 pci 和配件的设备属性之间进行匹配要加载的模块。
比照
sudo udevadm monitor --env
查看消息
关于 Linux 设备驱动程序,我的 理解(通过阅读 this excellent DIY article 获得)是基本上有六个 events/parts设备驱动程序 "lifecycle":
Load
- 编译后的驱动程序通过insmod
作为 Linux 内核模块加载
Open
- 设备 opened/readied 可供使用Read
/Write
- 设备已使用Close
- 设备 closed/disconnected,目前无法使用(除非重新打开)Release
- 驱动程序(现在是内核模块)通过rmmod
从内核中卸载
多亏了那篇文章和无数其他文章,我现在可以编写一大堆 C 代码来实现 hooks/callbacks 内核问题 Open
、Read
时应该发生的事情Write
和 Close
命令。但是,似乎驱动程序必须 loaded/released 手动 通过在 shell.
但是,我知道情况并非如此,因为某些设备(例如 USB)允许您 connect/disconnect 它们 dynamically/on-the-fly,并且它们各自的驱动程序必须自动 loaded/released也在运行中。
所以这引发了以下问题:某些技术(如 USB)如何自动执行 insmod
和 rmmod
(因此动态 loading/releasing USB 设备驱动程序)?
它基于 linux 热插拔。以下link可能对你有用。
热插拔! cf man udev :在 /lib 或 /usr/lib 或 /etc/udev/udev.d 中具有优先级,您有规则 ([0-9]*descriptionName.rules) 可以在 pci 和配件的设备属性之间进行匹配要加载的模块。 比照
sudo udevadm monitor --env
查看消息