我正在尝试使用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上运行内核。
答案 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