温馨提示×

如何排查linux drivers故障

小樊
32
2026-10-03 15:37:53
栏目: 智能运维

排查 Linux 驱动(driver)故障通常需要分层定位:从“硬件是否识别” → “驱动是否加载” → “设备是否正常工作” → “日志与源码”。下面是一套比较系统的排查思路和方法。


一、确认硬件是否被系统识别

1. 查看 PCI / USB 设备

lspci -nn
lsusb
  • 确认设备是否出现
  • 记录 Vendor:Device ID(如 8086:15b8)

2. 查看内核是否识别硬件

dmesg | grep -i <设备名或关键字>

例如:

dmesg | grep -i usb
dmesg | grep -i nvme

二、确认驱动是否加载

1. 查看已加载模块

lsmod

或过滤:

lsmod | grep <驱动名>

2. 查看驱动与设备的绑定关系

lspci -k -nn

示例输出中会显示:

Kernel driver in use: xhci_hcd
Kernel modules: xhci_pci

3. 手动加载 / 卸载驱动

modprobe <driver_name>
rmmod <driver_name>

若加载失败,看报错:

dmesg | tail

三、查看设备节点与接口

1. 查看设备文件

ls /dev | grep <设备>

例如:

/dev/sda
/dev/video0
/dev/ttyUSB0

2. 查看 sysfs

ls /sys/class/
ls /sys/bus/pci/devices/

可查看驱动绑定状态:

cat /sys/bus/pci/devices/0000:01:00.0/driver

四、分析内核日志(最重要)

1. 实时查看内核日志

dmesg -w

或:

journalctl -k -f

2. 常见关键词

  • probe failed
  • no such device
  • resource busy
  • timeout
  • firmware load failed

五、检查固件(Firmware)

很多驱动依赖固件:

dmesg | grep firmware

固件通常位于:

/lib/firmware/

缺失时可安装:

apt install linux-firmware

六、确认内核配置支持

1. 查看当前内核配置

zcat /proc/config.gz | grep <CONFIG_XXX>

或:

grep <CONFIG_XXX> /boot/config-$(uname -r)

2. 常见情况

  • 驱动未编译进内核
  • 被编译为模块但未加载
  • 设备树(DTB)配置错误(ARM 平台)

七、设备树问题(ARM / 嵌入式)

ls /proc/device-tree/

检查:

  • compatible 字符串
  • 引脚 / 中断配置

八、驱动调试方法

1. 打开驱动调试信息

echo 8 > /proc/sys/kernel/printk

2. 动态调试(若支持)

echo 'file driver.c +p' > /sys/kernel/debug/dynamic_debug/control

3. 使用工具

  • evtest(输入设备)
  • i2c-tools
  • usbmon
  • perf

九、典型故障速查表

现象 可能原因
设备不显示 硬件故障 / 未上电
驱动未加载 模块缺失 / 黑名单
probe 失败 资源冲突 / DTS 错误
工作不稳定 固件问题 / 中断冲突
性能差 DMA / 缓存配置错误

十、排查顺序总结(建议)

  1. 硬件是否识别(lspci/lsusb)
  2. 驱动是否加载(lsmod)
  3. 内核日志报错(dmesg)
  4. 固件是否缺失
  5. 内核配置是否支持
  6. 源码 / 设备树分析

如果你能提供具体设备类型(网卡 / GPU / USB / 摄像头等)和错误日志,我可以给你更针对性的排查步骤。

0 踩