【问题标题】:Linux Kernel Code Coverage - GCOVLinux 内核代码覆盖率 - GCOV
【发布时间】:2012-11-22 15:10:36
【问题描述】:

我正在尝试使用来自Linux test Project 的一些测试场景并获取Kernel source code coverage

我正在使用 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 内核模块!

【问题讨论】:

    标签: linux kernel code-coverage gcov lcov


    【解决方案1】:

    以下是我在 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#
    

    【讨论】:

      【解决方案2】:

      请阅读本文档

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

      这里是您问题的答案:

      1. 没有用于内核覆盖的 proc fs。从新的 kenrel 启动后,您必须通过以下命令挂载 debug-fs:“mount -t debugfs none /sys/kernel/debug”并从此文件中读取内核的覆盖率日志

      2. 内核覆盖率不能构建为模块。如您所见,CONFIG 选项是“Y”,而不是“M”

      【讨论】:

      • 问题是当我运行“mount -t debugfs none /sys/kernel/debug”时,它说它已经挂载,当我在启动后检查它时,它确实挂载了特定的属性,虽然它仍然是空的。
      • 从ubuntu 12.04的默认内核,开机后debug-fs也已经挂载了。
      猜你喜欢
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2021-07-01
      • 2015-09-29
      • 2011-08-07
      • 2016-12-15
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多