为什么 openocd 在通过 jtag 附加 gdb 以调试内核时会报告 EDSCR.SYS_ERR_PENDEDSCR、aarch64、avnet ultra96 的第 7 位?

问题描述

我正在尝试让 gdb(multiarch cli/eclipse)通过 jtag 和使用 openocd 在 avnet ultra 96​​ 板上调试 linux 内核。我的 jtag 调试探针是 Digilent HS3。我能够让 openocd 将内核显示为原生 gdb 线程,但随后发生此错误

Error: 598 22320 aarch64.c:1948 aarch64_write_cpu_memory(): abort occurred - dscr = 0x03047d53

生成消息的行是:

    if (retval != ERROR_OK)
        return retval;

    dpm->dscr = dscr;
    if (dscr & (DSCR_ERR | **DSCR_SYS_ERROR_PEND**)) {
        /* Abort occurred - clear it and exit */
        LOG_ERROR("abort occurred - dscr = 0x%08" PRIx32,dscr);
        armv8_dpm_handle_exception(dpm,true);
        return ERROR_FAIL;
    }

错误是由于上面调用retval = aarch64_write_cpu_memory_fast(target,count,buffer,&dscr); 十行。

我想知道这是否可能是由于粘滞位或类似的东西(JTAG-DP STICKY 错误)。 另一件让我感到困惑的事情(如果我弄错了请纠正我)是 gdb 似乎正在尝试向目标的内存写入一些内容,因此失败了。 不知道为什么 gdb 在没有设置断点的情况下会这样做。

欢迎提出任何想法。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)