如何测试Linux内核

目录

概述

LTP

构建系统

C测试用例

参考资料

Autotest

Kmemleak

Kmemcheck

Linaro LAVA

调试器

GDB

KGDB

设备驱动测试

资料获取方法


概述

在本文中,我们将讨论用于测试Linux内核的各种框架和工具。首先,我们将介绍LTP( Linux Test Project)项目。然后,我们将讨论其他测试工具和框架。最后,我们将讨论我们无法使用常规内核测试工具测试的新Linux驱动程序的测试。

LTP

网址:https://github.com/linux-test-project/ltp

LTP是自动化工具的开源集合,我们可以用它来创建构建流程、执行自动化测试和调试 Linux 内核。LTP 项目由 IBM、Cisco、RHEL 和其他组织共同开发。

构建系统

LTP的构建系统为Linux内核项目提供了结构。不仅如此,它还使用了新的Makefile系统,该系统提供了增强的构建过程,从而使 Linux 项目的维护更加易于管理。

C测试用例

我们可以用C语言或可移植的POSIX兼容shell语言编写LTP测试用例。测试用例使用LTP测试应用程序接口(API),该程序接口完全由C语言编写。此外,我们还可以为glibc和musl C库编写测试用例。

参考资料

  • 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
  • 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
  • python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md

Autotest

网址:https://github.com/autotest/autotest

Autotest是专为测试Linux内核而设计的测试框架。它提供了用于建立完全自动化测试网格的模块。

Autotest模块包括

  • 客户端模块,用于在项目目录内实际执行测试
  • 服务器模块,方便我们管理多个远程机器上的测试客户端
  • Autotest 数据库模块,用于存储测试网格的结果
  • 调度程序,用于执行与测试网格相关的cron作业
  • 使用Autotest的命令行界面
  • 用于可视化测试结果和调度工作的网络前端

为了进行严格的测试,我们还可以将LTP测试用例与Autotest调度器结合起来,因为Autotest并不提供用于测试 Linux 内核的 C 测试 API。

Kmemleak

Kmemleak是主线Linux内核的一项开发功能。内核分配的内存有时无法释放。因此,它既可能成为性能问题,也可能成为安全隐患。

利用Kmemleak,我们可以检查内核产生的内存泄漏。不过,它不会修复问题,而是追踪可能的泄露并将其报告到/sys/kernel/debug/memleak。在某种程度上,Kmemleak与Java和C#等高级语言中的垃圾回收器非常相似。

此外,如果我们使用的是Linux内核,还可以通过在内核配置中启用"CONFIG_DEBUG_KMEMLEAK"来使用该功能。在大多数流行的发行版中,该功能默认为禁用:

$ zgrep "CONFIG_DEBUG_KMEMLEAK" /proc/config.gz
# CONFIG_DEBUG_KMEMLEAK is not set

这是有道理的,因为我们在生产中并不需要它。

Kmemcheck

与Kmemleak一样,Kmemcheck也是Linux内核的一项开发功能。不过,它们执行的任务不同。

Kmemcheck负责检查内核代码是否访问了内存中未初始化的结构。例如,内核分配了内存块,但没有填满,然后就会尝试访问该位置。这会导致严重的错误和性能问题。

需要注意的是,该功能仅适用于 x86 系统。

Linaro LAVA

LAVA(Linaro自动化和验证架构)是一种持续集成,用于将操作系统部署到物理和虚拟硬件上以运行测试。这些测试包括启动、引导加载器和系统级测试。它专为 ARM 系统设计。

我们可以使用LAVA来检查我们对内核代码所做更改的有效性。不仅如此,我们还可以检查内核是否在速度和大小方面都进行了优化。然后,LAVA 会将这些指标写入一个文件,供我们进一步分析。

LAVA 框架主要用于测试移动操作系统,因为大多数手机都使用 ARM 或某种形式的 ARM 架构。

调试器

调试器是一种允许我们逐行执行程序代码的工具。它为我们提供了一种监控程序流程和找出模糊错误的简便方法。不过,我们应该知道,步骤调试器并不执行单元测试。

