您的位置: 首页 > 生活常识 >

bin文件用什么打开(LiteOS中生成的Bin、HEX、ELF三种文件格式)

100次浏览     发布时间:2024-08-02 13:30:52    


我们在使用编译器在编译工程后会要求生成可执行文件,将这些文件烧录到MCU进行运行,达到我们测试和使用程序的目的,再使用工具链进行编译的时候往往生成.bin、.hex 、.elf 、.alf等文件,这些文件有什么区别呢?可以互相转换吗?LiteOS 有哪些可执行文件呢?本文意义进行阐述。

BIN

bin文件,是基本的二进制文件,是flash中IO保存的基本信息,是有汇编程序直接汇编得到的二进制代码,bin文件采用顺序记录flash中的信息,文本本身包含任任何地址信息,bin文件烧录就是指定flash开始地址后逐个拷贝即可。利用STM32CubeProm将LiteOS编译后生成的bin文件显示如下图,我们需要设定flash写入地址才能进行烧录。

HEX

hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex;最常用的Hex格式是Intel HEX文件格式,即遵循Intel HEX文件格式的ASCII文本文件,文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器和FLASH能使用Intel HEX文件。

上面的Huawei_LiteOS.bin对应的HEX文件如下(用notepad++打开)

:020000040800F2:2000000000000820F50E0008650F0008650F0008650F0008650F0008650F00080000000041:20002000000000000000000000000000650F0008650F000800000000650F0008650F0008D0...........................................................................................................................................................................................................................:208E0000D883050828830508D4820508148505081C8505082485050868CC03082C850508C8:0C8E20003485050804CD030804CD0308C8:00000001FF

文件会有头尾部的的说明。

文件头不的信息

:020000040800F2

02带边数据长度;紧跟着后面的0x00 0x00 为地址;再后面的0x04为数据类型,类型共分以下几类:

'00' //数据记录

'01' //文件结束记录

'02' //扩展段地址记录

'03' //开始段地址记录

'04' //扩展线性地址记录

'05' //开始线性地址记录

接着0x04后面的两个 0x08 0x00就是数据,表示偏移地址,最后一个0xF2是校验码。

第二行开始的记录地址和所对应的数据其格式是

:开始代码|地址|数据类型|数据|校验

:20|0000|00|00000820F50E0008650F0008650F0008650F0008650F0008650F000800000000|41

:20 记录数据长度为20个字节;

0000 数据在内中的起始地址

00 记录类型00(是一个数据记录)


00000820F50E0008650F0008650F0008650F0008650F0008650F000800000000 数据内容

41 这一行的校验

最后一行的内容表示文件结束记录

:00000001FF

hex文件同一样可以在STM32CubeProm打印出内存的内容(与之前的bin打印是一致的)。

ELF

在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。

elf(Executable and Linkable Format)可执行与可链接格式,是有别于hex和bin通过记录数据的格式,elf更多而记录程序的连接转储的格式文件,elf目标文件是由汇编器(assembler)和连接编辑器(link editor)生成的,内容是二进制,而非可读的文本形式,是可以直接在处理器上运行的代码。

简单的理解,elf文件将二进制(bin)文件和程序描述文件打包后的一种执行文件,下载到程序里的依然是bin文件的部分,但是仿真器可以依靠其余程序表述文件来获取程序执行的位置和二进制的对应。表意文件可以利用readelf在linux下读取,因为我系统的原因就不赘述了。

其他可执行文件:

.asf、.o、.out这些文件都是编译后的可执行文件,和elf以宣扬都是具有连接格式进行描述,可以利用仿真器进行仿真使用,只是编译格式和编译器设置的不同可以选择不同的文件格式。

可转换性

因为bin、hex都是只是记录数据的,但elf类型不仅记录数据还有程序描述,所以,elf可以转成bin和hex使用,但是反转。

对比一下,发现bin文件最小最简单,但是安全性差,功能性差,hex包含头尾和检验,就有很好的安全性,但是文件比bin大,功能没有elf强大;elf功能多,但是文件最大。

LIteOS如何生成这些文件的

liteOS通过makefile进行文件编译,也是通过makefile进行设置gcc编译文件的输出格式,在工程目录下的makefile代码中:

