聊聊LiteOS生成的Bin、HEX、ELF三種文件格式

      網友投稿 1306 2022-05-30

      我們在使用編譯器在編譯工程后會要求生成可執行文件,將這些文件燒錄到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下讀取,因為我系統的原因就不贅述了。

      其他可執行文件:

      聊聊LiteOS中生成的Bin、HEX、ELF三種文件格式

      .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.elf arm-none-eabi-objcopy -O ihex xx.elf xx.hex arm-none-eabi-objcopy -O binary xx.elf xx.bin out --format ihex write xx.hex

      通過gcc編譯的命令將結果生成為xx.elf的格式,在通過elf生成bin和hex的目標文件。

      結論

      Makefile 輕量級操作系統 LiteOS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:DevOps組織I&O專業人員新角色分析與技能提升
      下一篇:厲害了!3197項政府服務上云,這座城市生活幸福感,很真實!
      相關文章
      亚洲色成人四虎在线观看| 亚洲另类图片另类电影| 亚洲一级特黄特黄的大片| 亚洲欧洲日产国产综合网| 亚洲av无码乱码国产精品fc2 | 亚洲精品无码午夜福利中文字幕| 亚洲一级特黄大片在线观看 | 亚洲国产精品高清久久久| 亚洲色欲一区二区三区在线观看| 亚洲男人第一无码aⅴ网站 | 亚洲国产精品专区在线观看| 亚洲AV无码之日韩精品| 亚洲国产人成中文幕一级二级| 亚洲а∨天堂久久精品| 亚洲午夜精品第一区二区8050| 亚洲国产综合无码一区二区二三区 | 亚洲AV综合色区无码一区| 国产亚洲精品国产| 亚洲国产精品无码久久一线| 亚洲av永久无码精品网站| 久久亚洲精品无码| 亚洲网站在线观看| 亚洲成人黄色网址| 亚洲AV无码专区在线亚| 亚洲综合在线一区二区三区 | 亚洲精品久久无码| 小说区亚洲自拍另类| 亚洲国产精品日韩| 亚洲色精品aⅴ一区区三区| 亚洲国产另类久久久精品黑人| 亚洲国产精品福利片在线观看| 亚洲国产国产综合一区首页| 亚洲视频中文字幕在线| 亚洲a级在线观看| 亚洲国产欧美国产综合一区| 婷婷亚洲天堂影院| 亚洲伊人色欲综合网| 日韩亚洲Av人人夜夜澡人人爽| 亚洲同性男gay网站在线观看| 亚洲中文字幕久久无码| 国产精品亚洲综合一区在线观看|