嵌入式系统可执行文件格式
在一个完好的硬件设备中,必须要有相应的程序才能使整个系统运行起来,我们一般所说的程序,实际上就是存储在硬件设备中的一些可执行代码。
在嵌入式操作系统中,执行代码主要包括以下几部分:
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