温馨提示×

debian drivers如何调试

小樊
39
2026-10-01 17:52:24
栏目: 智能运维

在 Debian 系统里“调试驱动(drivers)”通常涉及 内核模块(kernel modules / .ko)、硬件驱动、以及 日志与内核接口。下面按常见场景给你一套实用调试思路。


一、先确认驱动类型

Debian 的驱动一般是:

  • 内核内置驱动(built-in)
  • 可加载内核模块(.ko,如 iwlwifi、nouveau、r8169)
  • 用户态驱动(如 USB 部分、DPDK、某些 GPU 用户库)

先确认:

lspci -k
lsusb -t
modinfo <驱动名>

二、查看驱动是否加载

lsmod | grep <驱动名>

手动加载/卸载:

sudo modprobe <驱动名>
sudo modprobe -r <驱动名>

查看依赖:

modprobe --show-depends <驱动名>

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

1. dmesg(实时)

dmesg -T
dmesg -w

过滤某驱动:

dmesg | grep <驱动名>

2. journalctl

sudo journalctl -k
sudo journalctl -k | grep <驱动名>

四、开启驱动调试信息

很多驱动支持 debug 参数:

modinfo <驱动名> | grep parm

示例(以 iwlwifi 为例):

sudo modprobe iwlwifi debug=0x40000

临时写参数(sysfs):

echo 1 | sudo tee /sys/module/<驱动名>/parameters/debug

五、使用动态调试(dyndbg)

Debian 内核通常支持 dynamic_debug:

sudo mount -t debugfs none /sys/kernel/debug

开启某文件调试:

echo 'file <driver_file.c> +p' | sudo tee /sys/kernel/debug/dynamic_debug/control

查看输出:

dmesg -w

六、查看 /sys 和 /proc

ls /sys/class/
ls /sys/bus/
cat /proc/modules

例如网卡:

ethtool -i eth0

七、调试自己写的内核模块

1. 编译带调试信息

make KCFLAGS="-g"

2. 使用 printk

printk(KERN_DEBUG "driver: debug info\n");

3. 使用 kgdb / kdb(高级)

  • 需要 双机或虚拟机
  • 内核开启:
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y

八、常见驱动问题排查清单

  • [ ] 内核版本与驱动匹配(uname -r)
  • [ ] 固件缺失(/lib/firmware)
  • [ ] Secure Boot 阻止未签名模块
  • [ ] 黑屏/无设备:BIOS 设置、ACPI 问题
  • [ ] 驱动冲突(lsmod 看是否有重复)

九、推荐工具

  • ethtool
  • lspci -vv
  • usbmon
  • perf
  • bpftrace / eBPF
  • strace(用户态)

如果你能告诉我:

  • 具体是什么驱动(网卡 / 显卡 / USB / 自定义模块)
  • Debian 版本(11 / 12)
  • 报错信息或现象

我可以直接给你“对症”的调试命令。

0 踩