如何在linux查看驱动程序
- Linux
- 2025-08-14
- 2
在 Linux 中,可通过
lspci -k
查看硬件及对应驱动;用
modinfo
查驱动详情;
lsmod
列已加载模块;
dmesg
可查驱动
在 Linux 系统中查看和管理驱动程序是系统维护、故障排除及性能优化的重要环节,由于 Linux 内核采用模块化设计,大部分硬件驱动以 内核模块(Kernel Modules) 的形式存在,同时也存在部分独立于内核的用户态驱动程序,以下将从多维度详细介绍查看驱动程序的方法,并辅以实用示例与表格对比,帮助读者全面掌握相关技能。
核心思路与基础概念
Linux 驱动的本质是连接操作系统与硬件设备的桥梁,其实现形式主要分为两类:
- 内核模块:动态加载/卸载的
.ko
文件,存储在/lib/modules/$(uname -r)/kernel/drivers/
目录下; - 内置驱动:直接编译进内核二进制文件(vmlinuz),无需单独加载。
查看驱动的核心目标是建立以下映射关系:物理设备 → 设备节点 → 关联的驱动模块,这一过程需要结合多种工具协同分析。
逐层递进的查看方法
识别硬件设备列表(第一层)
通过 lspci
和 lsusb
命令快速枚举 PCI/USB 总线上的设备:
# 查看 PCI 设备(含显卡、网卡、声卡等) lspci -vmm # -v: 显示详细信息; -m: 映射中断号; -m: 显示内存范围 # 查看 USB 设备 lsusb -tv # -t: 树状结构展示; -v: 详细模式
示例输出解析:
执行 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 后,可通过以下方式精准定位驱动模块:
# 方法1:通过设备ID反向查找驱动 find /sys/bus/pci/devices/ -name modalias | grep <设备ID> # 示例:查找 Vendor=0x8086, Device=0x0156(英特尔无线网卡) find /sys/bus/pci/devices/ -name modalias | grep "8086:0156" # 方法2:直接查询已加载的驱动模块 modinfo <模块名> # 查看模块元数据(依赖关系、作者等) lsmod | grep <关键词> # 列出已加载的模块
技巧:若 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
(内核日志)获取更多调试信息