$(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@.elf --start-group $(LITEOS_BASELIB) --end-group	$(OBJCOPY) -O binary $(OUT)/$@.elf $(OUT)/$@.bin	$(OBJDUMP) -t $(OUT)/$@.elf |sort >$(OUT)/$@.sym.sorted	$(OBJDUMP) -d $(OUT)/$@.elf >$(OUT)/$@.asm	$(SIZE) $(OUT)/$@.elf

代码中的解释后的代码

arm-none-eabi-gcc  -o xx.elfarm-none-eabi-objcopy -O ihex xx.elf xx.hexarm-none-eabi-objcopy -O binary xx.elf xx.binout --format ihex write xx.hex

通过gcc编译的命令将结果生成为xx.elf的格式,在通过elf生成bin和hex的目标文件。

结论

在使用工程编译结果是,最好有bin或者hex同时具有elf文件,elf用于仿真和调试,但输出的到工厂的文件可以使用hex和bin。

相关文章

怎么处理丈夫有外遇(对付出轨男人的3个必杀技)

“你这是什么意思?”李华站在客厅中央,手指颤抖地指着桌上的离婚协议书,声音里满是不敢置信和愤怒。 张梅坐在沙发上,神色平静,仿佛早已预料到这一刻的到来。她淡淡地回答:“就是字面上的意思,我们的婚姻已经走到尽头了。” 李华的脸色由红转青,他无法接受这个事实,更无法接受张梅如此冷静的态度。他以为,只要自
2025-08-11 00:09:09

怎样与大男子主义的老公相处?(婚姻里“大男子主义”的丈夫该如何相处和维护亲密关系)

几天前,一个学生小青和我抱怨她的老公;“啊,老师,你不知道我丈夫在家里有多霸道,所有的家务活都没动过,还经常让我做这做那。最让我生气的是,他在外人面前也是这样,真让我气愤!一次,他们单位的几个同事邀请我们一家人一起烧烤,我带着女儿一起去。我丈夫让我帮他倒水,让我看看孩子们玩得怎么样,让我把这个和那个
2025-08-10 08:51:39

谈恋爱怎么做到不累(谈恋爱感觉很累的三大原因以及解决方案)

在恋爱中,有时候会觉得谈恋爱很累、很麻烦。甚至在某一个时间段,会觉得恋爱的甜蜜感很少,恋爱中的麻烦却占了很大比重,谈起来感觉非常累。其实,在恋爱中,拼的绝对不是时间和精力,而是爱情情商。如果谈恋爱会觉得累,多半是自己情商出了问题。以下是谈恋爱感觉很累的三大原因以及解决方案。爱情情商一、自己本身就是疲
2025-08-10 07:15:44

怎么处理好感情问题(如何处理感情危机,抓牢爱人的心?)

如何处理感情危机,抓牢爱人的心?你只需用一招! 在一个宁静的小镇上,李萍和她的丈夫张伟过着简单而幸福的生活。两人结婚已经十年,一直相濡以沫,是镇上有名的模范夫妻。然而,随着时间的推移,生活的琐碎和压力开始侵蚀他们曾经坚不可摧的感情。 李萍是个温柔贤惠的女人,她把所有的心思都放在了家庭上,而张伟则是个
2025-08-09 21:51:42

怎么做才会让男人忘不掉你(做到这三件事)

在爱情中,“得到”比“珍惜”容易。我们大多数人都经历过真爱,我们心中有那么一个人让你时时刻刻在想念。你宁愿委屈自己,让他开心。他漫不经心说的话,都能够被你记住。只要他的幸福是因为你,你想在你的能力范围内都要满足它。甜蜜热恋的每一天,都能够让你们用过的承诺过一生。你觉得你愿意为他付所有,来生,下下辈子
2025-08-09 13:47:39

转让和转租有什么区别店铺(关于房屋转租和租赁权转让的认定和处理)

关于房屋转租和租赁权转让的认定和处理  房屋转租与承租权转让,是房屋租赁关系变动和流转的两种典型方式,特别是随着商铺、写字楼等非居住用房投资的增加,其在实务操作中的应用也日趋普遍,但两者无论是在法律性质上、还是在实务操作中,都存在很大的差异。我国合同法对租赁权合同关系作了专章规定,但对租赁权的转让未
2025-06-07 01:09:50