测试内核模块

Testing a kernel module

我对模拟函数和全局变量感兴趣,以便对内核模块进行单元测试。

最初尝试 https://github.com/ThrowTheSwitch/CMock 但 运行 遇到问题。任何有关如何执行此操作的文章链接也很棒。 (对于内核模块)。在这里提供更多细节:作为内核模块编译会出错,因为 stdio 不可用,为用户 space 编译会出错,因为它找不到像 printk.

这样的东西

理想情况下,我会有一个用户级可执行文件或一个内核模块,可以 运行 对我的函数进行单元测试。我遇到问题的部分是模拟全局依赖项,例如函数为了编写像样的测试所依赖的结构。

我已经经历了几次 questions and articles about 但没有找到答案,也没有找到为什么这不可能的明确原因。

我会按如下方式进行:

  • 实现你的内核模块
  • 定义一个 API 让用户级程序测试您的模块,它可以基于:
    • /dev/ 中的字符设备(您可以在其中定义适当的 ioctl);
    • /proc/中的一个文件(气馁);
    • 特定系统调用(不鼓励);
    • /sys/
    • 中的条目
  • 在用户级实施一个程序(以防万一,使用像 CUnit or googletest 这样的适当框架),它与内核模块交互以测试各种功能