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のカーネルパッチがあり、その後それが組み込まれています。

4

2 に答える 2

3

以下は、ubuntu 12.04デフォルトカーネルでの私の試みです。gcov が有効になっていないと思っていましたが、debug 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#
于 2013-01-15T05:10:07.040 に答える
3

この文書を読んでください

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

ここにあなたの質問への答えがあります:

  1. カーネル カバレッジ用の proc fs はありません。新しいケンレルから起動した後、コマンド「mount -t debugfs none /sys/kernel/debug」で debug-fs をマウントし、このファイルからカーネルのカバレッジ ログを読み取る必要がありました。

  2. カーネル カバレッジをモジュールとしてビルドすることはできません。ご覧のとおり、CONFIG オプションは「M」ではなく「Y」です。

于 2012-12-28T06:57:16.767 に答える