测试内核模块

Posted

技术标签:

【中文标题】测试内核模块【英文标题】:Testing a kernel module 【发布时间】:2016-03-19 18:12:24 【问题描述】:

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

最初尝试使用https://github.com/ThrowTheSwitch/CMock,但遇到了问题。任何关于如何做到这一点的文章链接也会很棒。 (对于内核模块)。在这里提供更多详细信息:作为内核模块编译会出错,因为 stdio 不可用,为用户空间编译会出错,因为它找不到像 printk 这样的东西。

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

我已经查看了几个questions 和articles about this,但没有找到答案,也没有找到明确的原因说明为什么这是不可能的。

【问题讨论】:

【参考方案1】:

我会按照以下方式进行:

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

【讨论】:

我喜欢这个想法,但是对于已经编写好的代码很难付诸实践。

以上是关于测试内核模块的主要内容,如果未能解决你的问题,请参考以下文章

对内核模块代码进行单元测试是不是可行?

内核模块编译实践

实验二 内核模块编译

分析 Linux 内核模块

一个内核定时器模块

内核模块管理工具