USB论坛
直播中

张玉珍

8年用户 1143经验值
私信 关注
[问答]

有办法让SDK 1.3.5与JTAG调试器配合使用吗?

我有一个使用 FX3 (CYUSB3014) 和 FX3 SDK 1.3.5 的简单项目。
我将 Segger J- 6EDL_SPI_LINK连接到 JTAG 引脚。 另外,还有一个使用 Segger J- 6EDL_SPI_LINK GDB 服务器的调试配置。
我看到控制台中打印了多个错误,如下所示:
827^error,msg="Dwarf Error:无法找到从 .... 的 DIE 引用的位于 0x0 的 DIE
调试器停止在主界面。 之后,如果我继续执行(运行),调试器就不再响应--不会在任何断点处停止,也不允许暂停。 我只能终止调试会话。
如果我更改项目设置,并将其切换到 FX3 SDK 1.3.4,则一切正常。
看来 SDK 1.3.5 中的预置库出了问题,因为这是唯一真正发生变化的地方。
有办法让 SDK 1.3.5 与 JTAG 调试器配合使用吗?

回帖(1)

王鹏

2025-5-30 17:45:23

针对你遇到的FX3 SDK 1.3.5与JTAG调试器兼容性问题,以下是分步解决方案:




1. 确认调试工具链兼容性




  • 升级Segger工具链

    检查Segger J-Link驱动和GDB服务器是否为最新版本。旧版本可能无法解析新SDK生成的DWARF调试信息。





  • 验证GDB兼容性

    确保使用的GDB版本与SDK 1.3.5的编译器(如GCC版本)匹配。若SDK 1.3.5使用较新的GCC,需升级GDB。






2. 检查SDK 1.3.5的调试符号生成




  • 重新编译项目并包含完整调试信息

    在项目配置中强制生成调试符号(如GCC的-g3选项),确保没有优化干扰:


    CFLAGS += -g3 -O0    # 禁用优化并生成详细调试信息



  • 检查预编译库的调试符号

    SDK 1.3.5可能提供的预编译库(如cyfxapi.a)未包含调试符号。尝试:



    • 从SDK源码重新编译库(如果有源码)。

    • 临时替换为SDK 1.3.4的库文件(需测试兼容性)。






3. 调整链接器脚本与内存映射



  • 核对.ld文件配置

    对比SDK 1.3.4和1.3.5的链接器脚本(如cyfx3.ld),确保调试相关段(如.debug_*)未被错误配置或遗漏。

    • 示例修改(保留所有调试段):
      SECTIONS {
      /* 确保以下段存在且地址有效 */
      .debug_info 0 : { *(.debug_info) }
      .debug_abbrev 0 : { *(.debug_abbrev) }
      .debug_line 0 : { *(.debug_line) }
      ...
      }





4. 排查工具配置问题




  • GDB服务器参数调整

    在Segger J-Link GDB服务器中,添加参数强制忽略DWARF验证错误:


    -strict -nogui -vd    # 详细模式查看错误上下文



  • 手动加载符号表

    在GDB中尝试手动加载符号文件,绕过自动解析:


    (gdb) file ELF_FILE_PATH   # 显式指定ELF文件路径
    (gdb) target remote :2331  # 连接到J-Link





5. 临时回退或等待官方修复




  • 回退到SDK 1.3.4

    如果项目紧急且无SDK 1.3.5的强制需求,可暂时继续使用1.3.4版本,并向Cypress提交技术支持请求。




  • 监控Cypress更新

    检查Cypress社区或官方论坛是否有类似问题报告或热修复补丁。






6. 联系技术支持



  • 提交详细报告

    向Cypress/Infineon技术支持提供以下信息:

    • 完整的错误日志(包括DWARF错误上下文)

    • 项目配置、编译器版本、链接器脚本

    • Segger工具版本和GDB服务器日志





通过以上步骤,应能定位到DWARF错误根源并恢复调试功能。若问题仍存,建议结合硬件调试(如JTAG信号完整性测试)进一步排查。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分