1. 程式人生 > >[從0到1搭嵌入式工程]嵌入式編譯工具鏈命名規則&四大架構&openwrt簡介

[從0到1搭嵌入式工程]嵌入式編譯工具鏈命名規則&四大架構&openwrt簡介

對於韌體應用開發來說,編譯工具鏈都是sdk供應商提供的,不同的專案,就有了多種編譯鏈,不同的編譯鏈有什麼區別呢?

例如 arm-linux-gnueabihf-xx,mipsel-openwrt-linux-xx 。

交叉編譯工具鏈,從授權上,分為免費授權版和付費授權版。

免費版目前有三大主流工具商提供,第一是GNU(提供原始碼,自行編譯製作),第二是 Codesourcery,第三是Linora。

收費版有ARM原廠提供的armcc、IAR提供的編譯器等等。

所以各個sdk廠商提供的工具鏈,最終也都是由這三個廠商開發的。在有一些工具鏈的打包名字中,有時候出現linora,就是linora這個廠商提供的工具鏈。

arch [-vendor] [-os] [-(gnu)eabi]

arch – 體系架構,如ARM,MIPS,對於MIPS可能還分大端模式mips或者小端模式mipsel;

vendor – [可選]工具鏈提供商,可能有的工具鏈會省去這個欄位,一般可能是none、晶片提供商如histbv100或者是第三方提供商如buildroot(允許自行修改),但大都是軟連結,最終指向仍然是最基礎的工具鏈;

os – [可選]目標板中執行的系統,一般為linux,但對於一些專門用於裸板或者uboot的編譯工具這個欄位可能是bare-metal(裸板);

gnu – [可選]所使用的C庫,gnu代指使用glibC,這個欄位還可能是eglibc,uclibc;

再一個一個說,

CPU體系結構主要有四大系列, ARM、X86/Atom、MIPS、PowerPC。

裡面只有x86是複雜指令集,其他都是精簡指令集,X86是intel首先開發製造,我們用的PC。Atom是intel開發的精簡指令集架構。ARM、MIPS、PowerPC,三大嵌入式CPU架構,ARM又有多個系列, arch可能出現arm/aarch64(arm 64位處理器)等, mips是大端模式, mipsel是小端模式。

eabi – 相對於x86上面的abi,嵌入式應用二進位制介面(Embedded Application Binary Interface),如果沒有“eabi”欄位,說明用的是舊版本的oabi(Old Application Binary Interface)。

一般這個欄位還有eabihf這個選項, 兩者的區別見下文 。

[-(gnu)eabi]舉幾個例子:gnu 等價於:glibc+oabi , gnueabi 等價於:glibc+eabi, uclibc 等價於:uclibc+oabi。

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

兩個交叉編譯器分別適用於 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中的浮點暫存器傳,省去了轉換,效能最好,但是中斷負荷高。

例項

1、arm-none-eabi-gcc

(ARM architecture,no vendor,not target an operating system,complies with the ARM EABI)
用於編譯 ARM 架構的裸機系統(包括 ARM Linux 的 boot、kernel,不適用編譯 Linux 應用 Application),一般適合 ARM7、Cortex-M 和 Cortex-R 核心的晶片使用,所以不支援那些跟作業系統關係密切的函式,比如fork(2),他使用的是 newlib 這個專用於嵌入式系統的C庫。

2、arm-none-linux-gnueabi-gcc

(ARM architecture, no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI)

主要用於基於ARM架構的Linux系統,可用於編譯 ARM 架構的 u-boot、Linux核心、linux應用等。arm-none-linux-gnueabi基於GCC,使用Glibc庫,經過 Codesourcery 公司優化過推出的編譯器。arm-none-linux-gnueabi-xxx 交叉編譯工具的浮點運算非常優秀。一般ARM9、ARM11、Cortex-A 核心,帶有 Linux 作業系統的會用到。

3、arm-eabi-gcc

Android ARM 編譯器。

4、armcc

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

5、arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc

