如果你同时使用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):

Comments | NOTHING