2016-11-28 349 views
2

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

  • '.noload'部分中的调试符号是静态指定的值,这些值在运行时不会更改。
  • 当我尝试读取'.noload'部分的调试符号部分(编译成二进制文件并加载到Trace32后)时,我看到trace32弹出窗口上标记为'MMU失败',这意味着trace32正在尝试读取符号内容从内存中,但不可访问,因为'.noload'部分的符号部分根本没有加载,虽然他们有地址映射。

任何输入
- 我需要可以直接读取不是从目标存储器ELF文件符号内容的TRACE32命令帮助。
- 还不确定我是否可以在练习脚本中使用'readelf'?如果我们没有针对上述查询的解决方案,在这个方向上有什么帮助?

回答

3

使用命令

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

选项/的NoCode指示TRACE32只能从您的ELF加载debgug符号,但不加载任何代码到目标。你可以用命令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用于Task的空间ID相匹配,'offset'通常为零。

如果您正在嵌入式Linux上调试您的应用程序,那么您应该使用Linux的TRACE32操作系统感知和Linux符号自动加载程序将符号加载到正确的地址。

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