GDB

在Linux上,我们有GDB(GNU调试器)和KGDB(内核GDB)。GDB是一个通用调试器,允许我们调试包括C语言在内的多种编程语言的代码。虽然我们不能直接使用GDB调试内核代码,但我们可以通过GDB设置QEMU,轻松查看执行中的内核代码。

KGDB

KGDB是一款适用于BSD操作系统和Linux的调试器。要使用KGDB,我们需要两台通过串行连接或火线连接的机器。一台运行内核,另一台运行调试器。这两台机器通过 GDB 远程协议进行通信。

设备驱动测试

测试Linux设备驱动程序可能会变得非常乏味,因为没有测试Linux设备驱动程序的灵丹妙药。因此,所有测试都必须在物理硬件上手动完成。虽然我们可以在虚拟机上测试驱动程序,但由于虚拟机添加了抽象层,可能无法正常工作。

为了测试驱动程序,我们需要在启动Linux后手动加载驱动程序,检查是否存在初始化错误。之后,我们可以使用调试器,在某些情况下还可以执行自动测试。


资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/46823.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

幸福长寿的秘诀 —— 查理芒格

查理芒格:幸福长寿的秘诀其实很简单。_哔哩哔哩_bilibili People trying to figure out what the secret to life, is to a long and happy life ? Its simple. You dont have a lot of envy. You dont have a lot of resentment. You dont overspend your incom…

安全DNS,状态码,编码笔记整理

一 DNS DNS(Domain Name System)是互联网中用于将域名转换为IP地址的系统。 DNS的主要功能包括以下几个方面: 域名解析:DNS最主要的功能是将用户输入的域名解析为对应的IP地址。当用户在浏览器中输入一个域名时,操作…

PostgreSQL-Character with value 0x09 must be escaped.

在使用json相关函数时,报了这个错: Character with value 0x09 must be escaped.中文即使:值为0x09的字符必须转义。 找了下这个0x09 这个ASCII的值,是水平制表符。那这应该是因为json不支持换行导致的,我们将水平制…

海尔设计借助亚马逊云科技生成式AI,实现端到端的云上工业设计解决方案

海尔创新设计中心(以下简称海尔设计)成立于1994年,目前拥有400多名设计师,为海尔智家旗下七大品牌全球的所有产品提供设计创新和模式探索。亚马逊云科技为海尔设计提供了四个完整的云上解决方案,全面替代自有机房&…

pytorch学习-线性神经网络——softmax回归+损失函数+图片分类数据集

1.softmax回归 Softmax回归(Softmax Regression)是一种常见的多分类模型,可以用于将输入变量映射到多个类别的概率分布中。softmax回归是机器学习中非常重要并且经典的模型,虽然叫回归,实际上是一个分类问题 1.1分类与…

管理类联考——写作——素材篇——论说文——人工智能

有人说,机器人的使命应该是帮助人类做那些人类做不了的事情,而不是替代人类。技术变革会夺取一些人低端繁琐的工作岗位,最终也会创造更高端更人性化的工作机会。例如,铁路的出现抢去了很多挑夫的工作,但也增加了千百万…

Vue 常用指令 v-for 列表循环

v-for:根据数据生成列表结构,并且是响应式的,可以十分便捷的操作列表结构了。 至于是什么样的列表,就看你指令使用的位置了,列表的生成依赖于数据,所以先去定义数据。 它结合的类型挺多的,数组…

存储重启后,ceph挂载信息没了,手动定位osd序号并挂载到对应磁盘操作流程、ceph查看不到osd信息处理方法

文章目录 故障说明处理流程定位硬盘中的osd序号挂载osd到ceph上验证并拉起osd重复上面操作故障说明 我们的一个存储节点莫名其妙的重启了,不知道咋回事 但这样的问题就是,所有osd都down了 因为挂载信息没有写到fstab里面,所以不会自动up,并且没有挂载信息,并且也看不到o…

如何进行SQL优化

一、SQL优化的主要步骤 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生…

用友NC65登录界面的jsp页面路径

