HEX中的精灵表示

时间:2017-09-06 05:06:44

标签: embedded hex microcontroller elf hexdump

我正在努力理解嵌入式系统中的一些基本概念。我的问题类似于understand hexedit of an elf。 为了将编译器输出刻录到ROM,.out文件将转换为HEX(比如intel-hex)。我想知道如何以HEX格式保存以下信息:

  1. 章节标题
  2. 符号表,调试符号,链接符号等。
  3. 精灵头。
  4. 如果在HEX文件中保存这些文件,如何从hex文件中读取它们?
  5. 有点问题,但启动时的微控制器如何知道HEX中存在.data .bss等的哪些内容并且要写入RAM?

2 个答案:

答案 0 :(得分:2)

这些都没有保留。 HEX文件仅包含原始程序和数据。 https://en.wikipedia.org/wiki/Intel_HEX

微控制器不知道.data和.bss位于何处 - 它甚至不知道它们存在。调用main()之前执行的启动代码包含这些部分的起始地址 - 地址硬编码到程序中。这个启动代码将像其他所有内容一样位于HEX文件中。

答案 1 :(得分:2)

第1点到第3点中的元素不包含在原始二进制文件中,因为它们在应用程序中没有用处;相反,它们被开发主机上的链接器和调试器使用,并且对于程序执行是不必要的,其中您需要的只是字节值和写入它们的地址,这或多或少是所有hex文件包含的(也可能包含起始地址记录。)

具有动态链接或自托管调试功能的系统(例如VxWorks)使用目标文件文件。

关于第5点,微控制器不需要知道;链接器在解析目标代码中的绝对和相对地址时使用该信息。一旦完成解析(链接),地址就会直接嵌入代码中。再次使用动态加载/链接时,需要使用目标文件元数据,并且此类系统通常不会加载原始hex文件或二进制文件。