lsmod仅显示模块加载状态,无法确认是否在用、有无签名或绑定硬件,需结合dmesg、lspci、ethtool、modinfo等命令交叉验证。

lsmod 能直接列出当前已加载的内核模块,但仅靠它无法确认模块是否真在用、有没有签名、是否绑定硬件——必须配合其他命令交叉验证。
为什么 lsmod 显示了模块却不能卸载
常见现象是执行 rmmod nvidia 报错 Module nvidia is in use,哪怕 lsmod | grep nvidia 的第三列显示为 0。
-
Used by 0只表示没有其他模块显式引用它,不等于内核没内部持有(比如 GPU 正在渲染、设备文件被打开、或通过try_module_get()主动加了引用) - 真实占用常藏在
dmesg里:运行dmesg | tail -20,找nvidia: module is in use或类似提示 - 某些模块(如
kvm_intel)设计为“常驻”,即使没跑虚拟机也保持加载且Used by长期为0,但rmmod仍会失败
lsmod | grep xxx 总是漏模块?试试这个写法
直接 grep 模块名容易失效,因为:
- 模块名不等于驱动名或文件名(
nvme_core.ko加载后显示为nvme_core,不是nvme) - 一个驱动常拆成多个模块(
nvidia、nvidia_modeset、nvidia_uvm),只搜主名会漏依赖项 - 大小写敏感,且不支持通配符(
lsmod | grep nvme*无效)
更稳妥的做法是先提取第一列再过滤:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
lsmod | awk '{print $1}' | grep -i -E '^(nvme|nvidia|kvm|kysec)'
确认模块是否真正生效,不能只看 lsmod
lsmod 只告诉你“代码进了内存”,不代表驱动已绑定设备或参数已生效。
- 查硬件绑定:对 PCI 设备,用
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 - 查安全模块状态:
lsmod | grep apparmor成功后,还得aa-status才算闭环
lsmod 看不到模块?先排除这三件事
如果预期模块没出现在 lsmod 输出中,别急着重装驱动,先检查:
- 模块是否根本没加载:运行
sudo modprobe nvidia && lsmod | grep nvidia,而不是只依赖开机自动加载 - 模块是否被黑名单:执行
modprobe --showconfig | grep -A5 'blacklist nvidia',或检查/etc/modprobe.d/*.conf里有无blacklist nvidia - 模块签名不匹配:内核启用了
CONFIG_MODULE_SIG_FORCE=y时,未签名模块会被静默拒绝,dmesg | grep -i "signature"会报module verification failed,此时lsmod当然看不到它
lsmod 是起点,不是终点。模块是否加载只是最表层的状态,真正影响系统行为的是它有没有绑定设备、参数是否生效、签名是否被接受、依赖是否完整——这些都得靠其他命令一层层戳进去看。










