2011-05-11 80 views
39

當你構建一個gcc工具鏈時,有可能將它構建爲arm-elf或arm-none-eabi,但有什麼區別?arm gcc toolchain作爲arm-elf還是arm-none-eabi,有什麼區別?

我今天使用了eabi,但那是因爲其他人似乎都這麼做......但是由於這是一個非常糟糕的論點,所以理解它們之間的區別是非常好的。

注意:此工具鏈將針對基於Cortex-M3的mcu:s交叉編譯代碼,如stm32。

感謝


一些鏈接

EABI:

ELF:

+0

對於嵌入較少的應用,請看[debian](http://wiki.debian.org/ArmHardFloatPort)。 – 2012-03-13 20:10:50

+0

http://stackoverflow.com/a/13798214/1163019 – auselen 2014-03-16 07:31:22

回答

30

每個體系結構或體系結構/ OS夫婦具有ABI。 ABI(應用程序二進制接口)描述應如何調用函數,系統調用號,傳遞的參數,可以使用哪些寄存器...

abi描述了編譯器應該如何生成彙編程序。

如果只使用匯編器,則不需要關心ABI。

arm-elf和arm-none-eabi只是使用Arm ABI的兩個版本。 eabi工具鏈使用更新的版本,但也可以稱爲arm-elf-eabi,因爲它也會生成精靈。

4

ARM EABI是由ARM創建的標準,允許不同的工具鏈創建兼容的對象。例如,一個工具鏈可以鏈接另一個工具鏈創建的對象。

27

據我所知:

臂精靈工具鏈生成的obj代碼一些OS支持執行elf格式(例如在linux ABI)。 OS將控制你的程序的執行。工具鏈爲微控制器或微處理器(裸機,這將是EABI嵌入的ABI)生成obj代碼。該代碼被下載到MC的清除閃存,並且MC的核心在開機後開始執行它。沒有操作系統,擴展的命令集,不可能與共享模塊鏈接。

23

這裏是一個極好的DOC:https://community.freescale.com/thread/313490

工具鏈具有一個鬆散的名稱約定等拱[-vendor] [-OS] - EABI

arch - refers to target architecture (which in our case is ARM) 
    vendor - refers to toolchain supplier 
    os -  refers to the target operating system 
    eabi - refers to Embedded Application Binary Interface 

一些插圖如下:

arm-none-eabi - 此工具鏈針對ARM架構,沒有供應商,不針對操作系統並符合ARM EABI。

arm-none-linux-gnueabi - 此工具鏈針對ARM架構,沒有供應商,創建在Linux操作系統上運行的二進制文件,並使用GNU EABI。它用於針對基於ARM的Linux系統。

相關問題