arm-none-uclinuxeabi 用於uCLinux,使用Glibc。

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

6、arm-linux-gnueabihf-gcc,mipsel-openwrt-linux-gcc, aarch64-gcc51_glibc222-linux-gnu-gcc

參考:http://www.cnblogs.com/wxishang1991/p/5322499.html

openWRT Linux系統簡介

OpenWrt是一個開源專案,是針對嵌入式裝置的Linux作業系統。多用於路由器、閘道器等裝置上。整個openwrt linux系統已經提供了很多應用和網路元件,使得韌體開發更為簡單。(主流路由器韌體有 dd-wrt,tomato,openwrt三類)。

相關推薦

[0到1嵌入式工程]嵌入式編譯工具命名規則&四大架構&openwrt簡介

對於韌體應用開發來說,編譯工具鏈都是sdk供應商提供的,不同的專案,就有了多種編譯鏈,不同的編譯鏈有什麼區別呢?例如 arm-linux-gnueabihf-xx,mipsel-openwrt-linux-xx 。交叉編譯工具鏈,從授權上,分為免費授權版和付費授權版。免費版目

[0到1嵌入式工程]嵌入式應用層判斷SD卡是否存在,獲取大小和剩餘空間

1,判斷是否存在     如果sd卡裝置存在, 在生成/sys/block/mmcblk0/device/cid檔案,存放sd卡的cid資訊, 同目錄下type檔案可以判斷卡型別,如果裝置只支援sd卡,就不需要判斷型別了。     在程式碼中使用popen執行命令:cat /

嵌入式Linux-根檔案系統2_(利用交叉編譯工具,構建/lib目錄)

光有應用程式(命令)是不夠的,因為應用程式本身需要使用C庫的庫函式,因此還必需製作for ARM的C庫,並將其放置於/lib目錄。my god,要自己寫C庫的原始碼嗎?不用!還記得交叉編譯工具鏈的3個組成部分嗎?交叉編譯器、for ARM的C庫和二進位制工具。我們只需要把嵌入式的C庫拷貝過來就可

ZYBOZ7入門到進階-5 zyboz7交叉編譯工具的安裝

版權宣告:本文為博主原創文章,未經博主允許不得轉載。https://blog.csdn.net/a646123070        前面幾篇文章我們已經熟悉了PL端和PS端的操作流程,下面,我們要進行系統移植了。而進行系統移植的前提就是安裝交叉編譯工具鏈。

