温馨提示×

怎样排查linux驱动问题

小樊
47
2026-09-18 17:21:54
栏目: 智能运维

排查 Linux 驱动问题通常是一个“从现象到内核,从日志到代码”的系统性过程。下面给你一套通用且实战导向的排查思路,按优先级和常用手段组织。


一、先明确问题现象

先搞清楚:

  • 驱动加载失败,还是设备不工作
  • 内核崩溃 / 死机,还是功能异常
  • 新驱动,还是之前正常现在异常
  • 是否和内核升级 / 固件更新 / 硬件更换有关?

二、查看系统日志(最重要)

1. dmesg

dmesg | tail -100
dmesg | grep -i <driver_name>

重点关注:

  • probe failed
  • No such device
  • Resource busy
  • timeout
  • IRQDMA 相关错误

2. 系统日志

journalctl -k          # 内核日志
journalctl -xe         # 系统错误

三、确认驱动是否加载

1. 查看已加载模块

lsmod | grep <driver>

2. 查看驱动信息

modinfo <driver>

3. 手动加载测试

sudo modprobe <driver>
dmesg

加载失败常见原因:

  • 版本不匹配
  • 依赖模块缺失
  • 符号冲突

四、确认设备是否被识别

1. 查看设备

lspci -vvv
lsusb -vvv

2. 查看设备树(嵌入式)

ls /proc/device-tree/

3. 查看 sysfs

ls /sys/bus/<bus>/devices/
cat /sys/class/<class>/<device>/uevent

五、检查设备与驱动绑定

1. 查看驱动绑定情况

ls /sys/bus/<bus>/drivers/<driver>/

2. 手动绑定

echo <device> > /sys/bus/<bus>/drivers/<driver>/bind

3. 解绑

echo <device> > /sys/bus/<bus>/drivers/<driver>/unbind

六、检查硬件资源冲突

常见问题:

  • IRQ 冲突
  • IO / Memory 地址冲突
  • DMA 不可用

查看:

cat /proc/interrupts
cat /proc/iomem
cat /proc/ioports

七、使用调试手段

1. 打开驱动调试信息

echo 8 > /proc/sys/kernel/printk

或修改驱动中的 pr_debug()

2. 使用 dynamic_debug

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

3. ftrace

trace-cmd record -p function -l <driver>_*

八、确认用户空间问题

有时不是驱动问题,而是:

  • udev 规则错误
  • 权限不足
  • 应用层调用错误

检查:

ls -l /dev/<device>
udevadm monitor
strace <app>

九、内核崩溃 / Oops 排查

如果是 panic:

  • 保存 dmesg / kmsg
  • 查看 Call Trace
  • 使用 addr2line 定位代码行
addr2line -e vmlinux <address>

十、常见排查清单总结

✅ dmesg 有无错误
✅ 驱动是否加载
✅ 设备是否被识别
✅ 资源是否冲突
✅ 用户空间是否异常
✅ 是否内核版本不匹配


如果你愿意,可以告诉我:

  • 具体驱动类型(PCI / USB / I2C / 网卡 / GPU / 自研驱动)
  • 内核版本
  • 错误日志片段

我可以直接帮你定位问题。

0