out-of-tree模块做覆盖率统计

2023-11-18

1.准备如下测试用例,并编译成模块
hi.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("cbx");

int testModule(int a, int b)
{
    return a + b;
}
EXPORT_SYMBOL_GPL(testModule);

static int testModule_init(void)
{
    printk("testModule init/n");

    return 0;
}

static void testModule_exit(void)
{
    printk("testModule exit/n");
}

module_init(testModule_init);
module_exit(testModule_exit);

Makefile(注意GCOV_PROFILE=y)

export sourcepath   ?= $(shell pwd)

KERNEL_DIR     :=/home/cuibixuan/git/linux
ARCH    :=x86_64

GCOV_PROFILE=y # 对此模块做覆盖统计

ifneq ($(KERNELRELEASE),)
        obj-m += test.o
else

default:
        $(MAKE) -C $(KERNEL_DIR) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH)  M=$(sourcepath) modules
clean:
        rm -rf *.o *.mod.c *.mod.o *.ko .*.mod .*.cmd .tmp_versions modules.order Module.symvers
endif

test.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("cbx");

extern int testModule(int a, int b);

static int test_init(void)
{
    printk("test init/n");

    testModule(1, 2);

    return 0;
}

static void test_exit(void)
{
    printk("test exit/n");
}

module_init(test_init);
module_exit(test_exit);

主要是把gcov kernel选上,还有gcov profile选上。
在makefile增加GCOV_PROFILE=y

存放gcda的路径为:/sys/kernel/debug/gcov,如果目录下空,则执行下面命令:

mount -t debugfs nodev /sys/kernel/debug/

2.对hi.ko中模块代码做统计

# lcov -z
Auto-detecting gcov kernel support.
Found upstream gcov kernel support at /sys/kernel/debug/gcov
Resetting kernel execution counters
Done.
# insmod hi.ko
# insmod test.ko
# lcov -d . -t test -o test.info -b . -c
error: geninfo: WARNING: no .gcda files found in . - skipping!
(使用下面命令解决,主要是将/sys/kernel/debug/gcov/下统计后生产的.gcda和模块编译目录的.gcno放在一起,才能做统计)
# cp /sys/kernel/debug/gcov/home/cuibixuan/testModule/* ./
(这里./ 是编译hi.ko的目录)
# lcov -d . -t test -o test.info -b . -c
Capturing coverage data from .
Found gcov version: 5.4.0
Scanning . for .gcda files ...
Found 2 data files in .
Processing hi.gcda
Processing test.gcda
Finished .info-file creation

# lcov -l test.info
Reading tracefile test.info
            |Lines       |Functions  |Branches
Filename    |Rate     Num|Rate    Num|Rate     Num
==================================================
[/home/cuibixuan/testModule/]
hi.c        |62.5%      8|66.7%     3|    -      0
test.c      |57.1%      7|50.0%     2|    -      0
==================================================
      Total:|60.0%     15|60.0%     5|    -      0

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

out-of-tree模块做覆盖率统计 的相关文章

