Hexagon TRACE32 使用指南(5)

9 使用Trace32

9.1概述

本章介绍了与使用Trace32相关的各种问题。
它涵盖以下主题:

  • 错误信息“debug port fail”或“debug port time out”
  • 调试器窗口显示闪烁的数据
  • 在符号浏览器中使用通配符
  • 进入功能时的警告消息
  • 错误消息“正在运行(关闭)”
  • 错误消息“仿真调试端口失败…”
  • 在目标应用程序中调试异常
  • TRACE32 失败并显示消息“总线错误”
  • TRACE32 失败并显示消息“访问超时,处理器正在运行”
  • TRACE32 终止并请求许可文件
  • 在没有 GUI 的情况下运行调试器

9.1.1 错误信息“debug port fail”或“debug port time out”

trace32 debugger命令系统。UP通常是在调试会话中执行的第一个命令。

如果此命令生成错误消息“调试端口失败”或“ Debug Port Time Out”,请打开调试器区域窗口以查看可能生成的任何其他消息(例如,“重置中的目标处理器”只是一个后续UP错误消息)。

“调试端口”错误消息的产生有多种原因:

  • 目标系统没有电源,或者调试电缆未连接到目标。这会导致附加错误消息“target power fail”。
  • 命令 system.cpu 指定了无效的处理器类型。
  • JTAG 接口遇到电气问题——检查原理图。
  • 需要在目标上启用(跳线)调试功能。例如,如果信号 nTRST 在目标端直接接地,调试器将无法工作。 (这是某些 SURF 板上的已知问题。)
  • 目标系统处于不可恢复状态 - 重新启动并重试。
  • 目标系统在复位时无法与调试器通信。如果发生这种情况,请尝试使用 system.mode attach 后跟 break,或者“system.option enreset off”,而不是使用 system.up 命令。
  • 默认的 JTAG 时钟速度太快,尤其是在仿真目标处理器或使用基于 FPGA 的目标时。在这种情况下尝试使用命令“system.jtagclock 50kHz”;然后在目标工作后,尝试逐渐增加指定的时钟速度。
  • 目标处理器需要自适应时钟。在这种情况下,使用命令“ system.jtagclock rtck”指定RTCK模式(对于ARM内核是典型的)。
  • 当目标是雏菊链的多核系统时,辩论者多核心设置缺失。要检查此信息,请输入命令“ Diag 3400”,然后查看区域窗口:
    • 值“ir_width > 5”表示需要多核设置。
    • 值“ir_width = 4”(ARM9)表示不需要多核设置。
    • 如果没有显示值,则可能是 JTAG 接口有问题。
  • 目标处理器没有时钟。
  • 目标处理器以重置为单位。
  • 存在一个需要停用的监视计时器。

9.1.2 调试器窗口显示闪烁的数据

如果调试器窗口中的数据闪烁,请尝试以下解决方案之一:

  • 确保禁用 turbo 模式(使用命令“system.option turbo off”)。
  • 默认的 JTAG 时钟速度可能太快了。尝试使用命令“system.jtagclock 50kHz”;然后如果闪烁消失,尝试逐渐增加指定的 JTAG 时钟速度。
  • 检查 MMU 是否正确编程。如果不是,则显示的数据可能不是您认为的数据。

9.1.3 进入功能时的警告消息

当 TRACE32 调试器中断/进入一个函数时,它会尝试根据它在新进入的函数中遇到的调试符号来读取源代码信息。

如果找不到源代码信息,调试器将生成一条警告消息。如果在调试程序时出现警告消息,有两个选项可用于帮助 TRACE32 找到正确的源路径:
解决方案 1:
使用以下命令删除六个路径变量,并将它们替换为包含源代码文件路径的字符串。例如:
d.load.elf ..\..\build\ig_server.reloc /STRIPPART 6 /PATH L:\user\tools

解决方案 2:
使用命令symbol.sourcepath 直接指定源文件。例如:
symbol.sourcepath + L:\user\tools\rtos\okl-1.3.4\libs\qurt\src\qmsgq\sys-iguana\qMsgQClient.c

9.1.4 错误消息“正在运行(关闭)”

如果 TRACE32 调试器在您单击继续后显示消息“正在运行(关闭)”,则表明线程继续执行停止指令。 (请注意,线程通常无法在停止后执行。)

此事件最可能的原因是目标应用程序崩溃,然后导致 RTOS 内核执行断言,从而停止所有线程。要调试断言的原因,请使用第 9.1.6 节中描述的过程。

