温馨提示×

怎样排查linux驱动故障

小樊
73
2026-10-15 08:45:57
栏目: 智能运维

排查 Linux 驱动故障是一个系统性的过程,通常涉及内核日志、硬件状态、模块加载、源码/配置等多个层面。下面按通用排查流程 + 常用工具 + 典型场景来说明。


一、先确认“是不是驱动问题”

在深入驱动前,先排除非驱动因素:

  1. 硬件是否识别
lspci -nn
lsusb
lshw
  • 设备是否出现在列表中
  • 是否有正确的 Vendor/Device ID
  1. 系统是否识别为可用设备
dmesg | tail
ip link
ls /dev
  • 网络/声卡/USB 等设备节点是否存在

二、查看内核日志(最重要)

驱动问题 90% 能从日志看到线索。

1. 实时查看内核日志

dmesg -T
journalctl -k

常见关键字:

  • error
  • failed
  • timeout
  • probe failed
  • no such device
  • resource busy

2. 触发问题后立刻看日志

dmesg -w
# 或
journalctl -f -k

三、检查驱动模块状态

1. 查看模块是否加载

lsmod | grep xxx

2. 查看模块信息

modinfo xxx

关注:

  • author
  • version
  • depends
  • parm(模块参数)

3. 手动加载/卸载

sudo modprobe -v xxx
sudo modprobe -rv xxx

报错通常会直接显示原因。


四、确认驱动与设备绑定

1. 查看设备使用的驱动

lspci -k -nn

示例:

Kernel driver in use: iwlwifi
Kernel modules: iwlwifi

2. USB 设备

lsusb -t

3. 手动绑定/解绑

echo "0000:03:00.0" > /sys/bus/pci/drivers/xxx/unbind
echo "0000:03:00.0" > /sys/bus/pci/drivers/yyy/bind

五、查看驱动内部状态(高级)

1. sysfs 接口

ls /sys/class/
cat /sys/class/net/eth0/operstate

2. debugfs(如果驱动支持)

mount | grep debugfs
cat /sys/kernel/debug/xxx/status

3. proc 接口

cat /proc/interrupts
cat /proc/iomem

六、常见故障类型与排查点

1. 驱动加载失败

可能原因:

  • 内核版本不匹配
  • 缺少依赖模块
  • 签名问题(Secure Boot)

排查:

modprobe xxx
dmesg | tail

2. 设备识别但不可用

  • 驱动 probe 成功但初始化失败
  • 固件缺失

检查固件:

dmesg | grep firmware
ls /lib/firmware

3. 驱动崩溃 / Kernel Panic

  • 查看 crash 日志
journalctl -b -1 -k
  • 开启 crashkernel + kdump

4. 性能/稳定性问题

  • 中断不均衡
cat /proc/interrupts
  • DMA / IO 问题
  • 电源管理(ACPI)

七、调试手段(开发级)

1. 动态调试

echo -n 'file xxx.c +p' > /sys/kernel/debug/dynamic_debug/control

2. 打印调用栈

  • dump_stack()
  • WARN_ON()

3. 使用 ftrace

trace-cmd record -p function -l xxx_*

八、排查思路总结(口诀)

先看设备 → 再看日志 → 再看模块 → 再看绑定 → 最后看代码


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

  • 具体是 哪类设备(网卡 / GPU / USB / 声卡)
  • 内核版本
  • 具体报错信息

我可以给你更针对性的排查步骤。

0 踩