加载/卸载驱动?
参考回答
加载驱动(模块):
– 使用 insmod
命令加载内核模块(驱动):
“`
insmod my_driver.ko
“`
其中,`my_driver.ko` 是编译后的驱动模块文件。
- 也可以使用
modprobe
命令加载模块(推荐):modprobe my_driver
`modprobe` 会自动处理依赖关系,而 `insmod` 需要手动加载所有依赖模块。
卸载驱动(模块):
– 使用 rmmod
命令卸载模块:
“`
rmmod my_driver
“`
- 也可以使用
modprobe -r
进行卸载:modprobe -r my_driver
详细讲解与拓展
1. 加载内核模块
(1)使用 insmod
insmod
(insert module)命令用于手动加载.ko
(Kernel Object)文件,它是 Linux 内核驱动的可加载模块格式。- 示例:
insmod my_driver.ko
但是 `insmod` **不会自动加载依赖的模块**,如果你的模块依赖于其他内核模块,需要先手动加载它们。例如:
insmod dependency.ko insmod my_driver.ko
(2)使用 modprobe
(推荐)
modprobe
可以自动解析模块依赖关系,因此是推荐的方式:modprobe my_driver
modprobe
的优点:- 自动加载依赖的模块(无需手动
insmod
依赖项)。 - 只需要提供模块名,而不需要
.ko
文件的完整路径。
- 自动加载依赖的模块(无需手动
- 如果你的模块不在标准路径
/lib/modules/$(uname -r)/
下,需要先手动复制过去:cp my_driver.ko /lib/modules/$(uname -r)/kernel/drivers/ depmod
2. 卸载内核模块
(1)使用 rmmod
rmmod
(remove module)用于卸载已加载的内核模块:rmmod my_driver
- 但
rmmod
不会处理模块依赖,如果模块被其他模块使用,卸载可能会失败。
(2)使用 modprobe -r
(推荐)
modprobe -r
会自动处理依赖,先卸载依赖于该模块的其他模块:modprobe -r my_driver
3. 查看已加载的模块
- 使用
lsmod
命令可以查看当前加载的所有内核模块:lsmod | grep my_driver
- 也可以使用
/proc/modules
:cat /proc/modules | grep my_driver
4. 查看模块信息
- 使用
modinfo
查看内核模块的详细信息:modinfo my_driver.ko
这会显示模块的描述、作者、依赖关系、许可证等信息。
5. 强制卸载模块
- 如果模块无法正常卸载,可以使用
rmmod -f
强制卸载:rmmod -f my_driver
但这可能会导致系统不稳定,应谨慎使用。
6. 在系统启动时自动加载驱动
- 如果你希望在系统启动时自动加载模块,可以将模块名添加到
/etc/modules-load.d/custom.conf
:echo "my_driver" >> /etc/modules-load.d/custom.conf
总结
– 加载驱动:insmod
手动加载 .ko
文件,但不处理依赖;modprobe
更推荐,可自动处理依赖。
– 卸载驱动:rmmod
卸载模块,但不会考虑依赖;modprobe -r
更安全,自动处理依赖模块。
– 查看模块:lsmod
查看已加载的模块,modinfo
查看模块信息。