CentOS 驱动测试方法与流程
一、通用流程与快速验证
- 编译与安装
- 内核模块:使用内核构建系统编译并安装
- 示例:make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
- 安装:sudo make install(或手动复制到 /lib/modules/$(uname -r)/extra 后执行 depmod -a)
- 加载与卸载
- 加载:sudo insmod your_driver.ko 或 sudo modprobe your_driver
- 卸载:sudo rmmod your_driver
- 状态检查
- 模块:lsmod | grep your_driver
- 内核日志:dmesg | tail -n 50 或 dmesg | grep your_driver
- 硬件识别
- PCI/USB:lspci | grep -i <关键词/VendorID/DeviceID>,lsusb
- 设备节点:ls -l /dev/<your_device>;必要时检查 /sys/class//
- 用户态验证
- 字符/块设备:cat/echo 或编写最小用户态程序 open/read/write/ioctl 验证基本功能与错误处理
- 回归与清理
- 多次加载/卸载与重复用例;异常路径测试(传非法参数、断连设备等);测试后恢复环境(rmmod、清理 udev 规则/临时文件)
以上步骤覆盖了驱动加载、状态观测、硬件绑定与用户态验证的关键环节,可作为大多数内核模块的最小验证闭环。
二、按设备类型的测试要点与工具
| 设备类型 |
关键检查 |
常用工具与命令 |
典型测试用例 |
| 字符/平台设备 |
设备节点创建、权限、open/release/read/write/ioctl 正常 |
dmesg、lsmod、ls -l /dev/、strace |
基本读写、ioctl 参数边界、并发打开关闭 |
| 块设备/存储 |
分区与挂载、I/O 吞吐与延迟、错误计数 |
lsblk、mount、umount、fio、dd、iostat、smartctl |
顺序/随机读写、队列深度/并发、SMART 健康与自检 |
| GPU/NVIDIA |
驱动加载、设备绑定、计算/图形可用性 |
lspci、lsmod、nvidia-smi |
nvidia-smi 稳定性、CUDA 样例/压力测试(如 gpu_burn) |
| 网络接口 |
链路/速率/双工、收发包与丢包 |
ip link、ethtool、iperf3 |
吞吐、时延、丢包与重传、长稳流量 |
示例要点:
- 存储基准与健康检查
- 吞吐/缓存:hdparm -t /dev/sdX(缓冲读)、hdparm -T /dev/sdX(缓存读)
- 综合基准:bonnie++ -d /tmp -r $(free -m | awk ‘/^Mem:/{print int($2/1024)}’) -u
- 健康/自检:smartctl -i /dev/sdX;smartctl -H /dev/sdX;smartctl -t short/long /dev/sdX;smartctl -l selftest /dev/sdX
- GPU 验证
- 驱动加载:lsmod | grep nvidia;nvidia-smi 输出驱动版本、GPU 利用率、显存等
- 压力测试:gpu_burn 进行稳定性与温度压力验证(需先装 CUDA 工具链/驱动)
三、性能基准与稳定性测试
- 明确目标与指标
- 吞吐(MB/s)、IOPS、延迟(ms)、抖动、CPU/中断占用、错误率等;与需求或基线对比
- 工具选型与场景
- 存储:fio(灵活 I/O 模型)、dd(快速拷贝基线)、bonnie++(文件系统/目录操作)
- 网络:iperf3(吞吐/时延)、流量回放/长稳 ping
- 通用压力:stress-ng(CPU/内存/IO/文件系统综合压测)
- 观测:iostat/vmstat/sar/ethtool(资源与链路层指标)
- 执行与记录
- 预热→正式跑→冷却;固定并发/队列/块大小;每组至少3–5 次取中位数
- 记录命令、内核版本、固件版本、测试时间与环境干扰因素,便于复现与回溯
四、常见问题定位与注意事项
- 驱动未加载或符号缺失
- 检查:lsmod、dmesg;确认依赖模块已加载;若报未解析符号,检查是否导出/依赖配置
- 设备未出现或权限异常
- 检查:lspci/lsusb、dmesg;确认 udev 规则与 /dev 权限;必要时手动 mknod 验证
- 与开源驱动冲突(以 NVIDIA 为例)
- 现象:nouveau 与 nvidia 冲突导致 X/Wayland 或 nvidia-smi 失败
- 处理:在 /etc/modprobe.d/blacklist.conf 中加入 blacklist nouveau 与 options nouveau modeset=0,备份并重建 initramfs,重启后再装官方驱动
- 虚拟机与 vGPU
- 宿主机与虚拟机分别验证驱动加载与设备绑定;使用 nvidia-smi 确认 vGPU/实例状态与 MIG 配置
- 安全与可重复性
- 优先在隔离环境/非生产设备上测试;变更前快照/备份;测试后恢复配置与清理临时文件
五、最小可复现实例字符设备驱动测试
- 驱动侧(内核模块骨架要点)
- file_operations 实现 open/release/read/write;register_chrdev/class_create/device_create 创建 /dev 节点;module_init/exit 完成注册与清理
- 用户侧
- 最小测试程序:open(“/dev/your_device”, O_RDWR);write/ read 小缓冲区;ioctl 传参与返回值检查;多进程/多线程并发;close
- 验证步骤
- make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
- sudo insmod your_driver.ko;lsmod | grep your_driver;dmesg | tail
- ls -l /dev/your_device;运行用户态测试程序,观察返回值与 dmesg 日志
- sudo rmmod your_driver;再次检查 dmesg 无异常泄漏
该流程覆盖驱动编译、加载、设备节点、用户态交互与清理,适合作为字符设备的最小验证模板。