2012-12-04 29 views
5

Sto tentando di utilizzare alcuni scenari di test da Linux test Project e ottenere il Kernel source code coverage.Copertura del codice kernel Linux - GCOV

Sto usando GCOV/LCOV per farlo.

qui sono le cose che ho finora:

  • bandiere gcov nella build config

GCOV-based kernel profiling

CONFIG_GCOV_KERNEL=y

CONFIG_GCOV_PROFILE_ALL=y

On Linux kernel version: 2.6.32.60+drm33.26

  • dopo aver costruito il kernel Ho tutti i file .gcov nella fonte cartella
  • GCOV/LCOV funziona quando utilizzo un file sorgente come input

cose che avrei dovuto, ma io non

  • /Proc/GCOV cartella
  • GCOV modulo del kernel (gcov.o?)

Ora quello che voglio è quello di eseguire gli scenari di test e con LCOV ottengono quale porzione di Linux Kernel Code è stata utilizzata finora. ma quando chiamo LCOV -c questo è ciò che ottengo anche se tutte le flag di compilazione sono ok.

Loading required gcov kernel module.

lcov: ERROR: cannot load required gcov kernel module!

C'è una patch del kernel per < 2.6.30 e poi si è costruito in

risposta

2

si prega di leggere questo documento

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

Ecco risposta alle tue domande:.

  1. Non ci sono proc fs per ke copertura del Rnel. Dopo l'avvio dal nuovo kenrel, è stato necessario montare il debug-fs tramite il comando: "mount -t debugfs none/sys/kernel/debug" e leggere il log di copertura del kernel da questo file

  2. La copertura del kernel non può essere costruito come modulo. Come si vede, l'opzione di configurazione è 'Y', non e 'M'

+0

la cosa è quando corro "-t montare debugfs none/sys/kernel/debug" si dice che è già montato e quando lo controllo dopo l'avvio è davvero montato con le attribuzioni specifiche, anche se rimane vuoto – Shayan

+0

dal kernel predefinito di ubuntu 12.04, il debug-fs è già montato dopo l'avvio. – Houcheng

3

di seguito è la mia prova sul kernel di default di Ubuntu 12.04. pensato che gcov non sia abilitato, ma il debug fs è montato e in esso è possibile trovare qualche inforestazione di debug di 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#