MCU常用文件格式

1. asm文件

        asm是汇编语言源程序的扩展名,.asm文件是以asm作为扩展名的文件,是汇编语言的源程序文件。汇编语言(Assembly Language)是面向机器的程序设计语言,是利用计算机所有硬件特性并能直接控制硬件的语言。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。

2. bin文件

        bin文件是二进制文件,是文件格式binary的缩写,后缀名为".bin"的文件,表式它是binary格式。通常来说,它的内容是机器代码,汇编语言编译后的结果。

注意:CPU执行 bin只需要将程序加载到其起始地址,即可执行。uboot和Linux kernel启动时没有ELF Loader,所以烧在flash上的文件只能是raw bin,即镜像文件image

BIN文件是 raw binary 文件,这种文件只包含机器码。
BIN文件(也叫镜像文件)中的所有数据都是机器可以执行的指令码、指令参数或者常量数据,不包含其它调试信息。加载到内存或者Nor FLASH等支持XIP(就地执行)的存储器中规定好的加载地址之后直接从规定好的运行地址开始运行即可。例如单片机中烧写的都是bin文件,以STM32为例,其片内Nor FLASH的起始地址也是代码的加载(烧写)地址为0x08000000。上电复位或者手动复位之后,程序计数器PC指向单片机的复位异常的中断向量地址0x08000004的位置,单片机从复位开始运行。

3. hex文件

        hex全称baiIntel HEX,是可以烧写到单片机中,被单片机执行的一种文件格式。通常用于传输将被存于ROM或者EPROM中的程序和数据。是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。大多数EPROM编程器或模拟器使用Intel HEX文件,其记录由对应机器语言码和/或常量数据的十六进制编码数字组成

4. elf文件

    elf是Linux的主要可执行文件格式,二进制文件。 elf文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。

注意: CPU执行elf程序则需要一个ELF Loader, gcc编译出来的是elf文件,objcpy将elf文件转换为bin文件

        ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。
        ELF文件相当于是对bin文件的一个包装和解释,不仅仅包含程序的机器码,还包含加载地址、运行地址和调试信息等,使得运行操作系统(带MMU的CPU运行的具有虚拟地址/内存映像功能的OS,如Linux、Windows)的机器中的ELF Loader模块能够根据elf头信息创建一个新进程并加载elf文件中的机器码到该进程的虚拟内存中去。例如在Linux系统上运行ls命令,Linux系统会在环境变量中定义了的文件夹中找到可执行文件“ls”,然后系统创建一个新的进程以及映射虚拟内存空间,然后ELF Loader会将可执行文件“ls”加载到虚拟内存空间中去并开始执行开进程。(注意,虚拟地址空间也物理地址空间的寻址空间是一样的,32位CPU的有4G的寻址空间,64位的有好多G的寻址空间,但是并不是所有虚拟地址空间中的地址都能访问,MMU只会映射一部分虚拟地址空间到物理地址空间,如果访问没有映射的虚拟地址空间,就会出现内存访问错误Segmentation Fault)

所以ELF文件的体积比对应的BIN文件要大。
因为elf文件中包含了bin文件内容外的其它信息。

你可能感兴趣的:(嵌入式,单片机)