命名規則
交叉編譯工具鏈的命名規則為:arch [-vendor] [-os] [-(gnu)eabi]
- arch - 體系架構,如ARM,MIPS
- verdor - 工具鏈提供商
- os - 目標操作系統
- eabi - 嵌入式應用二進制接口(Embedded Application Binary Interface (ABI) )
具體編譯器
-
arm-none-eabi-gcc
ARM architecture,no vendor,not target an operating system,complies with the ARM EABI(ARM 程序接口)
用於編譯 ARM 架構的裸機系統(包括 ARM Linux 的 boot、kernel)他使用的是
newlib 這個專用於嵌入式系統的C庫,安裝方法:sudo apt-get install gcc-arm-none-eabi
-
arm-linux-gnueabi-gcc
ARM architecture, creates binaries that run on the Linux operating system, and uses the GNU EABI (GUN 程序接口)
也叫
arm-none-linux-gnueabi-gcc
,因為一開始是沒有發行商的,目前由Linaro 公司發行(Linaro 則是由ARM、飛思卡爾、IBM、Samsung、ST-Ericsson和TI等廠商聯合,為開發不同半導體公司系統單芯片(SoC)平台的共通軟件的一個非盈利公司),使用glibc,可用於交叉編譯ARM系統中所有環節的代碼,包括裸機程序、u-boot、Linux kernel、filesystem和App應用程序,安裝方法:sudo apt-get install gcc-arm-linux-gnueabi
-
arm-linux-gnueabihf-gcc
和
arm-linux-gnueabi-gcc
區別不過是 gcc 的選項-mfloat-abi
的默認值不同,即浮點數處理上的不同-mfloat-abi 有三種值:
- soft: 不用fpu進行浮點計算,即使有fpu浮點運算單元也不用,而是使用軟件模式
- softfp: armel架構(對應的編譯器為 arm-linux-gnueabi-gcc )采用的默認值,用fpu計算,但是傳參數用普通寄存器傳,這樣中斷的時候,只需要保存普通寄存器,中斷負荷小,但是參數需要轉換成浮點的再計算。
- hard: armhf架構(對應的編譯器 arm-linux-gnueabihf-gcc )采用的默認值,用fpu計算,傳參數也用fpu中的浮點寄存器傳,省去了轉換,性能最好,但是中斷負荷高。
-
arm-eabi-gcc
Android ARM 編譯器 -
armcc
ARM 公司推出的編譯工具,功能和arm-none-eabi-gcc
類似,可以編譯裸機程序(u-boot、kernel),但是不能編譯 Linux 應用程序 -
arm-none-uclinuxeabi-gcc
arm-none-uclinuxeabi 用於uCLinux,使用Glibc -
arm-none-symbianelf-gcc
用於symbian。