KGDB远程调试错误

时间:2012-12-06 16:43:52

标签: linux debugging linux-kernel gdb kernel

我正在尝试使用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):设置remotebaud 115200

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

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

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

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

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

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

对偏移查询的格式错误的响应,超时

  

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

P.S。我编译了Linux内核2.6.39.4并启用了KGDB选项。我按照these指令在qemu上运行内核。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

 target remote:8888

然后调试。您可以找到以下gdb helper scripts useful