温馨提示×

怎样测试linux drivers稳定性

小樊
45
2026-10-09 13:07:25
栏目: 智能运维

测试 Linux 驱动(driver)稳定性是一个系统性工程,通常结合功能测试、压力测试、异常测试、长期运行测试和代码/内核机制分析。下面按“从入门到进阶”的方式给你一套实用方法。


一、基础功能测试(先保证“能用”)

  1. 加载/卸载测试
insmod xxx.ko
rmmod xxx
  • 反复多次加载/卸载
  • 观察 dmesg 是否有 WARN / BUG / oops
  1. 基本接口测试
  • 字符设备:open/read/write/ioctl
  • 网络设备:ifconfig/ip、ping
  • 块设备:mkfs、mount、dd
  1. 用户态工具
  • evtest(input)
  • i2c-tools、spi-tools
  • ethtool

二、压力 / 稳定性测试(核心)

1. 内核自带测试工具

  • kmemtest / memtest
  • rcutorture(RCU 稳定性)
modprobe rcutorture
  • locktorture(锁稳定性)
modprobe locktorture

2. 驱动专用压测

  • 网络驱动:netperf、iperf3
  • 存储驱动:fio、bonnie++
  • USB:usbstress
  • GPU:glmark2、unigine

3. 并发 & 多线程

  • 多线程同时调用驱动接口
  • 多进程 open/close
  • 中断 + 用户态并发

三、异常 & 边界测试(最容易暴露 bug)

  1. 非法参数
  • ioctl 传入错误参数
  • 越界读写
  • 空指针
  1. 热插拔
  • USB / PCIe 热拔插
  • 设备突然消失
  1. 资源耗尽
  • 内存不足
  • 中断风暴
  • DMA buffer 不足
  1. kill -9 用户态程序
  • 驱动是否正确处理文件关闭

四、长时间运行(Soak Test)

  • 连续运行 24h / 72h / 7d
  • 定时脚本自动化
  • 记录:
    • CPU / 内存
    • 中断次数
    • dmesg
    • 是否内存泄漏

工具:

watch -n 1 free -m
cat /proc/interrupts

五、内核调试 & 崩溃分析(关键)

1. 打开内核调试选项

CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_DRIVER=y
CONFIG_KASAN=y
CONFIG_LOCKDEP=y
CONFIG_DEBUG_ATOMIC_SLEEP=y

2. 常用调试手段

  • dmesg
  • printk + 日志级别
  • ftrace
  • perf
  • kprobe / tracepoint

3. 崩溃分析

  • 开启:
CONFIG_MAGIC_SYSRQ=y
CONFIG_PANIC_ON_OOPS=y
  • 收集:
    • oops 信息
    • call trace
    • objdump + addr2line

六、内存 & 并发问题专项

  • KASAN:检测内存越界
  • KMEMLEAK:检测内存泄漏
  • LOCKDEP:检测死锁
  • SCHED_DEBUG

七、自动化测试框架(工程化)

  • kselftest
  • LTP (Linux Test Project)
  • Autotest
  • Jenkins + 脚本

八、一个典型的驱动稳定性测试流程

  1. 编译带调试内核
  2. 加载驱动
  3. 功能测试
  4. 压力测试(24h)
  5. 异常测试
  6. 热插拔
  7. 分析 dmesg / oops
  8. 修复 → 回归

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

  • 驱动的类型(字符 / 网络 / USB / PCIe / 块设备)
  • 是内核主线驱动还是自研驱动
  • 测试环境(x86 / ARM / 嵌入式)

我可以直接给你针对性的测试方案和命令清单。

0 踩