在Linux系统中,查看硬件驱动列表,可使用lsmod命令查看已加载模块(但内置驱动不显示),使用lspci-k命令查看PCI设备当前驱动,使用lsusb-t命令查看USB设备驱动。需特别注意驱动与固件缺失问题,使用dmesg|grepfirmware命令可辅助排查驱动和固件缺失。
如何查看Linux硬件驱动列表
时间:2026-07-09
浏览:664
文章目录
经常有人问:Linux 里怎么查看硬件驱动?其实问法不同,答案也不同——你是想看“系统当前正在运行哪些驱动”,还是想查“某个设备具体用了哪个驱动”?这两个问题对应的命令和方法完全不同。

想查看当前系统正在运行哪些硬件驱动,最直接的方法是运行 lsmod。它会列出所有已加载的内核模块,而绝大多数硬件驱动都以模块形式存在,因此这基本就是实际在用的“驱动列表”。但需要注意:lsmod 只显示已加载的驱动,并不等于系统“支持”的全部驱动。很多驱动被编译进内核(built-in),不会出现在输出里;还有一些驱动本身存在,但没有设备触发加载,也不会列出。
如果目标明确,就是要知道“系统当前正在运行哪些驱动”,直接运行:
lsmod
输出中每行第一列是驱动模块名(例如 r8169、iwlwifi、nvidia),第二列是大小,第三列是使用计数(0 表示未被设备占用,但模块仍在内存中)。
这里有几个常见误区,需要注意:
lsmod不区分 PCI、USB 或平台设备,所有已加载模块混在一起——要查找网卡驱动?需自行grep -i net或grep -E "(r81|e100|mlx|igb)"。- 模块名 ≠ 驱动名。例如
nvme模块驱动 NVMe SSD,但ahci模块也能管理部分 NVMe(取决于内核配置),不能仅凭名字下结论。 lsmod不显示哪个设备使用了哪个模块——要关联硬件,必须配合lspci -k或ls /sys/class/net/*/device/driver。
如何查看某个设备用了哪个驱动?
对于 PCI 设备(显卡、网卡、SSD 控制器等),lspci -k 是黄金组合:
lspci -k | grep -A 3 -B 1 "Kernel driver in use"
它会将每个设备下的 Kernel driver in use: 以及紧随其后的 Kernel modules: 一起输出。这里需要特别区分:
Kernel driver in use:表示当前绑定的驱动(例如amdgpu)。Kernel modules:表示内核支持的所有候选驱动(例如amdgpu nouveau),不一定都加载,也不一定都可用。- 如果
Kernel driver in use:后面是空的,说明设备没有被驱动接管——可能是未启用、firmware 缺失,或设备 ID 不匹配。
USB 设备驱动如何查看?
此时 lsusb -t 比 lsusb -v 能更快定位驱动:
lsusb -t
输出中每条设备行末尾括号里的名称就是驱动(例如 driver=uvcvideo 或 driver=usbhid)。如果括号里是 driver=none,说明未绑定驱动。
还可以用以下两种方法验证:
ls /sys/bus/usb/devices/*/driver—— 列出所有包含 driver 链接的 USB 设备路径。readlink /sys/bus/usb/devices/1-1.2/driver—— 查询具体设备所绑定的驱动(路径可从lsusb -t获取)。
为什么有些驱动不在 lsmod 中,却在 lspci 输出里?
这是因为驱动可能被静态编译进内核(built-in),而非作为模块加载。此时:
lsmod无法找到它(例如旧内核中的intel_agp通常为 built-in)。lspci -k仍然显示Kernel driver in use:(因为它确实在运行)。- 要确认,可以查看源码或运行
zcat /proc/config.gz | grep CONFIG_AGP_INTEL,看值是 =y(built-in)还是 =m(module)。
最后,一个容易被忽略的点是:驱动和 firmware 是两个概念。即使 lspci -k 显示驱动已绑定,如果 /lib/firmware/ 下缺少对应的固件文件,设备依然无法工作——此时 dmesg | grep -i firmware 才是关键线索。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。