lsmod可直接列出已加载内核模块,但仅显示加载状态,不表示驱动已绑定设备或可安全卸载;需结合dmesg、lspci、ethtool、modinfo等验证实际使用、硬件绑定及签名状态。

直接运行 lsmod 就能列出所有已加载的内核模块,它读取的是 /proc/modules,结果实时、可靠,且无需 root 权限。但要注意:显示在列表里 ≠ 驱动真正在用 ≠ 可以安全卸载。动态卸载异常驱动不能只看 lsmod 输出,必须结合引用状态、设备绑定和内核占用痕迹综合判断。
看清 lsmod 三列的真实含义
lsmod 输出共三列:模块名、大小(字节)、被引用情况。例如:
nvidia 26214400 87 nvidia_uvm,nvidia_drm
这表示:
- 模块名为 nvidia,占约 25 MiB 内存;
- 引用计数为 87,说明有 87 处调用(含子模块或内核子系统);
- 后面逗号分隔的 nvidia_uvm 和 nvidia_drm 是依赖它的模块。
关键提醒:第三列显示为 0,不代表模块空闲。比如 kvm_intel 常驻内存,Used by 为 0,但 rmmod kvm_intel 仍会失败——因为内核框架隐式持有引用。
确认模块是否真被设备使用
仅靠 lsmod | grep xxx 无法判断驱动是否生效。需进一步验证硬件绑定与参数加载:
- 对 PCI 设备(如显卡、NVMe):用
lspci -k -s $(lspci | grep -i nvidia | cut -d' ' -f1)查看Kernel driver in use:字段是否非空 - 对网卡:运行
ethtool -i eth0,检查driver字段是否输出实际驱动名 - 查模块参数是否生效:先用
modinfo -p nvidia | grep NVreg_EnableGpuFirmware看参数是否存在,再对比cat /sys/module/nvidia/parameters/NVreg_EnableGpuFirmware的值
安全卸载前必须排查的三件事
执行 rmmod 报错 “Module xxx is in use” 时,别急着硬卸,先检查:
- 运行
dmesg | tail -20,找类似nvidia: module is in use的提示,这是最直接的占用证据 - 检查模块是否被黑名单:执行
modprobe --showconfig | grep -A5 'blacklist nvidia',或翻阅/etc/modprobe.d/*.conf - 确认模块签名是否匹配:若内核启用了强制签名(
CONFIG_MODULE_SIG_FORCE=y),未签名模块会被静默拒绝,此时dmesg | grep -i signature会报错
更稳妥的过滤与卸载方式
直接 lsmod | grep nvme 容易漏掉 nvme_core 或 nvme_pci。推荐用:
lsmod | awk '{print $1}' | grep -i -E '^(nvme|nvidia|kvm)'
卸载时优先用 modprobe -r 而非 rmmod:
-
modprobe -r nvidia会自动递归卸载nvidia_modeset、nvidia_uvm等依赖模块 -
rmmod nvidia只卸载主模块,若依赖未清空,命令直接失败 - 卸载后建议立刻
lsmod | grep nvidia确认消失,并观察dmesg | tail是否有清理日志