9.1.5 错误消息“仿真调试端口失败…”

如果 TRACE32 调试器显示消息:
Emulation debug port fail. Unable to set up debugging, ISDB clock off
…这意味着没有时钟到达 ISDB(如 ISDB 启用寄存器字段 ISDB_CLK_OFF 设​​置为 1 所示)。

这通常表示在调试器尝试访问 ISDB 时没有时钟被驱动到 Hexagon。调试器设置 JTAG_ISDB_EN​​ 然后轮询 ISDB_CLK_OFF;如果一段时间后它没有看到值翻转为零,调试器就会放弃。

默认情况下,调试器会在放弃之前轮询 ISDB_CLK_OFF 100 次。可以使用命令“DIAG 3003.xxx”更改轮询计数,其中 xxx 指定轮询计数。

注意
更改轮询计数会影响其他超时,并且如果计数设置得太高可能会导致奇怪的行为。另请注意,DIAG不支持 DIAG 命令。

9.1.6 在目标应用程序中调试异常

最佳情况下,RTOS 内核将通过执行以下操作来响应目标应用程序中的用户页面错误或未处理的异常:

  1. 停止所有其他正在执行的线程
  2. 刷新内存
  3. 报告当前硬件线程的寄存器状态
  4. 停止本身

但是,Hexagon V2 处理器中的硬件限制会阻止当前硬件线程立即停止其他硬件线程。

因此,捕获这些异常的最佳方法是在以下标签符号上设置断点:

  • hexagon_page_fault
  • hexagon_error_exception

当遇到断点时,使用调试工具从 TCB(线程控制块)获取必要的寄存器和线程信息。
表 A-1 显示了 TCB 的存储器结构。

表 A-1 TCB 的存储器结构
| 域 | 描述 | | ---- | ---- | | myself_global | 线程全局ID | | thread_state | 线程状态: running (0x2):如果上下文= -1,则线程正在运行或可运行 watch_forever(-1):线程等待从其他线程接收IPC watch_timeout(0x5):线程等待接收IPC从其他线程通知 polling (0xb): 线程等待发送 IPC 给另一个线程,它还没有准备好接收 IPC halted (0xd):等待接收中断的IRQ线程 | | partner | 伙伴线程包含参与 IPC 操作的其他线程的线程 ID(或 -1 用于等待来自任何人的消息)| | priority | 线程优先级 | | context | 硬件线程当前正在使用的 Hexagon 处理器单元 (0-3)。如果未安排单元,则设置为 -1。 | | scheduled_unit | 硬件线程计划使用的 Hexagon 处理器单元 (0-3)。 |

9.1.7 TRACE32 失败并显示消息“总线错误”

如果Trace32调试器显示消息“总线错误”,然后失败,则表明Trace32或RTOS意识模块尝试访问未定义的内存。
Trace32调试器维护MMU翻译的缓存副本(这是Elf Files,L4 Page表和TLB的静态映射的超集)。

调试器脚本配置MMU并提供有关内核MMU映射的信息以及根任务页表的基础地址。这些脚本必须正确配置。

每当发现不匹配时,调试器将设置为触发Autoscan。此扫描涉及RTOS意识模块提供正确的页面表指针。 RTOS意识模块可能不会初始化为正确的物理地址。解决方法是仅设置片上断点。

9.1.8 TRACE32 失败了消息“访问超时…”

如果Trace32调试器显示消息“访问超时,处理器运行”并失去了对目标的控制,则表明调试器试图执行访问目标的命令,但目标正在运行。

注意
当目标停止不起作用时(例如,六边形处于OFF状态)时,此消息也会出现。

9.1.9 TRACE32 终止并请求许可文件

每当使用未经许可的软件组件(例如处理器或 GDI 扩展)启动 TRACE32 时,Lauterbach 允许免费使用 60 分钟,之后应用程序会自动终止并显示一条消息,表明需要有效的许可。

要使用 TRACE32 而不必每 60 分钟重新启动它,您必须为相关组件购买许可证。

9.1.10 在没有 GUI 的情况下运行调试器

要在没有 GUI 的情况下启动 TRACE32 调试器,请将以下命令添加到 TRACE32 配置文件 (config.t32):
screen = OFF

注意
在没有 GUI 的情况下运行 TRACE32 通常是在用户需要执行自动化测试时完成的。

猜你喜欢

转载自blog.csdn.net/weixin_38498942/article/details/129986004
今日推荐