从ELF文件中读取符号内容的Trace32命令

8

问题场景: 简单来说,我们是否有Trace32命令可以从已加载到目标上的ELF文件中读取符号(及其内容)?我们有这种特殊情况,即将ELF文件的应用程序特定调试符号作为“ .noload ”部分的一部分制作,这意味着符号/内容是ELF文件的一部分(使用readelf -a xxxx.elf_file_name读取时可用),但不是最终生成的二进制映像的一部分,即在生成xxx.bin并将其闪存到目标内存时,ELF文件中的“.noload”部分被剥离。

  • “.noload”部分中的调试符号是静态分配的值,这些值在运行时不会更改。
  • 当我尝试读取编译为二进制文件并加载到Trace32后的“.noload”部分的调试符号时,在Trace32弹出窗口上看到“ MMU fail”的标记,这意味着Trace32正在尝试从内存中读取符号内容,但无法访问,因为“.noload”部分的符号根本没有被加载,尽管它们有映射地址。

任何意见:
- 我需要一个Trace32命令的帮助,可以直接从ELF文件而非目标内存中读取符号内容。
- 如果我们没有上述查询的解决方案,也不确定是否可以在实践脚本中使用“ readelf ”?任何在这个方向上的帮助都可以。

1个回答

13

使用命令

Data.LOAD.Elf myfile.elf [<optional address offset>] /NoCODE

选项 /NoCODE 指示 TRACE32 仅从您的 ELF 中加载调试符号,而不将任何代码加载到目标设备中。您可以使用命令 sYmbol.Browse 查看这些符号。

然而,如果您使用 TRACE32 将应用程序加载到目标设备上,您无需先创建 ELF 二进制文件。使用 TRACE32,您也可以直接加载 ELF 的 PROGBITS 部分到目标设备上。 在这种情况下,您只需使用 Data.LOAD.Elf 命令(启用闪存编程后不带 /NoCODE 选项)。

由于您正在使用 MMU,您可能想要使用命令 SYStem.Option.MMUSPACES ON 激活逻辑内存空间 ID。然后使用以下命令加载您的符号:

Data.LOAD.Elf myfile.elf <space-ID>:<offset> /NoCODE

'space-ID'是您MMU用于任务的空间ID,而 'offset'通常为零。

如果您在嵌入式Linux上调试应用程序,则应使用TRACE32 OS awareness for Linux和Linux符号自动加载程序将符号加载到正确的地址。

我认为没有任何理由在TRACE32中使用'readelf'。无论如何,您都可以使用命令OS.AreaOS.Command来调用任何命令行程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接