在 Linux 下“测试驱动”通常包括功能测试、稳定性测试、性能测试、边界/异常测试等,不同驱动类型(字符设备、块设备、网络设备、USB、PCIe 等)测试方法不完全一样。下面按通用流程 + 常见手段给你一个比较系统的说明。
uname -a
lsmod
modinfo your_driver.ko
make
sudo insmod your_driver.ko
dmesg | tail
sudo rmmod your_driver
dmesg | tail
假设驱动创建设备节点 /dev/mydev
# 写
echo "hello" > /dev/mydev
# 读
cat /dev/mydev
也可用 C 程序:
fd = open("/dev/mydev", O_RDWR);
write(fd, "test", 4);
read(fd, buf, 4);
ioctl(fd, CMD_TEST, &arg);
cat /sys/class/mydev/status
echo 1 > /sys/class/mydev/enable
dmesg -w
驱动中:
printk(KERN_INFO "driver test: %d\n", val);
echo -n 'file mydriver.c +p' > /sys/kernel/debug/dynamic_debug/control
echo function > /sys/kernel/debug/tracing/current_tracer
echo mydriver_* > /sys/kernel/debug/tracing/set_ftrace_filter
cat /sys/kernel/debug/tracing/trace
dd(块设备)fio(磁盘/存储驱动)iperf(网络驱动)evtest(输入设备)lsusb / lspci写一个 test app:
while true; do
echo 1 > /dev/mydev
cat /dev/mydev
done
kmemleakecho scan > /sys/kernel/debug/kmemleak
cat /sys/kernel/debug/kmemleak
./test_driver.sh
kselftestKUnit(内核单元测试)| 驱动类型 | 测试方法 |
|---|---|
| 字符设备 | read/write/ioctl |
| 块设备 | dd / fio |
| 网络驱动 | ping / iperf |
| USB | 热插拔 + lsusb |
| Input | evtest |
| PCIe | lspci + DMA测试 |
如果你愿意,可以告诉我:
我可以直接给你针对性的测试代码和测试方案。