Linux rmmod
命令详解
一、命令简介
rmmod
(remove module)是 Linux 系统中用于卸载内核模块的命令,属于 kmod 工具集的一部分。它允许管理员从运行中的内核中移除不再需要的模块,以释放资源或避免冲突。
rmmod
仅能卸载 未被使用的模块,如果模块仍被引用(比如驱动正在使用中),将无法卸载。
相比之下,modprobe -r
提供了更智能的卸载方式(包括依赖处理),而 rmmod
更底层,直接作用于指定模块,适合高级用户。
二、命令语法
rmmod [选项] 模块名
-
模块名不加
.ko
后缀。 -
仅限 root 或具有相应权限的用户执行。
三、常用选项
选项 | 说明 |
---|---|
-f | 强制卸载模块(不推荐,可能造成系统不稳定) |
-w | 等待直到模块不再被使用再卸载(很少使用) |
--verbose | 显示详细输出信息 |
--help | 显示帮助信息 |
--version | 显示当前版本信息 |
四、选项说明表格
选项 | 全写形式 | 功能说明 |
---|---|---|
-f | --force | 强制卸载模块(需要内核开启支持,容易导致系统崩溃) |
-w | --wait | 模块被释放后自动卸载(较少使用) |
--verbose | 无 | 显示卸载模块的详细信息 |
--help | 无 | 显示帮助信息 |
--version | 无 | 显示 rmmod 工具的版本 |
五、使用方法详解
1. 卸载一个模块
sudo rmmod e1000e
卸载名为 e1000e
的网络驱动模块(Intel 网卡)。
注意:卸载前必须确保没有任何设备或进程正在使用该模块。
2. 强制卸载模块(危险操作)
sudo rmmod -f snd_hda_intel
强制卸载声音驱动模块。如果模块仍被系统使用,可能导致设备失效或系统崩溃。
强制卸载通常需要内核编译时启用
CONFIG_MODULE_FORCE_UNLOAD=y
。
3. 卸载时显示详细信息
sudo rmmod --verbose usb_storage
输出卸载过程的详细信息,便于调试或日志记录。
六、相关命令辅助操作
-
查看已加载模块:
lsmod
-
检查模块依赖:
modinfo 模块名
或:
lsmod | grep 模块名
-
更推荐使用
modprobe -r
(支持依赖处理):sudo modprobe -r 模块名
七、模块卸载机制说明
Linux 内核使用模块化机制来动态加载和卸载驱动程序。模块通常位于:
/lib/modules/$(uname -r)/kernel/
rmmod
会直接调用内核接口 delete_module()
来移除内存中的模块代码。如果模块仍被引用(如其他模块或设备依赖),rmmod
将失败,提示如下错误:
rmmod: ERROR: Module xxx is in use
八、使用场景举例
场景 | 操作 |
---|---|
临时禁用驱动以重新加载 | rmmod 后用 modprobe 重新加载 |
移除问题模块导致系统异常(调试用途) | 使用 rmmod 排查冲突模块 |
精简系统内核,释放内存 | 卸载不必要的模块,如不使用的 USB 存储、声卡模块等 |
九、常见问题及解决方案
问题描述 | 可能原因或解决方法 |
---|---|
Module is in use 错误 | 模块正被使用,先停止相关服务或卸载依赖模块 |
使用 -f 仍失败 | 内核未开启强制卸载支持 (CONFIG_MODULE_FORCE_UNLOAD=n ) |
模块名写错 | 不要加 .ko 后缀,模块名需与 lsmod 中显示的一致 |
无法卸载 | 有进程或硬件仍依赖此模块,可使用 lsof 、fuser 辅助检查 |
十、与其他命令对比
命令 | 功能 | 适用说明 |
---|---|---|
rmmod | 低级卸载模块命令 | 直接作用于模块本体,需无依赖 |
modprobe -r | 高级卸载命令,支持自动处理依赖关系 | 更安全、推荐使用 |
lsmod | 查看当前已加载模块 | 无卸载功能,辅助查询 |
modinfo | 查看模块的详细信息 | 包括依赖模块、作者、参数等 |
十一、总结
项目 | 内容 |
---|---|
命令名称 | rmmod |
功能 | 从内核中卸载模块 |
权限要求 | 需要 root 权限 |
适用场景 | 移除驱动、调试冲突、释放资源 |
推荐替代 | modprobe -r (自动卸载依赖更安全) |
注意事项 | 模块必须未被使用,否则无法卸载 |
rmmod
是一个直接操作内核模块的工具,虽然简单直接,但风险相对较高,适合需要精确控制模块状态的场合。现代 Linux 系统更推荐使用 modprobe -r
替代,但理解 rmmod
的原理与用法,仍然是 Linux 内核调试与设备管理中必备的知识点之一。
这里是封面: