嵌入式系统可执行文件格式

                                                         嵌入式系统可执行文件格式

     在一个完好的硬件设备中,必须要有相应的程序才能使整个系统运行起来,我们一般所说的程序,实际上就是存储在硬件设备中的一些可执行代码。 在嵌入式操作系统中,执行代码主要包括以下几部分: 1、 嵌入式操作系统 2、 系统软件 3、 应用软件 通用计算机系统的应用软件与操作系统可以分离的,也就说:我们可以单独采购应用软件与操作系统软件,也可以根据不同的需要,在同一操作系统上安装不同的应用软件以实现不同的功能。在嵌入式系统中,其执行代码大多数时候是与硬件紧密联系在一起的,特定的功能使用不同的操作系统与不同的系统软件与应用软件,在其产品化以后,一般不能在做改变。而且所有这些可执行代码一般都比较小,统一存储于嵌入式存储设备中,最常用的就是FLASH。 由于不同的开发环境与不同的硬件架构,存储于嵌入式存储设备中的可执行文件格式也不尽相同,但它们基本上包含以下一些典型的特征: 可执行文件的一般信息,如:文件大小、创建时间,文件名,文件权限等。 与硬件处理器架构相关的二进制代码和数据。 符号表与符号重定位表。 调试器需要的调试信息与一些下载时需要的一些信息。不同的嵌入式环境中,其组织可执行文件的格式也不相同,主要有以下几种: ELF文件格式 S-record文件格式 HEX文件格式 bin文件格式 1、ELF文件格式(Executable and linking format) Executable and linking format(ELF)文件是Linux系统 下的一种常用、可移植目标文件(object file)格式,它有三种主要类型: 可重定位文件(Relocatable File):包含适合于与其他目标文件链接来创建可执行文件或者共享目标文件的代码和数据。 可执行文件(Executable File):包含适合于执行的一个程序,此文件规定了exec() 如何创建一个程序的进程映像。 共享目标文件(Shared Object File):包含可在两种上下文中链接的代码和数据。首先链接编辑器可以将它和其它可重定位文件和共享目标文件一起处理,生成另外一个目标文件。其次,动态链接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一起组合,创建进程映像。详细信息可以阅读[参考2]。 2、S-record文件格式 S-Record文件遵循Motorola制定的格式规范,是一种标准的、可打印格式的文件。S-Record文件是通过对链接器生成的目标程序或数据进行编码生成的,适用于在计算机平台间传送,也可以在编辑后用于交叉平台间的传送。S-Record文件编码简单,可以通过IDE下载,但无法在线实时调试。S-Record文件是由多条记录组成的,每条记录都是由5个字段组成的ASCII字符串,格式如下图所示。 l 记录类型:由两个字符组成,描述了该条记录的可能类型(S0, S1, S2, S3, S5, S7, S8, or S9)。 l 数据长度:是对应于2 byte十六进制数的一对字符,表示该条记录后续字符对的个数; l 地址:由4,6或者8个字符组成,也是由十六进制值翻译得到的字符,给出数据字段将存放在存储器中的地址; l 数据:由每2 byte十六进制值翻译得到的成对的字符,大小为0-64,这些十六进制数值可能是存放在存储器中的数据,或者是描述信息; l 校验和:它们所对应的十六进制数值是根据除记录类型之外的其他字段字符成对累加之和求反所得; l 换行符:每条记录都由换行符终止。针对不同的目标器件,可能每条记录的结束符不尽相同,设计中用传输程序来提供一致的换行符。 所有的S-Record文件都是以类型为S0的记录作为首条记录,这条记录在数据字段中给出文件的信息,包括路径、版本号等,这些信息是供阅读的,将不被存放到存储器中。S-Record文件的中间记录可能是类型为S1、S2或S3的记录,其地址字段分别对应2、3、4 byte地址,因而主要区别在于寻址空间的不同。S-Record文件以S7、S8或S9类型的记录作为末条记录,除了地址字段长度不同外,它们都给出了程序执行的起始地址,并都不含数据字段。详细的信息可以阅读[参考1] 3、bin文件格式 bin文件就是直接的二进制文件,内部没有地址标记。一般用编程器烧写时,从00开始,而如果下载运行,则下载到编译时的地址即可。 4、HEX文件格式 Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用于将程序或数据传输 存储到ROM、EPROM。大多数编程器和模拟器使用Intel HEX文件。 一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式, :LLaaaatt[dd...]cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述: :冒号:它是每一条Intel HEX记录的开始。 LL是这条记录的长度域,他表示数据(dd)的字节数目。 aaaa是地址域:他表示数据的起始地址。 如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM/FLASH中的偏移地址,对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址。 tt这个域表示这条HEX记录的类型,他有可能是下面这几种类型: 00:数据记录 01:文件结束记录 02:扩展段地址记录 04:扩展线性地址记录 dd是数据域:表示一个字节的数据。一个记录可能有多个数据字节,字节数目可以查看LL域的说明。 cc是效验和域:表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对(不包括本效验字和冒号)所表示的十六进制数字都加起来,然后模除256得到的余数,最后求出余数的补码即是本效验字节cc。 Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束,(回车为0x0d换行为0x0a)。 扩展线性地址记录(HEX386) : 扩展线性地址记录也可称为32位地址记录和HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据。当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效, 直到读到下一个扩展线性记录。 文件结束记录(EOF) : 一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,一个EOF记录总是这样: :00000001FF,其中:00是记录中数据字节的数目,0000这个地址对于EOF记录来说无任何意义,01记录类型是01(文件结束记录标示),FF是效验和。计算如下01h + NOT(00h + 00h + 00h + 01h)。 5、 可执行文件格式的差别: a) HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身,在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。 b) BIN文件格式 对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。 c) HEX文件格式 HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录类型包括:记录数据域,文件结束域,扩展线性地址的记录,扩展段地址的记录。在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。 d) AXF是Arm特有的文件格式,它除了包含bin文件外,还额外包括了许多其他调试信息。在下载到目标板的时候,烧入ROM还是bin文件,额外的调试信息会被去掉 一般来说,可以由elf文件转化为其它两种文件,hex也可以直接转换为bin文件,但是bin要转化为hex文件必须要给定一个基地址。而hex和bin不能转化为elf文件,因为elf的信息量要大。另外还有一种ads的调试文件axf,它可以用以下命令fromelf -nodebug xx.axf -bin xx.bin转化为bin文件。 参考: 1、 http://www.amelek.gda.pl/avr/uisp/srecord.htm 2、 Tool Interface Standard (TIS)-Executable and Linking Format (ELF) Specification version 1.2 本文来自CSDN博客,转载请标明出处:file:///E:/网页资料/嵌入式系统可执行文件格式%20-%20gogofly的专栏%20-%20CSDN博客.mht

