Ash*_*ary 248 linux linux-kernel
Linux内核开发人员如何在本地测试代码并在提交代码之后对其进行测试?他们是否使用某种单元测试,构建自动化?测试计划?
Jos*_*phH 72
Linux内核非常重视社区测试.
通常,任何开发人员都会在提交之前测试他们自己的代码,并且他们经常会使用Linus的内核开发版本,或者其他不稳定/开发树之一用于与他们的工作相关的项目.这意味着他们经常测试他们的变化和其他人的变化.
正式测试计划的方式往往不多,但在将功能合并到上游树之前可能会要求进行额外的测试.
正如Dean指出的那样,还有一些自动化测试,linux测试项目和内核自动测试(好的概述).
开发人员通常也会编写旨在测试其更改的自动化测试,但我不确定是否有(经常使用的)机制来集中收集这些特殊测试.
当然,这取决于内核的哪个区域正在发生变化 - 您为新网络驱动程序所做的测试与更换核心调度算法时所做的测试完全不同.
Kar*_*yan 66
当然,内核本身及其部件在发布之前进行了测试,但这些测试仅涵盖基本功能.有一些测试系统可以执行Linux内核的测试:
Linux测试项目(LTP)为开源社区提供测试套件,以验证Linux的可靠性和稳定性.LTP测试套件包含一系列用于测试Linux内核和相关功能的工具.https://github.com/linux-test-project/ltp
自动测试 - 全自动测试的框架.它主要用于测试Linux内核,但它可用于许多其他目的,例如在Linux平台下验证新硬件,虚拟化测试和其他一般用户空间程序测试.它是GPL下的一个开源项目,由许多组织使用和开发,包括Google,IBM,Red Hat和许多其他组织.http://autotest.github.io/
还有一些主要的GNU/Linux发行公司开发的认证系统.这些系统通常检查完整的GNU/Linux发行版以与硬件兼容.有Novell,Red Hat,Oracle,Canonical,Google开发的认证系统.
还有用于Linux内核动态分析的系统:
Kmemleak是Linux内核中包含的内存泄漏检测器.它提供了一种以类似于跟踪垃圾收集器的方式检测可能的内核内存泄漏的方法,区别在于孤立对象未被释放但仅通过/ sys/kernel/debug/kmemleak报告.
Kmemcheck将每次读取和写入捕获到动态分配的内存(即使用kmalloc()).如果读取之前未写入的内存地址,则会向内核日志打印一条消息.也是Linux内核的一部分
故障注入框架(包含在Linux内核中)允许将错误和异常注入到应用程序的逻辑中,以实现更高的系统覆盖范围和容错能力.
ado*_*yan 58
Linux内核开发人员如何在本地测试代码并在提交代码之后对其进行测试?
他们是否使用某种单元测试,构建自动化?
在经典意义上,没有.
E. g.Ingo Molnar正在运行以下工作负载:1.使用随机的配置选项构建新内核2.启动它3.转到1
处理每个构建失败,引导失败,BUG或运行时警告.24/7.乘以几个盒子,可以发现很多问题.
测试计划?
没有.
可能存在误解,即存在中央测试设施,没有.每个人都做他想做的事.
Cir*_*四事件 15
树内工具
在内核中查找测试工具的好方法是:
make help 并阅读所有目标在v4.0中,这导致我:
kselftest在工具/测试/ 自我测试下.运行make kselftest.必须已经运行构建的内核.另请参见:Documentation/kselftest.txt,https://kselftest.wiki.kernel.org/
ktest under tools/testing/ktest.另请参见:http://elinux.org/Ktest,http://www.slideshare.net/satorutakeuchi18/kernel-auto-testbyktest
静态分析器部分make help,其中包含以下目标:
checkstack:Perl:linux源代码中的checkstack.pl有什么作用?coccicheck对于Coccinelle(askb提到)内核CI
https://kernelci.org/是一个旨在使内核测试更加自动化和可见的项目.
它似乎只做构建和启动测试(TODO如何自动测试启动工作源应该在https://github.com/kernelci/).
Linaro似乎是该项目的主要维护者,得到了许多大公司的贡献:https://kernelci.org/sponsors/
Linaro Lava
http://www.linaro.org/initiatives/lava/看起来像一个CI系统,专注于开发板启动和Linux内核.
ARM LISA
https://github.com/ARM-software/lisa
不确定它的功能是什么,但它是由ARM和Apache Licensed提供的,所以很值得一看.
演示:https://www.youtube.com/watch?v = yXZzzUEngiU
步调试器
不是单元测试,但一旦测试开始失败可能会有所帮助:
我自己的QEMU + Buildroot + Python设置
我也开始专注于易于开发的设置,但我最终还添加了一些简单的测试功能:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/8217e5508782827320209644dcbaf9a6b3141724#test-this -repo
我没有详细分析所有其他设置,它们可能比我的更多,但我相信我的设置很容易快速入门,因为它有很多文档和自动化.
Van*_*ril 13
它不是很容易自动化内核测试.大多数Linux开发人员都在自己进行测试,就像adobriyan提到的那样.
但是,有一些东西可以帮助调试Linux内核:
然后,开发人员通常让其他人审查他们的补丁 一旦在本地审查补丁并且看到它们不会干扰其他任何东西,并且测试补丁以使用Linus的最新内核而不破坏任何内容,则补丁被推送到上游.
编辑: 这是一个很好的视频,详细介绍了补丁在集成到内核之前所经历的过程.
除了上/下点之外,它更侧重于Linux内核的功能测试,硬件认证测试和性能测试.
实际上通过脚本,静态代码分析工具,代码审查等进行了大量测试,这在捕获错误方面非常有效,否则会破坏应用程序中的某些内容.
Sparse - 一种开源工具,旨在查找Linux内核中的错误.
Coccinelle是另一个程序匹配和转换引擎,它提供语言SmPL(语义补丁语言),用于指定C代码中所需的匹配和转换.
checkpatch.pl和其他脚本 - 编码样式问题可以在内核源代码树的Documentation/CodingStyle文件中找到.阅读它时要记住的重要事情并不是这种风格在某种程度上比任何其他风格更好,只是它是一致的.这有助于开发人员轻松查找和修复编码样式问题,内核源代码树中的脚本scripts/checkpatch.pl已经开发完成.此脚本可以轻松指出问题,并且应始终由开发人员对其更改进行操作,而不是让审阅者稍后通过指出问题来浪费时间.
| 归档时间: |
|
| 查看次数: |
57017 次 |
| 最近记录: |