【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

今天,在网上无意看到kernel里面有内核模块的测试代码,觉得很有意思,放到这里和大家一起学习一下。

#include <linux/sort.h>
#include <linux/slab.h>
#include <linux/module.h>/* a simple boot-time regression test */#define TEST_LEN 1000static int __init cmpint(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}static int __init test_sort_init(void)
{int *a, i, r = 1, err = -ENOMEM;a = kmalloc_array(TEST_LEN, sizeof(*a), GFP_KERNEL);if (!a)return err;for (i = 0; i < TEST_LEN; i++) {r = (r * 725861) % 6599;a[i] = r;}sort(a, TEST_LEN, sizeof(*a), cmpint, NULL);err = -EINVAL;for (i = 0; i < TEST_LEN-1; i++)if (a[i] > a[i+1]) {pr_err("test has failed\n");goto exit;}err = 0;pr_info("test passed\n");
exit:kfree(a);return err;
}module_init(test_sort_init);
MODULE_LICENSE("GPL");

这段代码不是我写的,原来地址在这。代码的内容不复杂,主要就是测试sort函数,整个函数就test_sort_init就搞定了。首先,函数先生成一个数组a,接着用sort对它进行排序,最后验证sort函数排序后的结果是否正确。

很多同学其实不喜欢写测试函数,这是不正确的。一般来说,不管是驱动代码、上层代码,甚至是内核代码,这些都是要进行测试的。好的代码不光要有好的逻辑、好的维护性,它还要有好的测试性、好的可调性和好的扩展性。

一份好的代码不是那么容易写出来的。

随想录(内核模块的测试方法)相关推荐

  1. 存储--IT打桩测试方法

    存储–IT打桩测试方法一 转载注明出处 : http://blog.csdn.net/xhz1234/article/details/44257293 Copyright 徐洪志(Macrosan). ...

  2. 代码质量随想录(四):排版,不只是为了漂亮

    代码质量随想录(四):排版,不只是为了漂亮 作者: 爱飞翔  发布时间: 2012-06-15 21:18  阅读: 1433 次  原文链接   全屏阅读 [收藏]   写了前三篇(一.二.三)之后 ...

  3. linux内核添加c代码,如何从C代码加载Linux内核模块?

    Ciro Santill.. 19 最小的可运行示例 使用这个简单的参数打印机模块在QEMU + Buildroot VM和Ubuntu 16.04主机上进行了测试. 我们使用init_module/ ...

  4. linux中断共享程序实现,如何在非实时linux上实现实时应用程序与内核模块之间共享存储器...

    linux并不是严格意义上的实时操作系统,为了实际需要,工程师们必须想尽办法来祢补这一不足,于是出现了rtlinux和rtai等并不强调商业性的软件.免费的rtlinux显然庞大而并不兼容大部分的嵌入 ...

  5. centos 自定义内核模块 编译运行

    简单记录一下 centos 自定义内核模块的一些编译运行记录,代码如下: 主要功能是通过rdtsc 指令直接从 CPU MSR 寄存器中获取时钟,尝试获取两次,两次之间会做一些赋值操作什么的,并记录一 ...

  6. Linux内核模块编程入门

    针对2.6内核的Linux系统,需要你的机器上已经安装了kernel-devel这个包,也就是编译模块所必须的东西:内核的头文件和一些Makefile. 一,Hello World程序: [code: ...

  7. 接口设计文档_app端接口用例设计方法和测试方法(一)

    前言 接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍"请求层 ...

  8. 14 集成测试方法之自底向上集成方法

    自底向上集成方法 前言 自底向上集成方法 前言 集成测试方法没有好坏之分,只有哪个更适合. 自底向上集成方法 自底向上集成方法是从调用的底层开始逐级的向上集成,每测试完一个族群就将其挂到上一层的模块上 ...

  9. 别再写 main 方法测试了,太 Low!这才是专业 Java 测试方法!

    欢迎关注方志朋的博客,回复"666"获面试宝典 作者:Richard_Yi 来源:juejin.cn/post/6844903936869007368 前言 "If yo ...

最新文章

  1. jedis操作set_在Java中使用jedis操作Set类型
  2. ASP.NET WebForm中用async/await实现异步
  3. php接口前端安全,前端js的ajax 调用PHP写的API接口,如何卡主安全性,防止非法调用呢?...
  4. Android含文档server结束(client UI接口异步请求的一部分)三
  5. Pytorch:线性代数
  6. 计算机网络学习(七)—集线器与交换机
  7. linux 系统基础知识 - vgextend命令
  8. Android 直播礼物动画实现之SVGA动画
  9. Warship+NPOI导入导出组件介绍【对象化】
  10. 骁龙神经处理引擎(Snapdragon Neural Processing Engine)
  11. word文档下面有红色波浪线如何解决
  12. 公有云与私有云的概念解读与优势分析
  13. Marlin固件的欢迎界面
  14. CryEngine事件监听器概览
  15. 如何从菜鸟程序员成长为高手
  16. 机器学习(一)- feature scaling
  17. 北航计算机考研小黑书,不会真有人以为四川大学分数低吧?川大最高分比北航南大最高分还高...
  18. 编译原理实验报告一:PL0语言编译器分析(PL0,词法分析,语法分析,中间代码生成)
  19. android 您的手机上未安装应用程序的解决方法
  20. 学习代码要先学会“学习”

热门文章

  1. hadoop1.2.1的安装
  2. 为了分析WebRTC, 重学Windows开发
  3. SpringMVC中获得HttpRequest对象的方法
  4. [置顶]       Python编程-混合编程(C++,python,opencv)实现
  5. C#基础知识整理:基础知识(11) 值类型,引用类型
  6. C++数据类型与C#对应关系 c#调用WINDWOS API时,非常有用
  7. Nginx安装及配置反向代理
  8. [BZOJ4521][Cqoi2016]手机号码 (数位dp)
  9. ArcGIS中,一个点集里的点两两连线,比如有4个点,就连6条线
  10. C#语言-NPOI.dll导入Excel功能的实现