时间: 2024-11-18 07:25:59

嵌入式系统可执行文件格式的相关文章

《嵌入式 Linux C 语言应用程序设计(修订版)》——1.5 嵌入式系统开发概述

1.5 嵌入式系统开发概述 嵌入式 Linux C 语言应用程序设计(修订版) 1.5.1 嵌入式系统开发流程 嵌入式系统的开发流程与通用系统的开发流程有较大的区别,其设计流程如图1.15所示. 下面对系统各个模块进行简要说明. 系统需求分析:根据需求,确定设计任务和设计目标,制定设计说明书. 体系结构设计:描述系统如何实现所述的功能需求,包括对硬件.软件和执行装置的功能划分以及系统的软件.硬件选型等. 硬件/软件协同设计:基于体系结构的设计结果,对系统的硬件.软件进行详细设计.一般情况下嵌入式

《嵌入式 Linux C 语言应用程序设计(修订版)》一1.5 嵌入式系统开发概述

1.5 嵌入式系统开发概述 嵌入式 Linux C 语言应用程序设计(修订版) 1.5.1 嵌入式系统开发流程 嵌入式系统的开发流程与通用系统的开发流程有较大的区别,其设计流程如图1.15所示. 图1.15 嵌入式系统的开发流程 下面对系统各个模块进行简要说明. 系统需求分析:根据需求,确定设计任务和设计目标,制定设计说明书. 体系结构设计:描述系统如何实现所述的功能需求,包括对硬件.软件和执行装置的功能划分以及系统的软件.硬件选型等. 硬件/软件协同设计:基于体系结构的设计结果,对系统的硬件.

Linux/Unix平台可执行文件格式分析

简介:本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out( assembler and link editor output 汇编器和链接编辑器的输出).COFF (Common Object File Format 通用对象文件格式).ELF(Executable and Linking Format 可执行和链接格式).首先是对可执行文件格式的一个综述, 并通过描述 ELF 文件加载过程以揭示可执行文件内容与加载运行操作之间的关 系.随后依此讨论了此三种文件格式,并

