利用脚本的自动化QEMU & GDB

发布于 2019-09-17  193 次阅读


如果你同时使用gdb和qemu进行开发,可能你会为了反复启动和关闭这两个程序而感到麻烦。这里准备了一个自动脚本,可以自动地启动这两个程序,并进行分屏。

首先,本脚本在tmux环境下运行,首先你需要安装tmux,并且在进入命令行之后运行tmux。( 不想看原理的请跳过这部分直接去copy脚本)。

下面先准备gdb的启动脚本。假设在x86机器上调试mips程序,qemu远程端口启动在50010,程序入口在0xa0800000,那么准备这样一个文件,取名为init.gdb

set arch mips
target remote :50010
b *0xa0800000
c

显而易见,这就是一些gdb命令,这些命令会在gdb启动的时候被首先执行。

其次来准备qemu。假设利用qemu模拟pmon连接龙芯机器上的过程。这里我直接把我课程中老师提供的脚本文件复制出来了。由于本课程中PMON每次都需要输入一次loadboot,这很烦人,又利用到qemu输入输出被定向到了stdio,先把这句话传递给它即可。

总结一下,得到这样的脚本。

#!/bin/bash

if [[ ! "$TERM" =~ "screen".* ]];then
    echo "Use this script in tmux!"
else
    tmux split-window -h 'gdb-multiarch -x ../init.gdb'

    echo -e "loadboot\n" | SERIAL=2 ../QEMULoongson/qemu/bin/qemu-system-mipsel -M ls1c -vnc 127.0.0.1:0 -kernel ../QEMULoongson/bios/gzram -gdb tcp::50010 -m 32 -usb -drive file=disk,id=a,if=none -device usb-storage,bus=usb-bus.1,drive=a -serial stdio "$@" -k /usr/share/qemu/keymaps/en-us
fi

一定一定需要注意:

这个脚本中使用了相对路径,想要让这个脚本正确运行需要保证相对路径正确。我想即使有人看不懂脚本在干什么,把可执行文件的相对路径加一个或者减一个..还是没问题的。实在不行,请把所有文件按照这样的方式组织(假设该脚本名字叫做serial.sh):

至于chmod加可执行权限什么的,STFW。