arm交叉編譯工具詳解

2021-08-14 22:49:25 字數 2385 閱讀 2151

保險起見,原文內容如下:

命名規則例項

codesourcery

abi 和 eabi

arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc

交叉編譯工具鏈的命名規則為:arch [-vendor] [-os] [-(gnu)eabi]

根據對作業系統的支援與否,arm gcc可分為支援和不支援作業系統,如

(arm architecture,no vendor,not target an operating system,complies with the arm eabi)

(arm architecture, no vendor, creates binaries that run on thelinuxoperating system, and uses the gnu eabi)

主要用於基於arm架構的linux系統,可用於編譯 arm 架構的 u-boot、linux核心、linux應用等。arm-none-linux-gnueabi基於gcc,使用glibc庫,經過 codesourcery 公司優化過推出的編譯器。arm-none-linux-gnueabi-*** 交叉編譯工具的浮點運算非常優秀。一般arm9、arm11、cortex-a 核心,帶有 linux 作業系統的會用到。

android arm 編譯器。

arm 公司推出的編譯工具,功能和 arm-none-eabi 類似,可以編譯裸機程式(u-boot、kernel),但是不能編譯 linux 應用程式。armcc一般和arm開發工具一起,keil mdk、ads、rvds和ds-5中的編譯器都是armcc,所以 armcc 編譯器都是收費的(愛國版除外,呵呵~~)。

arm-none-uclinuxeabi 用於uclinux,使用glibc。

arm-none-symbianelf 用於symbian,沒用過,不知道c庫是什麼 。

eabi:嵌入式abi。嵌入式應用二進位制介面指定了檔案格式、資料型別、暫存器使用、堆積組織優化和在乙個嵌入式軟體中的引數的標準約定。開發者使用自己的組合語言也可以使用 eabi 作為與相容的編譯器生成的組合語言的介面。

兩者主要區別是,abi是計算機上的,eabi是嵌入式平台上(如arm,mips等)。

兩個交叉編譯器分別適用於 armel 和 armhf 兩個不同的架構,armel 和 armhf 這兩種架構在對待浮點運算採取了不同的策略(有 fpu 的 arm 才能支援這兩種浮點運算策略)。

其實這兩個交叉編譯器只不過是 gcc 的選項 -mfloat-abi 的預設值不同。gcc 的選項 -mfloat-abi 有三種值soft、softfp、hard(其中後兩者都要求 arm 裡有 fpu 浮點運算單元,soft 與後兩者是相容的,但 softfp 和 hard 兩種模式互不相容):

soft:不用fpu進行浮點計算,即使有fpu浮點運算單元也不用,而是使用軟體模式。

softfp:armel架構(對應的編譯器為 arm-linux-gnueabi-gcc )採用的預設值,用fpu計算,但是傳引數用普通暫存器傳,這樣中斷的時候,只需要儲存普通暫存器,中斷負荷小,但是引數需要轉換成浮點的再計算。

hard:armhf架構(對應的編譯器 arm-linux-gnueabihf-gcc )採用的預設值,用fpu計算,傳引數也用fpu中的浮點暫存器傳,省去了轉換,效能最好,但是中斷負荷高。

把以下測試使用的c檔案內容儲存成 mfloat.c:

#include

int main(void)

1、使用 arm-linux-gnueabihf-gcc 編譯,使用「-v」選項以獲取更詳細的資訊:

# arm-linux-gnueabihf-gcc -v mfloat.c

collect_gcc_options=』-v』 『-march=armv7-a』 『-mfloat-abi=hard』 『-mfpu=vfpv3-d16′ 『-mthumb』

-mfloat-abi=hard

可看出使用hard硬體浮點模式。

2、使用 arm-linux-gnueabi-gcc 編譯:

# arm-linux-gnueabi-gcc -v mfloat.c

collect_gcc_options=』-v』 『-march=armv7-a』 『-mfloat-abi=softfp』 『-mfpu=vfpv3-d16′ 『-mthumb』

-mfloat-abi=softfp

可看出使用softfp模式。

arm交叉編譯工具搭建

操作平台 rel5.1 交叉編譯工具版本 arm linux gcc 4.3.2 1 進入root使用者命令列模式,執行su root 3 進入工具鏈放置的目錄下,cd mnt hgfs linux 解壓工具鏈 tar xzvf arm linux gcc 4.3.2.tgz c 注 c 選項作用是...

ARM的交叉編譯工具

arm官方提供了各種環境下的交叉編譯工具 要注意的是分為 cortex a family 和cortex r and cortex m families 兩套工具鏈,分別對應arm不同架構的處理器。我用到的是嵌入式的arm核 目前最新的是2019年q4的版本 頁面中提供了windows linux ...

JRTPLIB庫arm交叉編譯詳解

系統平台 ubuntu 16.04 開發板 gec6818 arm jrtplib庫 libjrtp.so.3.11.1.tar.gz jthread版本 libjthread.so.1.3.3.tar.gz 本交叉編譯是將rtp接收端放在arm開發板上執行,rtp傳送端在ubuntu系統上執行。由...