嵌入式linux(交叉工具

在linux環境下程式設計前,我們需要安裝gcc編譯器。 那在進行嵌入式linux開發前,我們首先需安裝交叉工具鏈。 1、下載arm-linux-gcc-xxx.tar.gz 2、解壓工具鏈到某一

Linux下獲取arm的交叉編譯工具

win 5.1 app應用 地址 打開 release nbsp 最新 component 轉載請註明文章:Linux下獲取arm的交叉編譯工具鏈 出處:多客博圖 這裏介紹,Linux下獲取arm的交叉編譯工具鏈,比如arm-linux-gnueabihf-gcc、a

mini2440 編譯工具(gcc)安裝

asset ide www 路徑 簡單 idt ont php .bashrc 編譯工具鏈(gcc)安裝 by HYH | 2018 年 1 月 1 日 上午 9:36 一 .說明 下載 下載十分簡單,在友善之臂的官網下直接下載即可。名字是arm-*-gcc*.ht

交叉編譯工具安裝成功的標誌是什麼

在ubuntu和arm聯合開發時,使用交叉編譯工具鏈,使用了兩個工具鏈aarch64-himix100-linux.tgz和gcc-arm-none-eabi-4_9-2015q3.tgz。 交叉編譯工具鏈安裝成功的標誌是: aarch64-himix100-linux.tgz工

cross compiler Toolchain 交叉編譯工具 的建立

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

自己動手安裝交叉編譯工具

一、安裝步驟: 步驟1:開啟虛擬機器,在/usr/local/下建立/usr/local/arm資料夾 步驟2:先將安裝包從Windows中弄到linux中去。可以用共享資料夾,也可以  用Samba,也可以cuteftp。 步驟3:解壓。tar -jxvf arm-

交叉編譯工具readelf

readelf -A 可檢視檔案執行架構、大小端等資訊: [email protected]:~/CodeBackup/openni2.3/Bin/Arm-Release$ /home/guanlin/arm-hisiv300-linux/bin/arm-hisiv300-linu

ARM交叉編譯工具 gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別

為什麼要用交叉編譯器? 交叉編譯通俗地講就是在一種平臺上編譯出能執行在體系結構不同的另一種平臺上的程式,比如在PC平臺(X86 CPU)上編譯出能執行在以ARM為核心的CPU平臺上的程式,編譯得到的程式在X86 CPU平臺上是不能執行的,必須放到ARM CPU平臺上才能執行,雖然兩個平臺用的都是

ARM交叉編譯工具的製作

今天是10.24程式設計師節日。獎勵一下自己,寫一篇實踐部落格。製作arm交叉編譯工具鏈。 目前比較新的製作交叉編譯工具鏈的軟體是crosstool-NG,非常方便,還可以編譯高版本的核心,比如4.16及以上。 Crosstool-NG的下載地址:http://crosstool-ng.gi

Linux--配置交叉編譯工具

配置交叉編譯工具鏈 安裝 我的交叉編譯軟體包為arm-2009q3.tar.bz2,首先在/usr/local目錄下建立arm目錄,將軟體包解壓到該目錄下。linux中所有目錄性質都是一樣的,裝在哪個目錄下都是可以的,為了方便管理,一般軟體之類的都裝在/usr目

自己動手安裝ARM交叉編譯工具

一,首先說一下在linux中安裝軟體的特點: 相比windows下安裝要稍顯複雜,linux中安裝一般有以下幾種方法: 1.線上安裝,譬如ubuntu中使用apt-get install vim 來安裝vim軟體 2.自己下載安裝包來安裝。這種方式的缺陷就是你不

如何用NDK建立一個標準的android環境交叉編譯工具(Cross Toolchain)

轉自:http://blog.sina.com.cn/s/blog_4a0a39c30101q1u4.htmlhttp://www.linuxidc.com/Linux/2014-11/109905.htmandroid原始碼在 prebuilts 目錄已經自帶有交叉編譯工具

如何用NDK建立一個標準的交叉編譯工具(Cross Toolchain)

   android ndk好象從 r5b 開始,就在 build/tools 目錄準備了一個 make-standalone-toolchain.sh的程式來讓使用者建立標準的交叉編譯工具鏈(Cross Toolchain),以最新的ndkr8e為例,一般建議在ndk的要目錄執行如下命令: $ ./buil

[RK3399][Android7.1] Uboot所用交叉編譯工具

Uboot: v2017.02 Board: Firefly-RK3399 Uboot的交叉編譯工具鏈通過巨集CROSS_COMPILE來定義,在Makefile中。 ifeq ($(ARCHV),aarch64) ifneq ($(wildcard

使用 Android NDK 的交叉編譯工具移植 C/C++ 專案到安卓平臺

什麼是 NDK? Android NDK 是一套可以讓開發者在安卓應用開發中使用 C/C++ 實現特定模組的工具集,不是所有應用都需要用到,但是正確地使用可以有效提高應用執行效率和安全性。 為什麼要在安卓開發中使用 NDK? 遊戲引擎使用 Native 的 C/C++

彙總(之四):交叉編譯工具arm-none-linux-gnueabi-, Qt交叉編譯安裝和移植,Qt桌面版編譯安裝,QTcreator安裝和配置

4. QTcreator2.5.2安裝和配置 首先,從官網下載了qt-creator-linux-x86-opensource-2.5.2.bin檔案。 下面的安裝就比較簡單了,首先更改檔案屬性,使它可執行。 chmod u+x qt-creator-linux