温馨提示×

linux驱动怎样测试

小樊
42
2026-09-15 18:49:28
栏目: 智能运维

在 Linux 下“测试驱动”通常包括功能测试、稳定性测试、性能测试、边界/异常测试等,不同驱动类型(字符设备、块设备、网络设备、USB、PCIe 等)测试方法不完全一样。下面按通用流程 + 常见手段给你一个比较系统的说明。


一、驱动测试前的准备

1. 确认内核与模块环境

uname -a
lsmod
modinfo your_driver.ko

2. 编译并加载驱动

make
sudo insmod your_driver.ko
dmesg | tail

3. 卸载驱动

sudo rmmod your_driver
dmesg | tail

二、基础功能测试(最常见)

1. 字符设备驱动测试

假设驱动创建设备节点 /dev/mydev

# 写
echo "hello" > /dev/mydev

# 读
cat /dev/mydev

也可用 C 程序:

fd = open("/dev/mydev", O_RDWR);
write(fd, "test", 4);
read(fd, buf, 4);

2. 使用 ioctl 测试

ioctl(fd, CMD_TEST, &arg);

3. sysfs / proc 接口测试

cat /sys/class/mydev/status
echo 1 > /sys/class/mydev/enable

三、日志与调试手段(非常重要)

1. dmesg / printk

dmesg -w

驱动中:

printk(KERN_INFO "driver test: %d\n", val);

2. 动态调试

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

3. 使用 ftrace

echo function > /sys/kernel/debug/tracing/current_tracer
echo mydriver_* > /sys/kernel/debug/tracing/set_ftrace_filter
cat /sys/kernel/debug/tracing/trace

四、用户态测试工具

1. 通用工具

  • dd(块设备)
  • fio(磁盘/存储驱动)
  • iperf(网络驱动)
  • evtest(输入设备)
  • lsusb / lspci

2. 自定义测试程序

写一个 test app:

  • open / read / write / ioctl
  • 多线程 / 多进程并发
  • 异常情况(非法参数、越界)

五、稳定性与压力测试

1. 长时间运行

while true; do
  echo 1 > /dev/mydev
  cat /dev/mydev
done

2. 并发测试

  • 多线程同时打开设备
  • 多进程读写
  • 热插拔(USB / PCIe)

3. 内存与泄漏检查

  • kmemleak
echo scan > /sys/kernel/debug/kmemleak
cat /sys/kernel/debug/kmemleak

六、异常与边界测试

  • 传入 NULL 指针
  • 非法 ioctl 命令
  • 超大 buffer
  • 设备未就绪时操作
  • 中断丢失 / 超时

七、自动化测试(推荐)

1. 使用 unittest + shell

./test_driver.sh

2. Linux 内核自测框架

  • kselftest
  • KUnit(内核单元测试)

八、常见驱动测试类型速查

驱动类型 测试方法
字符设备 read/write/ioctl
块设备 dd / fio
网络驱动 ping / iperf
USB 热插拔 + lsusb
Input evtest
PCIe lspci + DMA测试

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

  • ✅ 你写的是哪类驱动
  • ✅ 是内核模块还是平台驱动
  • ✅ 有没有设备树 / 硬件

我可以直接给你针对性的测试代码和测试方案。

0 踩