1. 前言
一直都想搞定QEMU虚拟机system态
和gdb
的动态联调,鸽了好久,终于搞定了。这里做下简单的记录。
2. 搭建
其实整体流程并没有什么难的,复杂的主要是gdbserver
的编译,因为比较耗时间。不过也可以拿师傅们编译好的直接用,差别不大。
2.1 配置gdbserver
最先安装的是我们的交叉编译链,这里列举出两类mips/mipsel
,因为最常见的也是这两类,arm等可以自行搜索
1 | sudo apt-get install linux-libc-dev-mips-cross |
安装完成后就是下载gdb
源码,进行gdbserver
的编译了,选择适合自己的版本即可
1 | https://ftp.gnu.org/gnu/gdb/ |
下载解压后,进入gdb-<version>/gdb/gdbserver
目录
1 | CC="mips-linux-gnu-gcc" CXX="mips-linux-gnu-g++" ./configure --target=mips-linux-gnu --host="mips-linux-gnu" --prefix="~/Desktop/gdbserver" LDFLAGS="-static" |
CC: 指定C编译平台
CXX: 指定C++编译平台
target: 指定目标文件运行的平台
host: 交叉编译出来的程序要执行在哪个平台
prefix: 指定安装目录(文件生成的目录)
这里也有师傅说,需要注意下CC编译平台的版本问题,但是我没有遇到,不过也还是记录下吧
做完上述操作后,就会在你指定的目录下生成一个gdbserver端了
(ps;我这里命名和上面的命令不太一样,不用在意)
这个时候就可以把它copy到QEMU虚拟机里使用了
2.2 gdbserver测试
这里copy到QEMU虚拟机后,运行命令,挂载某个进程
当然,也可以直接挂载程序。不过我这里选择了先启动程序,然后挂载进程的方法。
开启gdb
1 | gdb-multiarch // 之所以选这个就不在赘述原因了,可以自行百度 |
成功断在我们的主函数处,接下来就可以开始调试了。
3. 参考链接
1 | IoT(七)通过qemu调试IoT固件和程序 |
4. 附件
gdbserver编译好的附件,来源于Clang裁缝店
1 | 链接:https://pan.baidu.com/s/1bNbFBzt79916B9LD22jc1Q?pwd=vjp4 |
发布时间: 2022-12-13
最后更新: 2022-12-14
本文标题: QEMU-system-gdb联调
本文链接: https://foxcookie.github.io/2022/12/13/QEMU-system-gdb联调/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!