Qemu 问题中用于 m68k 的 GDB

问题描述

我正在尝试使用 GDB 来调试在 m68k 架构上运行的 Qemu。我正在尝试对 Qemu 源进行一些更改以向 m68k 支持添加一些功能,并且我正在尝试使用 GDB 来测试我当前所做的更改。需要注意的是,我使用的是 Qemu v5.2.0-rc1,因为这是我同时使用的更大系统中当前使用的 Qemu 版本。目前,我正在使用 qemu-system-m68k 在该架构上运行 buildroot(uClinux 内核),使用 gdb 的“-s -S”选项。在单独的终端中,我尝试使用 (gdb) target remote localhost:1234 在该远程目标上运行 GDB,但收到以下错误消息:

warning: Architecture rejected target-supplied description

到 uClinux Qemu 内核的连接似乎没问题,但我无法连接到远程主机。

我已经尝试为这个问题找到任何可能的解决方案,包括设置 GDB 架构(目前说的是 i386,不确定这是否正确),这不起作用。我不知道如何让 GDB 在这个 m68k Qemu 模拟 Linux 内核上运行,任何帮助都会很棒。谢谢!

解决方法

错误信息意味着 QEMU 的 gdb 存根向 gdb 发送了 CPU 是什么的描述(主要是寄存器列表),而 gdb 不理解它。造成这种情况的一个常见原因是尝试使用 gdb 调试错误的架构。

您需要使用了解目标架构的 gdb。在 Ubuntu 上有一个“gdb-multiarch”包,它有一个 gdb-multiarch 二进制文件,它知道的不仅仅是 x86。否则,您可能需要从源代码构建 gdb。您可以通过不带参数运行并输入命令 set arch m68k 来检查您的 gdb 是否知道 m68k。如果它回复 The target architecture is assumed to be m68k 那就没问题(而且你的问题更复杂);如果它给你一个错误(例如 Undefined item: "m68k"),那么你需要使用不同的 gdb。