如何测试Linux内核

如何测试Linux内核

2023年6月29日发(作者:)

如何测试Linux内核您是否想过如何测试Linux内核?如何维护Linux内核这⼀使⽤了全球数千名程序员开发的,数百万⾏代码的开源项⽬的质量?这不是⼀件容易的事。但这并不意味着这是⼀件不可能的事!⼤约每3个⽉(10到12周)就会发布⼀个新的Linux内核版本。在此期间,将为“合并窗⼝”保留2周的时间,其中所有已开发和批准的内容都将合并到Linus Torvalds树(主线)中。剩下的8到10周的开发时间⽤于修复漏洞和稳定化。在稳定阶段,会发布新的候选版本(通常每周⼀次)。当Linus Torvalds“觉得”代码“⾜够稳定”并且最新候选版本中的更改数量减少时,将发布新的内核版本。当我说Linus Torvalds感到代码“⾜够稳定”时发布了新版本时,我的意思是说Linux内核开发过程中没有什么正式的流程可以发布新版本。没有任何⼀种神奇的⼯具可以针对内核进⾏完全的测试,也没有正式的测试计划可以确保新的内核版本能够正常运⾏。发⾏新版本的决定实际上是基于Linux Linus Torvalds 的感觉。但这并不意味着Linux内核没有被测试。恰恰相反!社区⿎励内核⽤户和开发⼈员开发和测试代码⽣产树并在邮件列表和(Linux内核社区未使⽤的错误跟踪⼯具)上报告错误。这⾥有⼀个关于 Linux内核源代码中的BUG的⽂档。Linus Torvalds⾃⼰是⿎励对发⾏的新版本内核进⾏这些测试的,他有时会以“ Go out and test!”作为发⾏新版本内核邮件的结尾。内核开发过程还证明了测试其实是很重要的,因为⼤约有20%的开发时间(2周)专门⽤于代码集成,⽽另外80%的开发时间(8到10周)则专⽤于测试和Bug修复。但是,为了确保以良好的质量发布内核,我们不仅仅依赖于开发⼈员和⽤户的积极性。各种不同的⼯具可以在此过程中提供帮助,包括静态代码分析⼯具,⾃动化测试⼯具和持续集成⼯具。那么,让我们谈谈最有效的可以帮助我们发现Bug并测试Linux内核的⼯具吧?静态代码分析⼯具与其从正在运⾏的程序中发现Bug, 更好的做法是在程序运⾏之前找到并修复Bug,对吗?这是静态代码分析⼯具做的事情。静态分析⼯具⽆需运⾏程序就可以分析源代码并发现问题。如果您想更好地了解这些⼯具的⼯作⽅式,请参阅⽂章“ 发现Bug ”。有⼀些针对Linux内核的静态分析⼯具,可帮助许多开发⼈员在开发过程中识别和修复Bug。是最初由Linus Torvalds编写并与Linux源代码集成的⼯具,旨在发现内核中可能的编码错误。通过注解,该⼯具在源代码中执⾏了多个语义验证。例如,如果内核代码试图直接取消引⽤⽤户空间指针(标记为__user),则该⼯具将指出该错误。有关此⼯具的信息,请参见。是⼀个专注于Linux内核的静态分析⼯具。该⼯具能够识别编程错误,例如访问空指针,缓冲区溢出,使⽤释放的内存,死锁,使⽤未初始化的变量等等。根据,Smatch已经帮助发现并修复了3000多个Bug。有关此⼯具的更多信息,请访问。是⼀个⾮常有趣的⼯具,能够识别源代码中的模式并⾃动进⾏更改。例如,假设您需要更改数百个设备驱动程序所共同使⽤的内核API函数的签名,除了打开每个驱动程序的源代码并⼿动进⾏更改之外,还可以使⽤Coccinelle⾃动执⾏该过程。⽽且,Coccinelle已经帮助识别到了Linux内核中的数百个Bug。例如,是由该⼯具⾃动⽣成的,⽤于纠正内核中的内存泄漏的Bug。有关更多信息,包括的,请访问该。除静态代码分析⼯具外,当前还可以使⽤多种⾃动化测试⼯具来识别Linux内核中的Bug和回归。⾃动化测试⼯具⾃动化测试⼯具可以在开发过程中为程序员提供很多帮助,避免程序员重复去做⼀些测试,能够⾃动识别代码中可能的Bug并进⾏回归测试,提⾼软件质量并节省开发⼈员的时间。是⼀个Perl脚本(),它可从Linux源代码中的tools / testing / ktest /获得,该脚本能够⾃动化编译、部署和测试内核映像。该⼯具接收内核配置⽂件,通过该配置⽂件进⾏构建,然后将⽣成的镜像部署到远程计算机上,以执⾏⽤户定义的某些类型的⾃动化测试,例如,等待来⾃串⾏控制台的登录消息并测试。所有的构建、部署和测试步骤都是可配置的。这是对内核进⾏⾃动化测试⾮常有⽤的⼯具。可以给有兴趣进⼀步了解该⼯具的⼈的提供参考。是Linux源代码中在tools / testing /

