相关疑难解决方法(0)

GDB远程协议:如何分析数据包?

我有:

  • 采用eCos OS的专有原型ARM板(基于Cortex-M3)
  • 该板具有编程的RedBoot引导加载程序
  • 串行线(RS-232)
  • ARM的GDB调试器(arm-eabi-gdb)
  • 主机操作系统是Windows/Cygwin和/或Linux(实际上,无所谓)

问题: GDB调试器无法通过串行线连接到目标.

我想要的是:嗅探GDB远程协议的数据包,以便查明目标上的GDB存根是否存活并运行.

详细信息: RedBoot可以选择将目标控件传递给内置GDB存根.我知道RedBoot还活着,我可以连接它并通过串行线发送命令.RedBoot手册说,可以通过键入$或+符号(实际上是GDB远程协议数据包的前缀)来切换到GDB存根.它似乎适用于我发送终端死亡的那些符号.但我不确定RedBoot是否使用GDB存根支持进行编译(不要问我为什么:-)).

然后,当我尝试使用我的GDB调试器连接到电路板时,我得到以下图片(在Windows上):

(gdb) target remote COM3
Remote debugging using COM3
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Ignoring packet error, continuing...
Run Code Online (Sandbox Code Playgroud)

端口是正确的,波特率也是如此.实际上,如果我尝试对另一个没有连接的串口做同样的输出,我会得到相同的输出.

我想知道的是GDB存根是否发回任何东西?

直觉上我想的可能

set verbose on
Run Code Online (Sandbox Code Playgroud)

会有所帮助,但GDB手册说它影响非常有限,我的情况超出了它.

也许可以使用宏来编译GDB调试器,从而启用调试日志记录?

gdb ecos

13
推荐指数
1
解决办法
4906
查看次数

qemu-system-aarch64 模拟 a53 开机时进入 el1

我已经下载了最新的 qemu Windows 版本,然后在下面运行

qemu-system-aarch64 -M virt,gic_version=3 -cpu cortex-a53 -smp 2 -nographic 
-m 2048 -kernel mybaremetal.axf -s -S
Run Code Online (Sandbox Code Playgroud)

为了模拟双核 cortex-a53,我可以使用 aarch64 gdb 客户端连接到它,在 mybaremetal.axf 的入口处,我通过以下方式检查了执行的异常级别:

mrs x1, CurrentEL
Run Code Online (Sandbox Code Playgroud)

我总是在 x1 中得到值 4,但这里预期值 0xc,如 ARM 文档中所示,它说:在加电和复位时,处理器进入 EL3

有人知道原因吗?

arm qemu arm64

5
推荐指数
1
解决办法
2771
查看次数

标签 统计

arm ×1

arm64 ×1

ecos ×1

gdb ×1

qemu ×1