学习目标
问题:
- 在用qemu + libvirtd中,是如何调试的?如何获取日志信息?如何将qemu的消息打印出来?
- 在qemu系统中,如何去调试?在libvirt中,又如何去调试追踪?
顺便贴下编译qemu的方法
sudo apt-get install -y libpixman-1-dev # 需要依赖 pixmansudo apt-get install -y build-essential libepoxy-dev libdrm-dev libgbm-dev libx11-dev libvirglrenderer-dev libpulse-dev libsdl2-devsudo apt-get install -y libgusb-dev # libusb需要# spice 安装 https://blog.csdn.net/clydezhou/article/details/7418782# opengl mesa 安装# 自己用的调试版本git clone git://git.qemu.org/qemu.gitgit checkout -b v4.0.0 v4.0.0make clean./configure --prefix= \--enable-kvm \--enable-trace-backends=log \--disable-strip \--enable-debug \--enable-debug-info \--enable-libusb \--enable-usb-redir \--enable-curl \--enable-sdl \--enable-opengl \--enable-virglrenderer \--enable-system \--enable-modules \--audio-drv-list=pa \--enable-vhost-net \--enable-vnc \--target-list=x86_64-softmmuroot@inno-MS-7B89:qemu# /usr/local/bin/qemu-system-x86_64 --versionQEMU emulator version 4.0.0 (v4.0.0-dirty)
注:在编译qemu时最好把所有debug信息都打开
--enable-trace-backends=log \--disable-strip \--enable-debug \--enable-debug-info \
qemu-mointor
相关参考:
如何使用mointor模式
使用qemu-system-xxx命令创建的虚拟机,可通过以下方式进入到mointor模式
ctrl+alt+1 虚拟机模式ctrl+alt+2 qemu调试模式, 可通过 info xxx查看虚拟机状态
在libvirtd如何使用mointor
virsh qemu-monitor-command --hmp domain_name help # 查看支持命令# 比如 domain_name=ubuntu18.04# virsh qemu-monitor-command --hmp ubuntu18.04 info # 进入到mointor的info命令
注:
- qemu monitor protocol 简称qmp,是以json为格式的一种协议
- qmp和hmp的区别是qmp命令使用的是json格式,hmp直接使用命令
- qmp本质是一个本地的unix socket。qemu是server端,libvirt是client端
利用gdb调试qemu
注:这里不是使用gdb调试 qemu中的系统,而是用gdb来调试qemu
gdb --tui --args qemu-system-......gdb --tui --args /opt/x86_64/qemu-x86-bin/bin/qemu-system-x86_64 -smp 2 -cpu host -enable-kvm -m 512M -kernel linux/arch/x86/boot/bzImage \-hda ./x86_64.img -hdb ./Freeze.img -nographic \-append "root=/dev/sda rw rootfstype=ext4 console=ttyS0 init=linuxrc loglevel=8"
qemu的打印
qemu的trace
相关参考
- 官方:tracing.txt
- Qemu Trace系统使用
- qemu trace debug
编译
qemu需要带trace功能,则configure中需要使能trace 后端系统--enable-trace-backends=log # 参考可选为 log / simple(默认值)
使用
# 添加你想要trace的event$ cat /tmp/eventsvirtio_blk_req_completevirtio_blk_handle_write# 启动虚拟机带入trace参数-trace events=/tmp/events,file=trace.bin/tmp/events就是要跟踪的event,而trace.bin就是trace产生的文件,不能直接读,而要通过工具来读。# 通过专业工具去解析 https://github.com/qemu/qemu/tree/master/scripts/tracetoolpython3 simpletrace.py trace-events trace.bin