中提供的测试框架,能够测试内核的特定部分。测试脚本⽤C语⾔或Shell脚本编写,并在⽤户空间中运⾏以测试内核的特定部分。⼀些测试脚本可以验证部分Linux内核⼦系统、库和API,包括cpufreq,gpio,⽹络,rtc,watchdog,cgroup,ftrace,futex,ipc等。它对于开发⼈员和⽤户都是⾮常有⽤的⼯具及其⽂档可在和。(LTP)是⼀个项⽬,不仅可以⾃动化验证Linux内核的功能,还提供了⼀套⾃动化验证Linux内核的可靠性、健壮性和操作系统稳定性的⼯具。该项⽬由IBM,Cisco,Fujitsu,SUSE和Red Hat等公司开发和维护。测试脚本⽤C和Shell脚本编写,并直接在⽬标系统上运⾏。有关该项⽬的信息,包括源代码和⽂档,可在。是GPL许可的⾃动化测试框架,其重点是Linux内核,由多个组织(例如Google,IBM和Red Hat)开发和使⽤。它具有⾮常模块化的体系结构,包括⽤于运⾏测试的客户端,⽤于控制多个客户端的服务器以及⽤于触发测试和查看结果的Web界⾯。该⼯具的重点不是⾃⼰实施测试,⽽是提供基础结构以⾃动执⾏由其他项⽬实施的测试。例如,⾃动化测试使⽤LTP项⽬中实现的测试⽤例。该项⽬的源代码及其⽂档可在上。是Linux内核邮件列表上的Google的Brendan Higgins在针对Linux内核的单元测试框架。该项⽬的作者认为,该框架的灵感来⾃其他单元测试⼯具,例如JUnit(Java),(Python)和Googletest / Googlemock(C ++)。尽管⼤多数测试⾃动化⼯具需要⼀台运⾏内核的机器来运⾏测试,但kunit却没有这种需求。它使⽤⼀种称为的内核功能,这是⼀种特殊的体系结构,可以像运⾏其他程序⼀样运⾏Linux内核。因此,⽆需在单独的计算机上运⾏测试。提供了KUnit的⽂档。主要⽤于识别安全问题的另⼀种⾮常常见的测试⾃动化技术称为。模糊测试⼯具能够为应⽤程序⽣成随机/⽆效条⽬,并监视结果以识别可能的问题,例如崩溃或资源泄漏。Linux主要的两种模糊测试⼯具是和。还有⼀个名为Syzbot的⾃动化⼯具,该⼯具在某些Linux内核树上持续运⾏Syzkaller,并报告在发现的问题。最后,还有测试特定内核⼦系统的⼏种⼯具,其中的重点是测试内存管理,主要⽤于测试⽂件系统,主要⽤于测试调度器。在Linux内核开发过程中,利⽤持续集成,这些测试⼯具都可⽤于识别和报告Bug。持续集成每天都会对内核开发和⽣产代码库进⾏数百次提交。这些提交会引起⼀些问题,包括回归,构建失败以及与其他分⽀和代码库的合并冲突。在这种情况下,持续集成的实践(CI-持续集成)可以提供帮助。CI⼯具将集成开发⼈员每天完成的⼯作,执⾏⾃动化测试,并使得在⽣产环境之前就可以发现并修复Bug。是Linux Foundation项⽬,并且是当前最完整的Linux内核⾃动化测试和持续集成⼯具。该⼯具由Linaro于2014年创建并发布在,可在多个内核开发树上执⾏⾃动构建测试,引导内核在⼤量硬件平台上编译,并执⾏⼀些⾃动化测试。测试结果将发布在项⽬的邮件列表和。该⼯具的源代码托管在。对Linux内核进⾏持续集成的另⼀个⼯具是。该⼯具由英特尔创建和维护,专注于x86架构,并监视各种内核开发和⽣产树,⾃动执⾏构建,引导,功能测试和性能测试。当检测到内核的问题时,电⼦邮件会⾃动发送给内核维护者。根据该项⽬的⽹站,它已经帮助识别了内核开发树中的40,000多个Bug!有关更多信息,请访问该。(Linux内核功能测试)是⼀种持续集成⼯具,可在多个内核开发树上执⾏功能测试,以发现Bug和回归测试。使⽤OpenEmbedded完成构建,并在ARM和x86平台(32位和64位)上执⾏⾃动化测试。结果发布在该。项⽬于2013年创建,主要⽤于Linux内核稳定版本的测试。该⼯具会在所有体系结构的CPU上持续运⾏构建测试,并在QEMU中持续运⾏⼀些启动测试。测试结果发布在。还有其他测试⾃动化和持续集成的⼯具,例如,和。⼀些维护Linux发⾏版的社区使⽤这些⾃动化测试⼯具来识别和报告内核问题。那么,我们没有Bug了吗?当然不是。但是,正如我们所看到的,从⽤户和开发⼈员开始,有多种测试Linux内核的计划和⽅法,包括使⽤静态代码分析的⼯具,模糊测试⼯具,单元测试⼯具,⾃动化测试⼯具和持续集成⼯具。要保持世界上最⼤的开源项⽬之⼀的Linux内核的质量,社区在持续不断的进⾏着合作。但是,仍然有许多的挑战。尽管近年来测试覆盖率有所增加,但是内核源代码库⾮常庞⼤,并且随着每个版本的发布,代码库的规模呈指数增长,这就需要付出巨⼤的努⼒来维护和增加测试覆盖率。另⼀个主要的挑战是,要使设备驱动程序和硬件平台的测试⾃动化,因为它们需要对硬件进⾏测试。这些⼯具之间也缺乏协作,互操作性和标准化。因此,总有改进的空间。这些挑战⿎励社区进⼀步改善现有⼯具和流程,开发新的技术和测试⼯具,并继续提⾼Linux内核的质量。关于作者:Sergio Prado从事嵌⼊式系统研究已有20多年了。如果您想进⼀步了解他的⼯作,请访问“ 或⽹站。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688022614a67581.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信