找回密码
 注册
关于网站域名变更的通知
查看: 2604|回复: 1
打印 上一主题 下一主题

详细了解一下ARM的主流编译器(armcc、iar、gcc for arm)(下)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-9-4 13:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
GCC for ARM( R, y5 ~) V7 z, n
  GCC 全称为 GNU Compiler Collection。 GCC 是几种主要编程语言的编译器的集成分发。 这些语言目前包括 C,C ++,Objective-C,Objective-C ++,Fortran,Ada,Go 和 BRIG(HSAIL)。( ^. H8 m) P# o, a
  GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如 Fortran、Pascal、Objective-C、Java、Ada、Go 以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。 更名之后,原来的针对于 C 语言的编译器名字还叫 gcc,针对 C++ 的编译器叫做 g++ 。+ b8 H# \, y0 _' [
  GCC for ARM 则是基于 GCC 开发的,用来编译生成 ARM 内核可执行文件的编译套件,俗称 ARM 交叉编译套件。 相比于以上两个巨贵的编译器,GCC for ARM 因为是基于开源的 GCC 的,因此是免费的。目前主要由三大主流工具商提供,第一是 ARM,第二是 Codesourcery,第三是 Linora。目前我们用的针对 ARM 芯片的集成开发环境(IDE),除了 IAR 和 ARM 自己的 Keil、DS 等都是使用 GCC for ARM 的编译器!8 C6 [# [% E1 s

5 x, p' I4 Q% V: H! l首先,看看 ARM 交叉编译工具链的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-gcc]8 _/ z) L) v! O4 w- ?
2 I( ~3 O# I; x. b+ a
  • arch: 体系架构,如 ARM,MIPS
  • vendor: 工具链提供商,没有 vendor 时,用 none 代替;
  • os: 目标操作系统,没有 os 支持时,也用 none 代替
  • eabi: 嵌入式应用二进制接口(Embedded Application Binary InteRFace)
      `9 |" M( N# ^+ i9 w4 }

6 s: ^  ^& V/ R/ d如果同时没有 vendor 和 os 支持,则只用一个 none 代替。例如 arm-none-eabi 中的 none 表示既没有 vendor 也没有 os 支持。 前面说过,GCC for ARM 则是基于 GCC 开发的。因此,其和 GCC 一样是一套命令行工具的集合,理论上可以将它集成到其他任何集成开发环境中,从而不直接使用命令行。GCC for ARM 中的各命令行工具与 GCC 中的各命令行工具都是对应的,功能基本一致,仅仅是名字有些改变!" r2 J  j2 @: ?

: m" T8 k; U+ RCodesourcery Toolchain
% M5 C6 s6 N) R, p; Y  Codesourcery推出的产品叫 Sourcery G++ Lite Edition,其中基于 command-line 的编译器是免费的,在官网上可以下载,而其中包含的 IDE 和 debug 工具是收费的。Codesourcery 公司(目前已经被mentor收购)基于GCC推出的ARM交叉编译工具。可用于交叉编译 ARM mcu 芯片,如 ARM7、ARM9、Cortex-M/R 芯片程序。
, ]0 k2 G. J/ U; d" S  目前 CodeSourcery 已经由明导国际(Mentor Graphics)收购,所以原本的网站风格已经全部变为 Mentor 样式,这货被收之后,不知道怎么下载其编译工具链。。。- n" c; V% S0 r. S/ a" u

7 R8 e7 Q9 p, Y$ n$ h& p" p
  • 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芯片程序。: }7 M5 c+ h9 J3 ~5 `- e+ {
& _% ]3 U$ S; |8 v0 E, X
Linaro Toolchain; ~* E, C3 c! t8 l
   Linaro 是在 2010 年台北国际计算机展( COMPUTEX )期间,ARM、Freescale、Samsung ,ST-Ericsson、德州仪器(TI)与IBM等6家大厂,宣布合资成立的非赢利 Linux 基础架构软件研发商。其基于 GCC 推出的 ARM 交叉编译工具如下图所示:
: ~& T/ A* R) n3 _4 `4 z6 N7 G! c0 s7 r

5 ^$ t8 y+ ~) g) J  v: V4 z# Z: F4 [8 w

. M2 {: _+ D1 m( m: W1 x从上图不难看出,Linaro 提供的交叉编译环境,仅针对于Cortex-A 内核,其他 ARM 内核则需要去 ARM 官网下载!
- I" d( b. D9 Y4 R2 C. x
/ _: m; `; ]0 y9 X* k0 [
  • 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 应用 Application
  • aarch64-elf: 用于编译 ARM v8 64位 架构的裸机系统,包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application
    9 q- ~+ u9 ?' I* Z$ M: W0 N

" b5 I$ k0 W0 I  正如官网的说明,官方发布的编译好二进制可执行编译器文件,仅在 Linux 系统( Ubuntu LTS)进行了测试。 目前,官方没有提供其他平台的可执行程序!
) y7 B" g, q. Q4 O
6 Q: o6 x- K9 h/ M9 [' ]$ S, m: U  A
ARM Toolchain
% z8 |& O3 K* v
! {5 l  y& T1 l: N2 p. H- p% ?  ARM 除了有自己的专用编译器之外,还维护了一套基于 GCC 的交叉编译工具链。估计是为了能更有效的占有市场吧!绝大多数第三方的 IDE 都是使用这一套交叉编译工具链。
+ n$ N5 M& ^: n, R6 v* {% w5 v% q/ N2 _. w4 n  I
arm-none-eabi
0 F  \6 X; u2 o0 ^3 {" c9 u
' G2 b3 ~8 c6 x5 g2 ?0 }6 y) B0 R  用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),所以不支持那些跟操作系统关系密切的函数,比如fork,它使用的是 newlib 这个专用于嵌入式系统的C库。; N/ V- a, h8 i" J
  作为维持和增强 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。
" @5 B8 @/ ~' V% i9 x; w  作为其中的一部分,ARM 定期发布来自 ARM 嵌入式分支的预构建和测试二进制文件。 这些改进可以免费集成到第三方工具链中,也可以由最终用户直接下载。整套工具链包含以下组件:
# P3 h! M. f+ p% {. T7 D) j7 P* T0 K
  • gcc : gcc-8-branch revision 267074
      ~8 l6 A2 K8 x) W% w$ dsvn://gcc.gnu.org/svn/gcc/branches/gcc-8-branch
  • binutils : 2.31 with mainline backports. ?' g/ n4 s/ q; h  m; d
    git://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351
  • newlib and newlib-nano :
    - b9 l% O4 I& i% lgit://sourceware.org/git/newlib-cygwin.git commit df6915f029ac9acd2b479ea898388cbd7dda4974
  • gdb : 8.2 without target sim support
    ' Q, \5 G! u2 _  b& W) k/ Sgit://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351
    . D+ X/ [& X. P7 `

& }7 U/ s  a  y" n3 \   目前由 ARM 来维护开发。使用 launchpad 来维护该项目源码。但是根据之前的公告,launchpad 上不发布编译好的程序和源码包("As previously announced all new binary and source packages will not be released on Launchpad henceforth, they can be found on:% ?/ @1 W' T' F% n9 W0 w
https://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 进行下载。下面是,版本发布时间线:
4 K8 _0 t! h: |% u  o. I" R; i
6 e$ e6 A8 B' o+ ]' p: f
6 y9 x% K* b/ T5 R2 X
9 h% s& L/ L. D) z3 p% |6 w2 e* ?( g) Z% r; Q- ?, Z; F
这是目前,我们编写 ARM 裸机程序时,使用最多的交采编译工具链! 安装/解压 之后,目录如下图所示:* k7 v7 _3 p# v) p, E

) M4 H8 D4 }# |, [" k
. e) ?  Z' y) Z) X5 P! R3 n" `; Y
编译器工具中的各工具,与标准的GCC没有太多区别,主要就是针对的平台变了。各工具的功能是一样的!比如:arm-none-eabi-gcc.exe 是C 语言编译器、arm-none-eabi-g++.exe 是 C++ 编译器、arm-none-eabi-ld.exe 是连接器、arm-none-eabi-gdb.exe 是调试器等等。
, ?3 m4 v  `) ~' q# s
5 L0 H; a5 G; Y+ R  `9 q' Q) n% e" }' F, C7 |& `6 |: C
Cortex-A 专用
4 h! s6 e0 `+ N) u3 L
' V; s9 u4 j0 w, n4 T& f  以上交叉编译工具链只支持 ARM Cortex-M/R等系列的核,ARM 官网还提供了针对于 ARM Cortex-A 系列内核的交叉编译工具链,可以从以下地址下载
; O- Y% {) y( ~https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads。 具体如下所示:
9 `: ?$ A' k- H/ p  z# W8 d* S$ c3 R& r4 G
3 p2 I+ Q3 Y% I+ U' S+ x; f. H% o% ~

; ^, C' Q& l1 u4 G" R* n: d
; ]5 [& P) T" T8 k9 ?; R" p需要注意的是,上图中红框全称的就是编译工具链的名字。以 gcc-arm-8.3-2019.03-i686-mingw32-arm-eabi 为例,解压后如下图所示:
, C/ q& \: c2 k+ ]& F6 q8 P* u3 Q9 _7 \/ @% h! }+ ^" B

1 Z: }6 B( Q4 K& h* s0 M( H2 C# w" g1 u, u1 I
各命令行工具与标准 GCC 也没啥区别!) U' r/ N5 w7 O; p
  再一个需要注意的是,上图中的 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 平台! 整套工具包含以下组件:6 T: {7 X# y, ?3 {, A, k
4 X8 {" a2 K0 f$ E: ?) i. g" k/ m2 z
8 }& f8 u4 o( i; \
' r; K9 |, {" I! \& e4 Z3 ^- I; C
再再一个需要注意的是,编译器的目标平台。" X# I8 w# `% b) j9 h4 ~

! H$ C2 _1 ]2 }" h* L8 q5 t
  • AArch32 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位带硬件模式浮点运算
    7 _6 W& \, M2 k6 n* `) _

3 @  C& ~, A0 B) W. P4 t! M' `6 }3 y  {
8 N9 ?" P: E6 M  ^# P
" p2 b1 j4 }  r, R. D5 t  e& ^9 H

该用户从未签到

2#
发表于 2020-9-4 14:13 | 只看该作者
详细了解一下ARM的主流编译器(armcc、iar、gcc for arm)(下)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 22:16 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表