加载/卸载驱动?
参考回答
加载驱动(模块):
– 使用 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_drivermodprobe的优点:- 自动加载依赖的模块(无需手动
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 查看模块信息。