排查 Linux 驱动问题通常是一个“从现象到内核,从日志到代码”的系统性过程。下面给你一套通用且实战导向的排查思路,按优先级和常用手段组织。
先搞清楚:
dmesgdmesg | tail -100
dmesg | grep -i <driver_name>
重点关注:
probe failedNo such deviceResource busytimeoutIRQ、DMA 相关错误journalctl -k # 内核日志
journalctl -xe # 系统错误
lsmod | grep <driver>
modinfo <driver>
sudo modprobe <driver>
dmesg
加载失败常见原因:
lspci -vvv
lsusb -vvv
ls /proc/device-tree/
ls /sys/bus/<bus>/devices/
cat /sys/class/<class>/<device>/uevent
ls /sys/bus/<bus>/drivers/<driver>/
echo <device> > /sys/bus/<bus>/drivers/<driver>/bind
echo <device> > /sys/bus/<bus>/drivers/<driver>/unbind
常见问题:
查看:
cat /proc/interrupts
cat /proc/iomem
cat /proc/ioports
echo 8 > /proc/sys/kernel/printk
或修改驱动中的 pr_debug()
dynamic_debugecho "file <driver>.c +p" > /sys/kernel/debug/dynamic_debug/control
ftracetrace-cmd record -p function -l <driver>_*
有时不是驱动问题,而是:
检查:
ls -l /dev/<device>
udevadm monitor
strace <app>
如果是 panic:
dmesg / kmsgCall Traceaddr2line 定位代码行addr2line -e vmlinux <address>
✅ dmesg 有无错误
✅ 驱动是否加载
✅ 设备是否被识别
✅ 资源是否冲突
✅ 用户空间是否异常
✅ 是否内核版本不匹配
如果你愿意,可以告诉我:
我可以直接帮你定位问题。