EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
GCC for ARM
! F" l; D3 F% o! H8 w# m- R+ h/ \ GCC 全称为 GNU Compiler Collection。 GCC 是几种主要编程语言的编译器的集成分发。 这些语言目前包括 C,C ++,Objective-C,Objective-C ++,Fortran,Ada,Go 和 BRIG(HSAIL)。
8 p: K" o/ c9 D3 T+ ?" V GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如 Fortran、Pascal、Objective-C、Java、Ada、Go 以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。 更名之后,原来的针对于 C 语言的编译器名字还叫 gcc,针对 C++ 的编译器叫做 g++ 。: m+ U: O5 x9 Y8 ]4 D9 S; }* C) H
GCC for ARM 则是基于 GCC 开发的,用来编译生成 ARM 内核可执行文件的编译套件,俗称 ARM 交叉编译套件。 相比于以上两个巨贵的编译器,GCC for ARM 因为是基于开源的 GCC 的,因此是免费的。目前主要由三大主流工具商提供,第一是 ARM,第二是 Codesourcery,第三是 Linora。目前我们用的针对 ARM 芯片的集成开发环境(IDE),除了 IAR 和 ARM 自己的 Keil、DS 等都是使用 GCC for ARM 的编译器!4 g( V) |6 H5 _4 H
0 V( q5 `6 \4 T0 G
首先,看看 ARM 交叉编译工具链的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-gcc]& A8 y. u; y4 M. _: d
/ K9 Y/ M! g I, i/ O& a% E/ ^arch: 体系架构,如 ARM,MIPSvendor: 工具链提供商,没有 vendor 时,用 none 代替;os: 目标操作系统,没有 os 支持时,也用 none 代替eabi: 嵌入式应用二进制接口(Embedded Application Binary InteRFace)
/ f5 |3 F& g) x, F- B" V/ T1 V
如果同时没有 vendor 和 os 支持,则只用一个 none 代替。例如 arm-none-eabi 中的 none 表示既没有 vendor 也没有 os 支持。 前面说过,GCC for ARM 则是基于 GCC 开发的。因此,其和 GCC 一样是一套命令行工具的集合,理论上可以将它集成到其他任何集成开发环境中,从而不直接使用命令行。GCC for ARM 中的各命令行工具与 GCC 中的各命令行工具都是对应的,功能基本一致,仅仅是名字有些改变!
% {( | M3 W/ |2 C& T; ^+ K
& J+ K4 ?) F5 rCodesourcery Toolchain
/ u0 l% q4 T/ ~2 m Codesourcery推出的产品叫 Sourcery G++ Lite Edition,其中基于 command-line 的编译器是免费的,在官网上可以下载,而其中包含的 IDE 和 debug 工具是收费的。Codesourcery 公司(目前已经被mentor收购)基于GCC推出的ARM交叉编译工具。可用于交叉编译 ARM mcu 芯片,如 ARM7、ARM9、Cortex-M/R 芯片程序。
. e8 C0 S: _" s* t# N/ `( r- ? 目前 CodeSourcery 已经由明导国际(Mentor Graphics)收购,所以原本的网站风格已经全部变为 Mentor 样式,这货被收之后,不知道怎么下载其编译工具链。。。
- ^# J) \5 J& X2 Y
- Q- d4 U( N; z: }9 t" ]4 \arm-none-linux-gnueabi-gcc: 用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。arm-none-elf-gcc: 用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。4 l- { L1 g, `- R3 H' y! W
/ ~' v: q- h. _" Y! y2 g9 o3 M; vLinaro Toolchain1 V% Z- b% w, l5 m' U% u `$ p& Y
Linaro 是在 2010 年台北国际计算机展( COMPUTEX )期间,ARM、Freescale、Samsung ,ST-Ericsson、德州仪器(TI)与IBM等6家大厂,宣布合资成立的非赢利 Linux 基础架构软件研发商。其基于 GCC 推出的 ARM 交叉编译工具如下图所示:
3 X* C, ?# P$ I" T2 v) S- l
( x' `* _, S/ L4 J
6.png (145.13 KB, 下载次数: 5)
下载附件
保存到相册
2020-9-2 16:02 上传
/ N: D7 K; E! |* [" S9 J, i8 e6 W O k1 d3 Q* ^
' e+ `2 z8 X2 U
从上图不难看出,Linaro 提供的交叉编译环境,仅针对于Cortex-A 内核,其他 ARM 内核则需要去 ARM 官网下载!
; W4 K+ g7 `) Y7 ~! A' V; k! a. j( T) J8 ^3 \
aarch64-linux-gnu: 针对于目标平台是 Linux 系统,用于交叉编译 ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem 和 App 应用程序。arm-linux-gnueabihf: 针对于目标平台是 Linux 系统,用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和 App 应用程序。arm-eabi-gcc: 用于编译 ARM 架构的裸机系统,包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Applicationaarch64-elf: 用于编译 ARM v8 64位 架构的裸机系统,包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application# ~6 U x2 F H, M* s. l
* p9 I& \4 z% j4 H( C8 ^
正如官网的说明,官方发布的编译好二进制可执行编译器文件,仅在 Linux 系统( Ubuntu LTS)进行了测试。 目前,官方没有提供其他平台的可执行程序!
$ Y: L1 h) C4 ]/ t6 y9 k. r+ q, q& O/ G9 y; T
' x+ G/ n8 k( o3 A, VARM Toolchain, A" J, y; z/ S; m0 [- R
6 }' }) X: H" | w2 e
ARM 除了有自己的专用编译器之外,还维护了一套基于 GCC 的交叉编译工具链。估计是为了能更有效的占有市场吧!绝大多数第三方的 IDE 都是使用这一套交叉编译工具链。
1 i9 G; H# h1 g; T; f- M
, w, {; m: V; N9 ]6 Varm-none-eabi: ]$ I; [- N: E/ z6 F& R
: i) c, X: _6 z) L 用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),所以不支持那些跟操作系统关系密切的函数,比如fork,它使用的是 newlib 这个专用于嵌入式系统的C库。: ?+ h: X5 {- U7 v! ~4 n
作为维持和增强 GCC 编译器支持 ARM 架构的持续承诺的一部分,ARM 正在维护一个 GNU 工具链,其 GCC 源分支针对嵌入式 ARM 处理器,即 Cortex-R / Cortex-M处理器系列,覆盖 Cortex-M0 ,Cortex-M3,Cortex-M4,Cortex-M0 +,Cortex-M7,Armv8-M基线和主线,Cortex-R4,Cortex-R5,Cortex-R7和Cortex-R8。
" @, h7 _+ P0 _6 C 作为其中的一部分,ARM 定期发布来自 ARM 嵌入式分支的预构建和测试二进制文件。 这些改进可以免费集成到第三方工具链中,也可以由最终用户直接下载。整套工具链包含以下组件:5 {9 m% ^2 T2 E9 \9 }9 p4 L
0 {4 H6 _; M+ ^& T. H& t2 m; Egcc : gcc-8-branch revision 267074
0 H; E( @3 R+ P( ^/ Y) p- Zsvn://gcc.gnu.org/svn/gcc/branches/gcc-8-branchbinutils : 2.31 with mainline backports0 x9 ~9 X2 |: t
git://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351newlib and newlib-nano :
+ H" c; M" u% `' H' F igit://sourceware.org/git/newlib-cygwin.git commit df6915f029ac9acd2b479ea898388cbd7dda4974gdb : 8.2 without target sim support+ Q- [* |' O) [7 P6 E
git://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351
: l0 w) Z Z4 t% J5 W' x/ C( R
% q" `3 Y; N7 A" i W$ l5 v( x 目前由 ARM 来维护开发。使用 launchpad 来维护该项目源码。但是根据之前的公告,launchpad 上不发布编译好的程序和源码包("As previously announced all new binary and source packages will not be released on Launchpad henceforth, they can be found on:
7 ?9 X8 ~3 a7 z( Shttps://developer.arm.com/open-source/gnu-toolchain/gnu-rm."),只能从 ARM 官网:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads 进行下载。下面是,版本发布时间线:
7 M: `; \: T9 j8 ^- t* T& ?6 Y1 \! u/ J. o2 p- B5 w4 ~4 @/ |
5.png (45.05 KB, 下载次数: 3)
下载附件
保存到相册
2020-9-2 16:02 上传
2 {3 G" z% ~, p( s. t
4 w: n# a7 n6 ^0 M0 K
* H! g& A* G# w; h9 A. l4 P0 k' x
这是目前,我们编写 ARM 裸机程序时,使用最多的交采编译工具链! 安装/解压 之后,目录如下图所示:; @5 t5 r# V8 g6 }( N3 v& z
2 |7 q$ @2 @1 d- [1 ]
4.png (159.34 KB, 下载次数: 3)
下载附件
保存到相册
2020-9-2 16:02 上传
6 m3 u; K" X- c& b
; I* v9 p) z& Y4 b, o) f) P1 U& @
编译器工具中的各工具,与标准的GCC没有太多区别,主要就是针对的平台变了。各工具的功能是一样的!比如:arm-none-eabi-gcc.exe 是C 语言编译器、arm-none-eabi-g++.exe 是 C++ 编译器、arm-none-eabi-ld.exe 是连接器、arm-none-eabi-gdb.exe 是调试器等等。
) U B" l' K3 {( [/ f' P- o
" V' ] l% C3 f& g! {8 f1 I `$ ?" Z- @- E, { ~
Cortex-A 专用
, w4 D, L# I9 p D
& a# U6 H: w6 L. R& _ 以上交叉编译工具链只支持 ARM Cortex-M/R等系列的核,ARM 官网还提供了针对于 ARM Cortex-A 系列内核的交叉编译工具链,可以从以下地址下载
; ?0 m+ m/ A. F5 _4 S2 rhttps://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads。 具体如下所示:
- e# S# k) x! V/ h/ |
: a0 [5 ]5 X/ B/ g2 l2 }. P
3.png (236.5 KB, 下载次数: 3)
下载附件
保存到相册
2020-9-2 16:02 上传
+ J) i6 Y1 P) h1 Y! ^
: t W$ B+ }+ l+ I% Y
+ n+ L6 e$ ?0 J- `0 H' m需要注意的是,上图中红框全称的就是编译工具链的名字。以 gcc-arm-8.3-2019.03-i686-mingw32-arm-eabi 为例,解压后如下图所示:. x) z/ [! k+ V+ Q1 ]& }
. q. s N+ T( U+ v+ x( K
2.png (104.08 KB, 下载次数: 3)
下载附件
保存到相册
2020-9-2 16:02 上传
1 a* Q3 e" H3 o' @+ q
; s) k8 J) |8 s2 v- v5 \) E各命令行工具与标准 GCC 也没啥区别!) @0 b( h# M, r0 G; ?
再一个需要注意的是,上图中的 i686-mingw32 host 指定是运行平台为 Windows 7 32/64 bits or later;x86_64 host 指定是运行平台为 Ubuntu 14.04 LTS x86_64 or later or RHEL 6 x86_64。也就是说,仅支持 Windows 和 Linux 平台! 整套工具包含以下组件:
' t' h/ t" p, u1 l) C9 A+ y0 g/ D: |, f. o' ?
1.png (104.58 KB, 下载次数: 3)
下载附件
保存到相册
2020-9-2 16:02 上传
6 v2 e+ P6 b( {) d5 Y" |; w# ~2 \
再再一个需要注意的是,编译器的目标平台。# a- k8 z% s+ E) J2 w
# D; n+ I9 |9 u/ \; r$ S( JAArch32 bare-metal target:32位纯裸机平台AArch64 ELF bare-metal target:64位纯裸机平台AArch64 ELF bare-metal, big-endian target:64位纯裸机平台(大端模式)AArch64 GNU/Linux target:64位 Linux 平台AArch64 GNU/Linux big-endian target:64位 Linux 平台(大端模式)AArch32 target with soft float:32位带软件模式浮点运算AArch32 target with hard float:32位带硬件模式浮点运算& K, E: B3 s* I u0 i4 O
' L8 w! ?' c t/ S, ]* Z
4 y: o1 }- r# V
" f' ?! ]) d5 {+ i" q' U
! o7 {- i9 T2 b- s ^