Linux内核代码覆盖率 – GCOV

我试图从Linuxtesting项目中使用一些testing场景,并获得内核源代码覆盖率 。

我正在使用GCOV / LCOV来做到这一点。

这是我迄今为止的事情:

  • 编译configuration中的GCOV标志

基于GCOV的内核分析

CONFIG_GCOV_KERNEL = Y

CONFIG_GCOV_PROFILE_ALL = Y

在Linux内核版本上:2.6.32.60 + drm33.26

  • 在构build内核之后,我将所有.gcov文件放在源文件夹中
  • 当我使用源文件作为input时,GCOV / LCOV起作用

我应该有的东西,但是我没有

  • / Proc / GCOV文件夹
  • GCOV内核模块(gcov.o?)

现在我想要运行testing场景,并且使用LCOV获取Linux Kernel Code的哪一部分到目前为止。 但是当我打电话给LCOV-C这是我得到,即使所有的build立标志都没问题。

加载需要的gcov内核模块。

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

有一个<2.6.30内核补丁,然后内置。

下面是我在Ubuntu 12.04默认内核上的尝试。 以为gcov没有启用,但是调试fs被挂载,并且可以在其中找到一些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# 

请阅读这个文件

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

这里回答你的问题:

  1. 没有内核覆盖的过程。 从新的kenrel启动后,必须通过命令“mount -t debugfs none / sys / kernel / debug”来挂载debug-fs并从该文件读取内核的覆盖日志

  2. 内核覆盖不能被构建为模块。 如你所见,CONFIG选项是'Y',而不是'M'