最直接方法是运行lsmod | grep 模块名,输出非空即表示模块已加载;但模块加载不等于硬件绑定,需配合lspci -k或lsusb -t确认Kernel driver in use字段。

Linux里“已安装的驱动”不是个单一状态——.ko 文件躺在 /lib/modules/$(uname -r)/ 里叫“已安装”,lsmod 里出现才叫“已加载”。绝大多数人真正想查的是后者:当前正在跑、管着硬件的那个驱动。
怎么确认某个驱动模块是否已在内核中运行
最直接的办法就是查 lsmod 输出:
- 运行
lsmod | grep nvme(注意大小写,nvm或NVME都查不到) - 输出非空,说明模块已加载;为空 ≠ 没装驱动,只代表没进内核
- 若不确定模块名,先用
lspci -k或lsusb -t看设备绑定了哪个Kernel driver in use,再拿那个名字去grep -
Used by列为 0 不代表没在用——比如uvcvideo常显示 0,但摄像头照样出图
怎么查驱动对应哪块硬件设备
lsmod 只告诉你模块在跑,不告诉你它管谁。必须结合硬件发现命令:
- PCI 设备(显卡、网卡、NVMe SSD):运行
lspci -k,找Kernel driver in use:后面的名字 - USB 设备(摄像头、U 盘、串口转换器):运行
lsusb -t,看每个设备节点下的driver=xxx - 想进一步确认绑定关系:用
modinfo -F alias xxx查模块支持的设备 ID,再比对lspci -nn或lsusb -v里的idVendor:idProduct
为什么刚装完驱动却不在 lsmod 里
常见原因不是“没装好”,而是没触发加载:
- 检查是否被黑名单:
grep -r "blacklist\|install.*false" /etc/modprobe.d/ - 手动试加载:
sudo modprobe r8169(替换为你想查的模块名),失败立刻看dmesg | tail -20 - 常见报错
Unknown symbol in module表示依赖模块缺失,得先modprobe依赖项 - NVIDIA/AMD 闭源驱动升级内核后必须重装
nvidia-kernel-dkms类包,否则.ko文件版本不匹配,modprobe会静默失败
怎么查驱动版本和固件信息
模块名和版本号往往藏在不同地方:
- 内核模块版本:
modinfo -F version nvme(部分模块不带该字段) - 网卡驱动详情:
ethtool -i enp0s31f6(接口名用ip -br a查) - GPU 驱动:
nvidia-smi(NVIDIA)、glxinfo | grep "OpenGL renderer"(开源 Mesa 驱动) - 固件版本:
lspci -vv -s 00:1f.2 | grep Firmware(PCI 设备),或cat /sys/class/net/enp0s31f6/device/firmware_rev(部分网卡)
真正容易被忽略的是:驱动加载依赖硬件事件或配置触发,不是“放好文件就自动生效”。lsmod 是快照,lspci -k 和 lsusb -t 才是映射真实硬件的桥梁。别只盯着一个命令输出下结论。



