如上图,访问地址 http://127.0.0.1/portal/app/mockapp/login.jsp?lrid=1对应的页面是哪个呢??相信很多做用友portal端开发的人可能都没有研究或者思考过这个问题,或者想过,但是不知道路径在哪里。你直接按地址栏的地址查,发现nchome里,并没有”portal/app/mockapp/“这…

Vue3学习组合式API(二)

1、计算属性compute <script setup> //导入 import {ref, computed } from vue const state ref(0) //原始数据 const count ref(1); //计算属性 const doubleCount computed(()>count.value*2);//原始数据 const list ref([1,2,3,4,5,6,7,8]); //list属性值 con…

ES6基础知识四:对象新增了哪些扩展?

一、参数 ES6允许为函数的参数设置默认值 function log(x, y World) {console.log(x, y); }console.log(Hello) // Hello World console.log(Hello, China) // Hello China console.log(Hello, ) // Hello函数的形参是默认声明的&#xff0c;不能使用let或const再次声明 fu…

Linux操作系统~必考面试题⑧

1、pwd 命令 pwd 命令用于查看当前工作目录路径。 实例&#xff1a; 查看当前路径 pwd 查看软链接的实际路径 pwd -P 2、rmdir 命令 从一个目录中删除一个或多个子目录项&#xff0c;删除某目录时也必须具有对其父目录的写权限。 注意&#xff1a;不能删除非空目录实例&…

剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径

class Solution { public:bool exist(vector<vector<char>>& board, string word) {int rowboard.size(),colboard[0].size();int index0,i0,j0;if(word.size()>row*col) return 0;//vector<vector<int>> visit[row][col];//标记当前位置有没有…

SQL AND OR 运算符

AND & OR 运算符用于基于一个以上的条件对记录进行过滤。 如果第一个条件和第二个条件都成立&#xff0c;则 AND 运算符显示一条记录。 如果第一个条件和第二个条件中只要有一个成立&#xff0c;则 OR 运算符显示一条记录。 下面是选自 "students" 表的数据&a…

Linux为何是软件开发专业人员的心头爱-Robotics Ubuntu

Linux与Windows都是十分常见的电脑操作系统&#xff0c;相信你对它们二者都有所了解&#xff01;在你的使用过程中&#xff0c;是否有什么事让你觉得在Linux上顺理成章&#xff0c;换到Windows上就令你费解&#xff1f;亦或者关于这二者你有任何想要分享的&#xff0c;都可以在…

13.Netty源码之Netty中的类与API

highlight: arduino-light ServerBootstrap Bootstrap 意思是引导&#xff0c;一个 Netty 应用通常由一个 Bootstrap 开始&#xff0c;主要作用是配置整个 Netty 程序&#xff0c;串联各个组件&#xff0c;Netty 中ServerBootstrap 是服务端启动引导类。 java //泛型 AbstractB…

【C语言day06】

逻辑或运算如果前表达式为真&#xff0c;后表达式不计算&#xff0c;第一次循环时i为0&#xff0c;执行i&#xff0c;第二次循环时i为1&#xff0c;是个真值&#xff0c;不再执行i&#xff0c;也就死循环了 在C语言中&#xff0c;一个函数如果不写返回值类型&#xff0c;那么就…

前端JS 展示上传图片缩略图(本地图片读取)

需求&#xff1a; 点击上传图片按钮&#xff0c;选择图片以后&#xff0c;不请求后端接口&#xff0c;直接将图片展示在缩略图中。 解决方案&#xff1a; 使用 FileReader 和 FileReader 中的 readAsDataURL 方法。 第一步 从input[type“file”] (上传文件标签) 里面拿到fil…

IRIS搭建docker

之前把web实现了docker&#xff0c;开发或测试环境可能需要开发自己搭数据库&#xff0c;为了方便使用&#xff0c;把数据库也做一个docker。 由于原生的CentOS我还有改yum仓库&#xff0c;所以这次从之前lis搞的改好yum的镜像开始&#xff08;从改好yum的lisnew的镜像创建lis…