Linux内核开发人员在提交代码后如何在本地测试他们的代码?他们是否使用某种单元测试和构建自动化?测试计划?


当前回答

当然,内核本身及其部分在发布之前要进行测试,但这些测试只覆盖基本功能。有一些测试系统执行Linux内核的测试:

Linux测试项目(LTP)向开源社区交付测试套件,以验证Linux的可靠性和稳定性。LTP测试套件包含一组用于测试Linux内核和相关特性的工具。

autotest -用于完全自动化测试的框架。它主要用于测试Linux内核,但也有许多其他用途,例如在Linux平台下验证新硬件、虚拟化测试和其他一般用户空间程序测试。它是一个基于GPL的开源项目,被许多组织使用和开发,包括谷歌、IBM、Red Hat和许多其他组织。

还有一些主要的GNU/Linux发行公司开发的认证系统。这些系统通常检查完整的GNU/Linux发行版与硬件的兼容性。有由Novell、Red Hat、Oracle、Canonical和谷歌开发的认证系统。

还有一些Linux内核的动态分析系统:

Kmemleak是Linux内核中包含的内存泄漏检测器。它提供了一种检测可能的内核内存泄漏的方法,其方式类似于跟踪垃圾收集器,不同之处在于孤立对象不被释放,而仅通过/sys/kernel/debug/kmemleak报告。

Kmemcheck捕获动态分配(即使用kmalloc())的对内存的每一次读写。如果读取之前没有写入的内存地址,则将消息打印到内核日志中。它也是Linux内核的一部分。

错误注入框架(包含在Linux内核中)允许将错误和异常注入到应用程序的逻辑中,以实现更高的系统覆盖率和容错性。

其他回答

还有:

MMTests是用来分析结果的基准测试和脚本的集合。

它是Linux系统调用模糊测试器。

此外,SourceForge的LTP页面已经相当过时,项目已经转移到GitHub。

当然,内核本身及其部分在发布之前要进行测试,但这些测试只覆盖基本功能。有一些测试系统执行Linux内核的测试:

Linux测试项目(LTP)向开源社区交付测试套件,以验证Linux的可靠性和稳定性。LTP测试套件包含一组用于测试Linux内核和相关特性的工具。

autotest -用于完全自动化测试的框架。它主要用于测试Linux内核,但也有许多其他用途,例如在Linux平台下验证新硬件、虚拟化测试和其他一般用户空间程序测试。它是一个基于GPL的开源项目,被许多组织使用和开发,包括谷歌、IBM、Red Hat和许多其他组织。

还有一些主要的GNU/Linux发行公司开发的认证系统。这些系统通常检查完整的GNU/Linux发行版与硬件的兼容性。有由Novell、Red Hat、Oracle、Canonical和谷歌开发的认证系统。

还有一些Linux内核的动态分析系统:

Kmemleak是Linux内核中包含的内存泄漏检测器。它提供了一种检测可能的内核内存泄漏的方法,其方式类似于跟踪垃圾收集器,不同之处在于孤立对象不被释放,而仅通过/sys/kernel/debug/kmemleak报告。

Kmemcheck捕获动态分配(即使用kmalloc())的对内存的每一次读写。如果读取之前没有写入的内存地址,则将消息打印到内核日志中。它也是Linux内核的一部分。

错误注入框架(包含在Linux内核中)允许将错误和异常注入到应用程序的逻辑中,以实现更高的系统覆盖率和容错性。

adobriyan提到了Ingo的随机配置构建测试循环。现在,零日测试机器人(又名kbuild测试机器人)几乎涵盖了这一点。这里有一篇关于基础结构的不错的文章:内核构建/引导测试

这种设置背后的想法是尽快通知开发人员,以便他们能够尽快纠正错误(在某些情况下,在补丁进入Linus的树之前,因为kbuild基础设施也会针对维护人员的子系统树进行测试)。

我曾经做过Linux内核编译,并对Android (Android 6.0 (Marshmallow)和Android 7.0 (Nougat))做过一些修改,其中我使用的是Linux版本3。我在Linux系统上交叉编译它,手动调试错误,然后在Android上运行它的引导映像文件,检查它是否进入了一个漏洞。如果它运行完美,则意味着它根据系统需求进行了完美的编译。

用于MotoG内核编译

注意:Linux内核将根据依赖于系统硬件的需求进行更改

一旦贡献者提交了他们的补丁文件并发出了合并请求,Linux看门人就会通过集成和审查补丁来检查补丁。一旦成功,他们将把补丁合并到相关的分支中,并发布一个新版本。

Linux测试项目是提供在应用补丁后针对内核运行的测试场景(测试用例)的主要来源。这可能需要大约2 ~ 4个小时,这取决于情况。

请注意所选内核将要测试的文件系统。 例如:ext4生成的结果与ext3不同,依此类推。

内核测试过程。

从存储库(Linux内核档案或GitHub)获取最新的内核源代码 应用补丁文件(使用diff工具) 构建新内核。 针对LTP (Linux测试项目)中的测试过程进行测试