3

我正在尝试使用 kgdb 调试 Linux 内核。我正在使用 qemu 作为目标机器。Ubuntu 12.04 是我的主机操作系统。我试过这个命令

cyborg@skynet:~$ qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh kgdboc=ttyAMA0,115200 kgdbwait"

它将启动并等待显示

kgdb:等待来自远程 gdb 的连接

当我尝试使用命令在 linux 主机上使用 gdb 进行调试时

cyborg@skynet: arm-none-linux-gnueabi-gdb vmlinux

(gdb): 设置远程波特率 115200

(gdb) target remote /dev/ttyS0 使用 /dev/ttyS0 进行远程调试忽略数据包错误,继续...

警告:“qSupported”响应中无法识别的项目“超时”

忽略数据包错误,继续...

忽略数据包错误,继续...

忽略数据包错误,继续...

忽略数据包错误,继续...

偏移量查询响应错误,超时

我并没有真正得到我所缺少的!

PS 我在启用 KGDB 选项的情况下编译了 linux 内核 2.6.39.4。我按照这些说明在 qemu 上运行内核。

4

2 回答 2

3

如果您/dev/ttyS0在主机上引用gdb将尝试使用存在的物理串行端口。您必须将qemu的模拟串行端口连接到gdb。阅读手册,显然您可以通过在命令行中qemu添加以下内容来将模拟端口重定向到 tcp 网络。然后您可以使用.-serial tcp::1234,serverqemugdbtarget remote :1234

于 2012-12-06T22:45:04.577 回答
1

在 Qemu 中运行时没有真正的理由使用 kgdb。您可以简单地在 Qemu 命令行上指定类似“-gdb tcp::8888”的内容并激活 GDB 存根。然后,您可以使用支持 ARM 的 GDB 连接到存根:

 target remote:8888

并调试。您可能会发现以下gdb 帮助脚本很有用

于 2012-12-07T12:54:03.527 回答