2016-08-25 3 views
2

Ceci est une suite à this question avec des détails supplémentaires puisque personne n'a aidé à y répondre. J'ai cloné le dernier repo QEMU et suivi le tutoriel this pour créer un programme Hello World pour arm-softmmu. J'ai tracé le TCG, plutôt les registres dans le bloc de base en utilisant les fonctions auxiliaires, mais je suis tombé sur la fonctionnalité de traçage et je voulais l'essayer. Après le documentation, il s'agit de mon fichier d'événements/tmp/après la suppression du commentaire du fichier d'événements de trace.Comment utiliser le backend simple de QEMU?

exec_tb 
exec_tb_exit 

La partie du fichier trace-événements dans lesquels le mot-clé désactiver a été supprimée pour permettre la trace est:

# TCG related tracing (mostly disabled by default) 
# cpu-exec.c 
exec_tb(void *tb, uintptr_t pc) "tb:%p pc=0x%"PRIxPTR 
exec_tb_nocache(void *tb, uintptr_t pc) "tb:%p pc=0x%"PRIxPTR 
exec_tb_exit(void *last_tb, unsigned int flags) "tb:%p flags=%x" 

Voici comment configurer et exécuter l'exécutable qemu:

./configure --target-list=arm-softmmu --enable-trace-backends=simple 

make 

./qemu-system-arm -trace events=/tmp/events -M versatilepb -m 256M -nographic -kernel ~/FileName.bin 

Depuis le répertoire arm-softmmu, je lance le script simple trace python de cette façon:

./scripts/simpletrace.py trace-events arm-softmmu/trace-*pid* | head 

Est-ce que je fais quelque chose de mal ici? Depuis que je reçois absolument aucune information. Même le binaire après le traçage est juste une ligne courte (de charabia, bien sûr). Je m'attendais à une trace assez grande en réalité.

Répondre

-1

Je ne peux pas repérer ce que vous faites mal, mais je peux fournir une auto minimale de travail qui contenait exemple fonctionne en une seule commande: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/467923860b78bb5d0c787f1433682dfc9c83223a#count-instructions

Une fois que vous clone faire:

./run -n -- -trace exec_tb,file=trace 
./qemu/scripts/simpletrace.py qemu/trace-events trace >trace.txt 
wc -l trace 

et vous verrez les traces.

Pour ARM:

./run -a arm -- -trace exec_tb,file=trace 

Peut-être que cela vous permettra de DIFF ce qui est faux.

La ligne de configuration QEMU exacte Buildroot a été:

./configure --target-list="arm-softmmu" --prefix="/home/ciro/bak/git/linux-kernel-module-cheat/buildroot/output.arm~/hos 
t/usr" --interp-prefix=/home/ciro/bak/git/linux-kernel-module-cheat/buildroot/output.arm~/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot --cc="/usr/bin/gcc" --host-cc="/usr 
/bin/gcc" --python=/home/ciro/bak/git/linux-kernel-module-cheat/buildroot/output.arm~/host/usr/bin/python2 --extra-cflags="-O2 -I/home/ciro/bak/git/linux-kernel-module-cheat/bu 
ildroot/output.arm~/host/usr/include" --extra-ldflags="-L/home/ciro/bak/git/linux-kernel-module-cheat/buildroot/output.arm~/host/lib -L/home/ciro/bak/git/linux-kernel-module-ch 
eat/buildroot/output.arm~/host/usr/lib -Wl,-rpath,/home/ciro/bak/git/linux-kernel-module-cheat/buildroot/output.arm~/host/usr/lib" --enable-debug --enable-sdl --extra-cflags='- 
DDEBUG_PL061=1' --with-sdlabi=2.0 

sur QEMU v2.7.0, et la commande complète QEMU était:

./buildroot/output.x86_64~/host/usr/bin/qemu-system-x86_64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1 -M pc -append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0 init=/poweroff.out' -device edu -device lkmc_pci_min -device virtio-net-pci,netdev=net0 -kernel ./buildroot/output.x86_64~/images/bzImage -nographic -trace exec_tb,file=trace -drive file='./buildroot/output.x86_64~/images/rootfs.ext2.qcow2,if=virtio,format=qcow2' 

Je recommande également que vous commencez sans --enable-trace-backends, qui conduit à la backend encore plus simple qui crache juste les choses à stdout, avec une grande pénalité de performance. Essayez aussi GDB QEMU, il devrait être facile de comprendre ce qui manque.

mise à jour 2,11