在 用 kgdb 调试64位arm内核的时候,当一切准备停当,在aarch64-linux-gnu-gdb 下输入 target remote /dev/ttyUSB0 后,gdb报出Remote ‘g’ packet reply is too long 的错误。

(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0
Remote 'g' packet reply is too long: b8b9a300c0ffffff01000000000000000000000000000000c0b9a300c0ffffff000000000000000008016f00c0ffffff825e9f00c0ffffff4b4744423a20456e746572696e67204bc07a753ac0ffffffffe0f50500000000800100000000000006000000000000006d5e9f00c0ffffff5f5e9f80c0ffffff1000000000000000e0911600c0ffffff0000000000000000000000000000000000009a00c0ffffff6700000000000000402d9a00c0ffffff0700000000000000000000000000000011000000000000008601000000000000040000000000000000406c00c0ffffff0040753ac0ffffff307d753ac0ffffff6c3a1100c0ffffff307d753ac0ffffffd4391100c0ffffff450100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

在网上找了很久,最后还是翻墙用google找到了正确的答案。
先说一下原因,在4.4内核的kgdb代码中,cpsr 寄存器的长度是64bit的,而在我用的aarch64-linux-gnu-gdb 中, cpsr 寄存器的长度被定义成32bit了,这样两边就无法匹配。正规的解决办法应该是下载最新的gdb,重新编译。但是编译gdb很麻烦,所以在stackoverflow上有人给出了一个简单的办法:
下载gdb源代码,然后把其中的aarch64-core.xml aarch64-fpu.xml aarch64.xml 这3个文件复制到你的工作目录下面,确保 aarch64-core.xml 中的cpsr 寄存器的长度为64位(我下的gdb7.8,这个问题还没有修复)

<reg name="cpsr" bitsize="64"/>

然后 在gdb 中,在执行 target remote /dev/ttyUSB0 之前,输入如下命令,以更新寄存器定义

set tdesc filename aarch64.xml

这样做了以后,就可以在64位的ARM内核上使用kgdb了。

Logo

更多推荐