随机推荐

  • 2014年2月7日星期五(7-3,消除了背面的3D线框立方体)

    好久没进行了 看看吧 与DEMO7 2的区别 只看不同的地方 相机类型不同 归一化平面改为2 2 ar 视口为640 480 执行了背面消除 就是判断面元向量与面元到视点向量的点乘 gt 0 则可见 否则 消除 这一步是在物体剔除后和世界坐
  • 百度飞浆零基础实践深度学习入门课,通过PaddlePaddle实现波士顿房价预测

    百度架构师手把手带你零基础实践深度学习 课程已加入学习 对深度学习有了深入浅出对理解 并通过两种方式实现波士顿房价预测的算法 包括Python和Numpy构建深度学习框架 以及使用paddlepaddle快速搭建 快速实现预测 A 使用Py
  • 使用pl.droidsonroids.gif.GifImageView在安卓中显示动图遇到的问题

    在做一款聊天软件 其中聊天界面需要发送表情 而表情都是动图 在安卓中想要显示动图 就要借助第三方框架 我选的是pl droidsonroids gif GifImageView 使用方法如下 你在github上下载了android gif
  • Webpack5 处理图片资源、图标资源、修改输出目录、清空上一次打包的所有文件

    1 处理图片资源 Webpack5 已经将两个 Loader file loader 和 url loader 功能内置到 Webpack 里了 我们只需要简单配置即可处理图片资源 优化 gt 小图片转化为base64 小图片可以转换为ba
  • android分析monkey的anr

    1 根据anr信息和traces txt判断anr是发生在那个进程中 2 在文件夹logs4android x中搜索 ANR 或者在monkeylog中搜索 anr in 找到发生anr的时间 3 在文件夹logs4android x中搜索
  • 基于深度路由的水下传感器网络(翻译、整理)

    基于深度路由的水下传感器网络 翻译 整理 背景与意义 无线传感器网络引起了研究人员的广泛关注 并在该领域取得了很大进展 起初 这些网络仅涵盖地面的实用程序 但后来 由于在地球被 70 水覆盖 所以大家开始研究传感器网络的水下应用 也就是我们
  • 超声非线性成像-谐波成像基本知识

    文章目录 概述 超声的非线性 组织谐波成像 组织谐波的提取方法 组织谐波成像的优点 造影谐波成像 应用实例 总结 参考文献 概述 最近了解了一下非线性超声中的谐波成像 可以作为知识普及了解一下 大部分来自于文献 如有遗漏可以私信咸鱼进行修改
  • 可重入锁是什么?

    本文内容如有错误 不足之处 欢迎技术爱好者们一同探讨 在本文下面讨论区留言 感谢 文章目录 简介 ReentrantLock 中断锁获取 可重入设计的意义 不可重入锁 不可重入改为可重入 简介 可重入锁在Java中有synchronize和
  • 麒麟服务器系统、CentOS系统扩展磁盘、根目录大小

    一 实际问题 服务器根目录占用53 只有13G可用 需要扩容磁盘 若没有单独分区给目录做存储 其他目录如 var lib 都是默认共享根目录空间大小的 若这些目录空间太小都可以通过扩容根目录大小解决 二 介绍部分 介绍 PV VG LV P
  • Set(List)与String互转

    一 Set与String互转 在处理JSON数据时 我发现想把数据取出来用set去重 然后toString后放回JSON 但是再取出来要转成Set时就出问题了 这是一个用例 JSONObject jsonObject new JSONObj
  • 【c++从菜鸡到王者】第五篇-( 全网最精华)条件编译ifdef的用法

    预处理指令 预处理指令是以 号开头的代码行 号必须是该行除了任何空白字符外的第一个字符 后是指令关键字 在关键字和 号之间允许存在任意个数的空白字符 整行语句构成了一条预处理指令 该指令将在编译器进行编译之前对源代码做某些转换 预处理指令是
  • Qt QTouchEvent 多点触控

    首先设置接收触控事件 setAttribute Qt WA AcceptTouchEvents true bool CollectionPoint event QEvent event switch event gt type case Q
  • 一,Docker安装与启动

    目录 1 安装Docker 2 设置ustc的镜像 3 Docker的启动与停止 3 常用命令 3 1 1 查看镜像 3 1 2 搜索镜像 3 1 3 拉取镜像 3 1 4 删除镜像 3 2 容器相关命令 3 2 1 查看容器 3 2 2
  • 包建强:为什么我说Android插件化从入门到放弃?

    转自 http www infoq com cn articles android plug ins from entry to give up 本文根据包建强在2016GMTC全球移动开发大会上的演讲整理而成 首先自我介绍一下 我叫包建强
  • 【c++】rand()随机函数的应用(一)——rand()函数详解和实例

    c 语言中可以用rand 函数生成随机数 今天来探讨一下rand 函数的基本用法和实际应用 本系列文章共分两讲 今天主要介绍一下伪随机数生成的原理 以及在伪随机数生成的基础上 生成随机数的技巧 下一讲主要介绍无重复随机数生成的方法和舒尔特方
  • 查看数据库表所占容量空间大小

    一 查看所有数据库容量大小 二 查看所有数据库各表容量大小 三 查看指定数据库容量大小 四 查看指定数据库各表容量大小 五 查看指定数据库指定表容量大小 数据库情况 一 查看所有数据库容量大小 SELECT table schema AS
  • 计算机病毒及其防治技术期末复习

    计算机病毒及其防治技术 总结复习 文章目录 计算机病毒及其防治技术 总结复习 第一章 概述 第二章 蠕虫 第三章 病毒结构 第四章 计算机病毒的技术特征 第五章 特洛伊木马 第六章 宏病毒 第七章 Linux病毒 第八章 移动终端恶意代码
  • 公务员备考(四十) 图推提升

    第一章 平面专题总结 一 线总结 1 曲线直线 曲直图形判断原则 有曲则为曲 无曲才为直 阴影图形不讨论曲直性 曲直规律图形特点 a 纯直线曲线图形 b 简笔画实物图形 c 单区域简单图形 d 内外结构图形 2 平行线 含回旋折线 a 轮廓
  • NeRF系列(1):NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 论文解读与公式推导(二)

    接上文 NeRF开山之石 NeRF Representing Scenes as Neural Radiance Fields for View Synthesis 论文解读与公式推导 一 LeapMay的博客 CSDN博客 本文提出了一种
  • out-of-tree模块做覆盖率统计

    1 准备如下测试用例 并编译成模块 hi c include