Linux内核代码覆盖率-GCOV

5
我正在尝试使用Linux测试项目中的一些测试场景,并获得内核源代码覆盖率
我正在使用GCOV/LCOV来完成这个过程。
以下是我目前所拥有的东西:
- 在构建配置中的GCOV标志 - 基于GCOV的内核分析 - CONFIG_GCOV_KERNEL=y - CONFIG_GCOV_PROFILE_ALL=y - 在Linux内核版本2.6.32.60+drm33.26上
构建内核后,我在源文件夹中拥有所有的.gcov文件。
当我使用源文件作为输入时,GCOV/LCOV可以正常工作。
以下是我应该拥有但却没有的东西:
- /Proc/GCOV文件夹 - GCOV内核模块(gcov.o?)
现在我想运行测试方案,并使用LCOV查看到目前为止已使用了Linux内核代码的哪一部分。但是,当我调用LCOV -c时,即使所有构建标志都正确,我仍会得到以下结果。

加载所需的gcov内核模块。

lcov:错误:无法加载所需的gcov内核模块!

有一个针对<2.6.30的内核补丁,之后内核将内置此功能。

2个回答

3
以下是我尝试在Ubuntu 12.04默认内核上进行的操作。 虽然gcov未启用,但已挂载调试文件系统,并且其中可以找到一些kvm调试信息。
ubuntu:/sys/kernel# mount -t debugfs none /sys/kernel/debug
mount: none already mounted or /sys/kernel/debug busy
mount: according to mtab, none is already mounted on /sys/kernel/debug
ubuntu:/sys/kernel# umount /sys/kernel/debug
ubuntu:/sys/kernel# mount -t debugfs none /sys/kernel/debug
ubuntu:/sys/kernel# ls debug
acpi  bdi  bluetooth  extfrag  gpio  hid  kprobes  kvm  mce  regmap  regulator  sched_features  suspend_stats  tracing  usb  wakeup_sources  x86
ubuntu:/sys/kernel# cat debug/kvm/
efer_reload          host_state_reload    io_exits             mmio_exits           mmu_pte_write        nmi_window           signal_exits
exits                hypercalls           irq_exits            mmu_cache_miss       mmu_recycled         pf_fixed             tlb_flush
fpu_reload           insn_emulation       irq_injections       mmu_flooded          mmu_shadow_zapped    pf_guest
halt_exits           insn_emulation_fail  irq_window           mmu_pde_zapped       mmu_unsync           remote_tlb_flush
halt_wakeup          invlpg               largepages           mmu_pte_updated      nmi_injections       request_irq
ubuntu:/sys/kernel# cat debug/kvm/io_exits
467789515
ubuntu:/sys/kernel#

3

请阅读此文档

http://www.mjmwired.net/kernel/Documentation/gcov.txt

以下是您的问题的答案:

  1. 内核覆盖率没有 proc 文件系统。在从新内核引导后,您需要通过命令 "mount -t debugfs none /sys/kernel/debug" 挂载 debug-fs 并从该文件中读取内核覆盖率日志。

  2. 内核覆盖率无法作为模块构建。正如您所见,CONFIG 选项是 'Y' 而不是 'M'。


问题是当我运行“mount -t debugfs none /sys/kernel/debug”时,它会说已经挂载了,而且当我在启动后检查它时,它确实带有特定的属性被挂载了,尽管它保持为空。 - Shayan
从Ubuntu 12.04的默认内核开始,调试文件系统(debug-fs)在启动后已经挂载。 - Houcheng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接