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


当前回答

LTP和memtest通常是首选工具。

其他回答

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

从传统意义上来说,没有。

例如,Ingo Molnar正在运行以下工作负载:

用一组随机配置选项构建一个新内核 引导进入 转到第1节

每个构建失败、启动失败、错误或运行时警告都将得到处理。24/7。乘以几个方框,就可以发现很多问题。

测试计划?

No.

可能存在误解,认为有一个中央测试设施,但实际上没有。每个人都做他/她想做的事。

据我所知,英特尔有一个自动性能回归检查工具(名为lkp/0 day)运行/资助。它将测试发送到邮件列表的每个有效补丁,并检查从不同的微基准测试(如hackbench, fio, unixbench, netperf等)更改的分数。

一旦出现性能下降/改进,相应的报告将直接发送给补丁作者和Cc相关的维护者。

还有:

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

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

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

Linux内核非常重视社区测试。

通常,任何开发人员都会在提交代码之前测试他们自己的代码,而且他们经常会使用Linus的内核开发版本,或者其他与他们工作相关的项目的不稳定/开发树之一。这意味着他们经常测试自己的更改和其他人的更改。

通常没有太多正式的测试计划,但是在将特性合并到上游树之前可能会要求进行额外的测试。

正如Dean所指出的,还有一些自动化测试:Linux测试项目和内核Autotest(很好的概述)。

开发人员通常还会编写针对测试他们的更改的自动化测试,但我不确定是否有一种(经常使用的)机制来集中收集这些临时测试。

当然,这在很大程度上取决于内核的哪个部分正在被更改——您为一个新的网络驱动程序所做的测试与替换核心调度算法时所做的测试是完全不同的。

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

用于MotoG内核编译

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