S37文件和ELF文件之间的区别

4
我使用嵌入式系统。在C源代码构建完成后,我会得到许多文件。文件名相同,但扩展名不同:
.s37 .elf .hex .sig
它们之间有什么区别?主要是.s37和.elf之间的区别是什么?

1
.s37是Motorola s-record格式的原始二进制文件,使用32位地址,可用于生产目的。.elf是您调试器专用的ELF调试器标准文件。(.hex是Intel的s-record等效文件,大致同样受欢迎) - Lundin
.sig - 我猜是某种签名 - 工具特定且您没有指定工具。您的工具文档可能有所帮助。其他三个文件格式是应用程序图像。.elf可以供调试器使用,S-Record和Intel Hex用于ROM / Flash编程。 - Clifford
1个回答

3

这些只是不同的可执行文件格式。

.s37是SREC格式之一,它是包含十六进制(二进制)的ASCII /行固定文本。

这种格式在大多数嵌入式目标中的闪存/上传软件中广为人知。

.elf是一个可执行和可链接文件,是像gcc或其他商业编译器(Windriver,CodeWarrior...)的链接器的产品。

在将.elf转换为.SREC并上传到嵌入式目标之前,.elf格式很难上传,需要使用objcopy进行转换。内容上的主要区别之一是,.elf可以包含调试符号,而.srec / .s37则不能。

我的猜测是您的工具链可以完成所有操作:链接:.elf,然后使用objcopy将.elf转换为.s3以进行目标上传(如果有任何符号信息,则会丢失,这需要在调试目标应用程序时保留.elf文件,SREC文件仅包含代码和数据,没有调试信息)。

S3格式无法包含符号。它们被丢弃,即使使用简单的objcopy命令也是如此。该格式仅用于包含要上传到目标上的代码/数据。


“内容上的主要区别之一是,.elf格式可以包含调试符号,而.srec/.s37则不行。” - 你有关于.srec文件无法包含调试信息的来源吗?ELF文件可以包含但SREC不能的其他信息还有吗? - AJM
我无法明确找到它(objcopy的源代码也很复杂...),但是使用symbolsrec而不是srec作为目标格式的相同objcopy命令会生成带有符号的输出,而srec输出则没有。我已经进行了编辑以澄清。 - Jean-François Fabre

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