如何在linux查看驱动程序
- Linux
- 2025-08-14
- 7
在 Linux 系统中查看和管理驱动程序是系统维护、故障排除及性能优化的重要环节,由于 Linux 内核采用模块化设计,大部分硬件驱动以 内核模块(Kernel Modules) 的形式存在,同时也存在部分独立于内核的用户态驱动程序,以下将从多维度详细介绍查看驱动程序的方法,并辅以实用示例与表格对比,帮助读者全面掌握相关技能。
核心思路与基础概念
Linux 驱动的本质是连接操作系统与硬件设备的桥梁,其实现形式主要分为两类:
- 内核模块:动态加载/卸载的 .ko 文件,存储在 /lib/modules/$(uname -r)/kernel/drivers/ 目录下;
- 内置驱动:直接编译进内核二进制文件(vmlinuz),无需单独加载。
查看驱动的核心目标是建立以下映射关系:物理设备 → 设备节点 → 关联的驱动模块,这一过程需要结合多种工具协同分析。
逐层递进的查看方法
识别硬件设备列表(第一层)
通过 lspci 和 lsusb 命令快速枚举 PCI/USB 总线上的设备:
示例输出解析:
执行 lspci -v 后,某条记录如下:
00:02.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 10) Subsystem: Lenovo Device [17aa:38a4] Kernel driver in use: r8169 Kernel modules: r8169
此处明确标注了该网卡使用的驱动名为 r8169。
| 命令 | 适用场景 | 关键参数 | 输出重点 |
|---|---|---|---|
| lspci | PCI/PCIe 设备 | -v(详细), -n(数字ID) | “Kernel driver in use” |
| lsusb | USB 设备 | -t(拓扑), -v(详细) | “Driver=” 字段 |
| lshw | 全系统硬件清单 | -class network(按类别过滤) | description 字段 |
| udevadm info | 设备树查询 | -a(所有属性), -p $(udevadm info --path ...) | SYSFS{idVendor/Product} |
定位驱动模块(第二层)
当已知设备名称或 ID 后,可通过以下方式精准定位驱动模块:

技巧:若 lsmod 未找到目标模块,可能是因为该驱动未被加载,此时需检查 dmesg 日志确认是否因错误未能加载。
验证驱动状态(第三层)
即使驱动已加载,仍需验证其是否正常工作:
# 查看内核日志中与驱动相关的事件 dmesg | grep -i <模块名> # 例:dmesg | grep -i iwlwifi # 检查设备节点是否成功创建 ls -l /dev/ # 观察是否有对应设备文件(如 /dev/eth0, /dev/nvidia0) stat /dev/<设备文件> # 查看权限和归属用户
️ 注意:某些设备可能需要额外的固件支持(如 Intel Microcode),可通过 firmware-check 工具检测。

特殊场景处理
- 混合图形环境:若同时存在集成显卡和独立显卡,使用 prime-select query 查看当前默认 GPU;
- 容器/虚拟机:在 Docker/KVM 环境中,设备直通需通过 --device 参数指定宿主机设备;
- 第三方闭源驱动:如 NVIDIA 显卡驱动,需通过 nvidia-smi 命令验证状态。
典型设备驱动查看示例
| 设备类型 | 推荐命令组合 | 预期结果 |
|---|---|---|
| 有线网卡 | lspci -v | grep -A3 Ethernet + modinfo r8169 | 确认驱动版本、作者及依赖关系 |
| Wi-Fi 适配器 | iw dev + modinfo iwlwifi | 显示无线接口名称及驱动支持的能力集 |
| NVIDIA 显卡 | nvidia-smi + lsmod | grep nvidia | 输出 GPU 利用率、显存使用量及驱动模块是否加载 |
| 固态硬盘 | lsblk -d -o ROTA + hdparm -I /dev/sda | 判断是否为 SSD(ROTA=none),并查看传输模式(SATA III/NVMe) |
| USB 外设 | lsusb -D /dev/bus/usb/001/004 | 显示具体设备的制造商、产品编号及当前配置 |
常见问题排查路径
当遇到设备无法识别时,按以下流程逐步诊断:
- 物理层:确认设备已正确插入且供电正常;
- BIOS/UEFI:启用相关功能(如 CSM(Compatibility Support Module) for Windows 兼容);
- 内核支持:检查 config 配置文件是否启用对应驱动(make menuconfig);
- 固件缺失:尝试安装厂商提供的专有固件(如 Mellanox OFED);
- 冲突检测:使用 lshw -short 排查资源占用冲突(IRQ/IO端口);
- 社区求助:携带 lspci -vvnn 和 dmesg 日志到论坛提问。
相关问答 FAQs
Q1: 我的新鼠标插上没反应,如何快速定位原因?
A: 执行以下命令组合:
# 1. 查看 USB 设备是否被识别 lsusb | grep "Logitech" # 替换为你的品牌关键词 # 2. 检查输入子系统日志 dmesg | grep -i input # 3. 尝试手动加载通用驱动 sudo modprobe usbhid # 4. 检查 Xorg 配置 journalctl -xe | grep -i evdev # 观察是否有权限拒绝错误
若仍无效,可能是硬件故障或需要更新 udev 规则。
Q2: 为什么我的声卡在 ALSA 中显示为 “card 1” 但没有声音?
A: 按顺序执行以下步骤:
- 确认驱动已加载:lsmod | grep snd;
- 查看声卡型号:aplay -l;
- 测试播放能力:speaker-test -c2;
- 检查 PulseAudio 服务状态:systemctl status pulseaudio;
- 若使用龙芯/兆芯等国产 CPU,需额外安装 alsa-firmware 包。
通过上述方法,您可以系统性地查看和管理 Linux 系统中的各种驱动程序,实际操作中建议结合具体硬件型号查阅官方文档,必要时参考 /var/log/Xorg.0.log(图形驱动)或 /var/log/kern.log(内核日志)获取更多调试信息
