hex、bin、elf、axf文件区别
AXF和ELF
axf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息,这些调试信息加在可执行的二进制数据的前面。在调试的时候,这些调试信息是不必下到RAM中去的,真正下到RAM中的信息仅仅是可执行代码。所以如果ram的大小小于axf文件的大小,程序是完全有可能可以在ram中调试的,只要axf除去调试信息后的大小小于ram的大小就行了。
调试信息包含以下内容:
1、可以将源代码包括注释夹在反汇编代码中,并且我们可以随时切换到源代码中调试,
2、我们还可以对程序中的函数调用情况进行跟踪(用Watch & Call Stack Window查看)。
3、对变量进行跟踪(用Watch & Call Stack Window查看)。
如何减少调试信息
如果希望带调试信息,那么在目标文件和库中减少调试信息是非常有益的,减少调试信息可以减少目标文件和库的大小、加快了链接速度、减小最终镜象的代码。以下几种方法可用来减少每个源文件产生的调试信息:
1.避免在头文件中条件使用#define,链接器不能移除共用的调试部分,除非这些部分是完全一样的;
2.更改C/C++源文件,以使#included包含的所有头文件有相同的顺序;
3.将头文件信息分成几个小块,也就是,尽量使用数量较多的小头文件而不使用较大的单一头文件,这有利于链接器能获取更多的通用块;
4.在程序中只包含那些必须要用到的头文件;
5.避免重复包含头文件,可使用编译器选项--remarks来产生警告信息;
6.使用编译命令行选项--no_debug_macros以从调试表中丢弃预处理宏定义。
Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下输入./test就可以执行。在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。
axf elf 和bin
区别
(1)axf和elf都是编译器生成的可执行文件。区别是:ADS编译出来的是AXF文件。gcc编译出来的是ELF文件。两者虽然很像,但还是有差别的。这是文件格式的差别,不涉及调试格式。
(2)axf/elf是带格式的映象,bin是直接的内存映象的表示。
axf/elf文件里面包含了符号表,汇编等。BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行。
在ADS下,axf文件可以直接用axd进行调试运行。
Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下输入./test就可以执行。
bin文件是经过压缩的可执行文件,去掉ELF格式的东西,仅仅保留最纯的汇编。在系统没有加载操作系统的时候可以执行。
在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。
=====================================
以下转载供参考:
嵌入式开发的时候,我们的编译一个*.S文件,并最终生成bin文件,编译命令大致如下:
CC=arm-softfloat-linux-gnu-gcc
LD=arm-softfloat-linux-gnu-ld
OBJCOPY=arm-softfloat-linux-gnu-objcopy
$(CC) -g $(CFLAG) -c boot.S #先将boot.S文件生成boot.o
$(LD) -g -Bstatic -T$(LDFILE) -Ttext 0x12345600 boot.o
--start-group -Map boot.map -o boot.elf #再将boot.o生成boot.elf, boot.elf通常就是可执行文件,类似于gcc -o test test.c 中的test文件,在Linux Shell下输入./test就可以执行。
$(OBJCOPY) -O binary boot.elf boot.bin #接着将boot.elf->boot.bin,这样可以缩小代码尺寸。
运行arm-softfloat-linux-gnu-objdump -h boot.elf 可以查看该文件的信息,但是如果变成
arm-softfloat-linux-gnu-objdump -h boot.bin会提示错误,为了看boot.bin文件信息,输入:
arm-softfloat-linux-gnu-objdump -h -b binary -m arm
boot.bin就可以了。哈哈我也是现学了一招,其中参数-h可以被替换成为-D, -S, -s等等,请用arm-softfloat-linux-gnu-objdump --help查看器中表示的意义。
说说ELF Bin 文件区别:
我们有了Linux OS,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了。
arm-softfloat-linux-gnu-objcopy命令将去掉ELF格式的东西,仅仅保留最纯的汇编(不知道如何解释),
在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用arm-softfloat-linux-gnu-objcopy生成纯粹的汇编,程序就可以一步一步运行。
hex、bin、elf、axf文件区别的更多相关文章
- bin、hex、elf、axf文件的区别
1.bin Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式".按照assembly code顺序翻译成binary machine code,内部没有地址标记.Bin是直 ...
- Hex、bin、axf、elf格式文件小结
转自Hex.bin.axf.elf格式文件小结 一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的 ...
- 关于bin和obj文件夹。debug 和release的区别(转)
关于bin和obj文件夹. 楼主hcaihao(影子男孩)2002-05-29 20:04:24 在 .NET技术 / C# 提问 VS.Net会生成bin和obj文件夹以及它们下面的Debug和Re ...
- keil MDK中如何生成*.bin格式的文件
在Realview MDK的集成开发环境中,默认情况下可以生成*.axf格式的调试文件和*.hex格式的可执行文件.虽然这两个格式的文件非常有利于ULINK2仿真器的下载和调试,但是ADS的用户更习惯 ...
- 在MDK中怎样生成*.bin格式的文件?
在Realview MDK的集成开发环境中.默认情况下能够生成*.axf格式的调试文件和*.hex格式的可运行文件. 尽管这两个格式的文件很有利于ULINK2仿真器的下载和调试,可是ADS的用户更习惯 ...
- axf 文件包含太多的调试信息,导致的编译错误
构建工程时,提示: build\my_test_prj.axf: Error: L6291E: Cannot assign Fixed Execution Region MCU_FLASH1 Load ...
- ELF格式文件分析以及运用
基于本文的一个实践<使用Python分析ELF文件优化Flash和Sram空间的案例>. 1.背景 ELF是Executable and Linkable Format缩写,其官方规范在& ...
- python中unicode, hex, bin之间的转换
python中unicode, hex, bin之间的转换 背景 在smb中有个feature change notify, 需要改动文件权限dacl,然后确认是否有收到notify.一直得不到这个d ...
- keil无法生成axf文件之解决方法
参考:参考<鱼鹰单片机>https://blog.csdn.net/weixin_42876465/article/details/88356890 其实很简单 默认情况是生成 .axf ...
随机推荐
- leetcode: sortlist之四种方法
原题链接:https://oj.leetcode.com/problems/sort-list/ 题目:空间复杂度为常数,时间复杂度为O(nlogn)的排序链表实现 方法一:第一想法是模拟数组的快速排 ...
- smarty 从配置文件读取变量
smarty变量分3种: Variables [变量] Variables assigned from PHP [从PHP分配的变量] Variables loaded from config fil ...
- scheme 解释器Guile 使用
GNU Guile是一种Scheme编程语言的解释器和虚拟机.Guile是GNU Ubiquitous Intelligent Language for Extensions的缩写.Guile是GNU ...
- using 1.7 requires using android build tools version 19 or later
这意思大概是adt用了1.7,abt(android build tools)就要用19或更高,可是abt在哪设置呢,原来是在sdk manager中 之前我已安装的最高的abt是17,然后~~~,F ...
- java开源资源
开到一遍不错的java开源整理,摘录一下,后续遇到好的继续更新. 构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置 ...
- SAE Python使用经验 好文推荐
SAE Python使用经验 好文推荐 SAE Python使用经验 好文推荐
- C# - List操作 - 按照字母排序
有Family的类如下: public class FamilyModel { public string Name { set; get; } } 创建List List<FamilyMode ...
- iOS 提示音播放
首先找到对应的素材 音频文件 写一个类继承 NSObject 命名为AudioUtil 导入支撑文件 #import <AVFoundation/AVFoundation.h> #impo ...
- java获取项目地址或tomcat绝对地址
在java项目中获取文件的路径,不管是相对路径还是绝对路径,其本质都是通过绝对路径去寻找. 获取项目地址 request.getSession().getServletContext().getRea ...
- Zedboard甲诊opencv图像处理(三)
整个工程进展到这一步也算是不容易吧,但技术含量也不怎么高,中间乱起八糟的错误太烦人了,不管怎么样,现在面临了最大的困难吧,图像处理算法.算法确实不好弄啊,虽然以前整过,但都不是针对图像的. 现在的图像 ...