《谈学单片机有前途还是嵌入式系统有前途》一文吴坚鸿回复整理

六月初吴坚鸿发表了<吴坚鸿谈学单片机有前途还是嵌入式系统有前途>一文,后被andy1989转发至博客中,在发烧友中引起了很大的反响.对于论坛上很多发烧友的评论,吴坚鸿一一作了答复,吴先生对于每个发烧友的评论都很认真的回复了,因此小编整理出来,供更多的发烧友们学习!稍稍啰嗦一下,吴坚鸿的回复可以解决很多单片机学者的疑问,如果有耐心看完的话,对大家会有极大的帮助的!     谢谢版主的关注,没想到有那么多朋友关注,让我的虚荣心一下子得到极大的满足.我决心对每个贴都回复.无论有多忙,每天坚持抽一点时

UNIX/LINUX 平台可执行文件格式分析

可执行文件格式综述 相 对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者.可执行文件的大小.运行速度.资源占用情况以及可 扩展性.可移植性等与文件格式的定义和文件加载过程紧密相关.研究可执行文件的格式对编写高性能程序和一些黑客技术的运用都是非常有意义的. 不 管何种可执行文件格式,一些基本的要素是必须的,显而易见的,文件中应包含代码和数据.因为文件可能引用外部文件定义的符号(变量和函数),因此重定位信 息和符号信息也是需要的.一些辅助信息是可选的,

嵌入式系统-概述+ARM指令

嵌入式系统-概述+ARM指令 嵌入式系统是以应用为中心,以计算机技术为基础,采用可裁剪软硬件,适用于对功能.可靠性.成本.体积.功耗等有严格要求的专用计算机系统.它一般由嵌入式微处理器.外围硬件设备.嵌入式操作系统及用户应用程序四部分组成. 简单说,网吧里的电脑是通用计算机,而mp3.豆浆机等内含的都有嵌入式系统.嵌入式系统的特点是功耗低.体积小.成本低. ARM微处理器是主流的嵌入式处理器. 嵌入式操作系统有:Windows CE.Android.VxWorks等. ARM的全称是 Advan

《嵌入式 Linux C 语言应用程序设计(修订版)》——1.4 嵌入式系统硬件平台选型

1.4 嵌入式系统硬件平台选型 正如前文中所述,嵌入式系统由硬件和软件两大部分组成.嵌入式系统的硬件核心部件是各种类型的嵌入式微处理器:嵌入式系统的软件一般由嵌入式操作系统和应用软件组成,而嵌入式系统的功能软件则集成于硬件系统之中,系统的应用软件与硬件一体化. 因此,在嵌入式系统中,处理器的选择是最为重要的,通常它将限制操作系统的选择.本节将着重介绍嵌入式硬件平台以及ARM处理器系列的选型原则及方法. 1.4.1 硬件平台的选择 本书在1.2.1节介绍了嵌入式处理器的不同种类以及它们各自的特点,

Linux操作系统的可执行文件格式详细解析

导读:? 可执行文件可以是具有不同格式的二进制文件,也可以是一个文本的脚本.可执行文件映像中包含了进程执行的代码和数据,同时也包含了操作系统用来将映像正确装入内存并执行的信息.在Linux中,当前的"本地"(系统默认的)可执行文件格式是ELF[15] (Executable and Linking Format)可执行链接格式.由于先前的a.out格式难于实现共享库,不能适用于动态链接,所以目前已经全部被ELF所替换.不过,Linux仍然为 a.out保留了一个二进制处理程序,但通常是

《stm32嵌入式系统开发实战指南》一1.2 Cortex内核系列处理器技术特点

1.2 Cortex内核系列处理器技术特点 1.2.1 ARM Cortex-M系列处理器 ARM Cortex-M3是一种基于ARMv7体系结构的最新ARM嵌入式内核,它采用哈佛结构,使用分离的指令和数据总线(与冯?诺依曼结构的数据和指令共用一条总线相比,双总线架构使吞吐量得到有效提升).除了使用哈佛结构,Cortex-M3 还具有其他显著的优点:具有更小的基础内核.价格更低.速度更快.与内核集成在一起的是一些系统外设,如中断控制器.总线矩阵.调试功能模块,而这些外设通常都是由芯片制造商增加的