2016-08-25 15 views
2

Это вопрос до this с дополнительной информацией, так как никто не ответил на него. Я клонировал последнее репо QEMU и последовал за this учебником, чтобы создать программу Hello World для arm-softmmu. Я проследил TCG, а не регистры в базовом блоке с использованием вспомогательных функций, но я столкнулся с функцией отслеживания, и я хотел попробовать. После documentation это файл my/tmp/events после расторжения файла трассировки событий.Как использовать простой трассировщик QEMU?

exec_tb 
exec_tb_exit 

Часть трассировка события-файл, в котором отключить ключевое слово удалялось для включения трассировки:

# 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" 

Это, как настроить и запустить в 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 

Из каталога arm-softmmu я запускаю простой скрипт python таким образом:

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

Я делаю что-то не так здесь? Поскольку я не получаю абсолютно никакой информации. Даже двоичный код после трассировки - это всего лишь короткая строка (тарабарщина, конечно). На самом деле я ожидал достаточно большой трассы.

ответ

-1

Я не могу определить, что вы делаете неправильно, но я могу обеспечить минимальный автономный рабочий пример, который просто работает в одной команде: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/467923860b78bb5d0c787f1433682dfc9c83223a#count-instructions

После того, как вы клонировать сделать:

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

и вы увидите следы.

для ARM:

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

Может быть, это позволит вам дифф, что это не так.

Точная QEMU конфигурации линии Buildroot сделал:

./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 

на QEMU v2.7.0 и полная команда QEMU был:

./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' 

Я также рекомендую вам начать без --enable-trace-backends, который приводит к еще более простому бэкэнду, который просто плюет на stdout, с большим штрафом за производительность. Также попробуйте GDB QEMU, вам должно быть легко выяснить, чего не хватает.

Update 2,11