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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
GCC for ARM8 I2 ^5 ]! f( r2 L5 o
  GCC 全称为 GNU Compiler Collection。 GCC 是几种主要编程语言的编译器的集成分发。 这些语言目前包括 C,C ++,Objective-C,Objective-C ++,Fortran,Ada,Go 和 BRIG(HSAIL)。  m8 [$ `7 v; I- Z) y" L4 ]
  GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又扩展能够支持更多编程语言,如 Fortran、Pascal、Objective-C、Java、Ada、Go 以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。 更名之后,原来的针对于 C 语言的编译器名字还叫 gcc,针对 C++ 的编译器叫做 g++ 。/ Q9 G. U' {" _) Z
  GCC for ARM 则是基于 GCC 开发的,用来编译生成 ARM 内核可执行文件的编译套件,俗称 ARM 交叉编译套件。 相比于以上两个巨贵的编译器,GCC for ARM 因为是基于开源的 GCC 的,因此是免费的。目前主要由三大主流工具商提供,第一是 ARM,第二是 Codesourcery,第三是 Linora。目前我们用的针对 ARM 芯片的集成开发环境(IDE),除了 IAR 和 ARM 自己的 Keil、DS 等都是使用 GCC for ARM 的编译器!
- L, X- ]8 c8 m3 D' D# X1 ]) C* e9 g0 z1 g
首先,看看 ARM 交叉编译工具链的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-gcc]. s6 m' Y! s) L2 d- q
' z8 Q& z5 J7 S2 b0 Y  D
  • arch: 体系架构,如 ARM,MIPS
  • vendor: 工具链提供商,没有 vendor 时,用 none 代替;
  • os: 目标操作系统,没有 os 支持时,也用 none 代替
  • eabi: 嵌入式应用二进制接口(Embedded Application Binary InteRFace)6 D  o% X! D8 m+ g- P8 n0 c
& F4 B) m5 k" V$ c/ M
如果同时没有 vendor 和 os 支持,则只用一个 none 代替。例如 arm-none-eabi 中的 none 表示既没有 vendor 也没有 os 支持。 前面说过,GCC for ARM 则是基于 GCC 开发的。因此,其和 GCC 一样是一套命令行工具的集合,理论上可以将它集成到其他任何集成开发环境中,从而不直接使用命令行。GCC for ARM 中的各命令行工具与 GCC 中的各命令行工具都是对应的,功能基本一致,仅仅是名字有些改变!' Y2 i$ D( E& n* Z' C

3 t' x1 s7 E5 X6 E% G' M$ A1 O. fCodesourcery Toolchain* y) W2 g3 G$ m# e
  Codesourcery推出的产品叫 Sourcery G++ Lite Edition,其中基于 command-line 的编译器是免费的,在官网上可以下载,而其中包含的 IDE 和 debug 工具是收费的。Codesourcery 公司(目前已经被mentor收购)基于GCC推出的ARM交叉编译工具。可用于交叉编译 ARM mcu 芯片,如 ARM7、ARM9、Cortex-M/R 芯片程序。9 O( U% ^$ x/ \
  目前 CodeSourcery 已经由明导国际(Mentor Graphics)收购,所以原本的网站风格已经全部变为 Mentor 样式,这货被收之后,不知道怎么下载其编译工具链。。。) C. c, y  |; D1 t6 I
& w% r1 v  \: B+ p7 ~, T/ @
  • 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芯片程序。; x0 ]+ ]2 n6 r4 M  c

: x" q9 G8 M! B+ F/ ZLinaro Toolchain, n$ K$ |: w. X/ r: n$ D
   Linaro 是在 2010 年台北国际计算机展( COMPUTEX )期间,ARM、Freescale、Samsung ,ST-Ericsson、德州仪器(TI)与IBM等6家大厂,宣布合资成立的非赢利 Linux 基础架构软件研发商。其基于 GCC 推出的 ARM 交叉编译工具如下图所示:
0 f, b$ T$ m: Y  I9 p- Q3 S8 t1 Y  C

! j8 N* w- X3 n- ^* k- t- Y+ e# a+ }, a5 o

9 z, C/ E: d9 A0 W3 {/ U2 T+ g2 ^( p, J从上图不难看出,Linaro 提供的交叉编译环境,仅针对于Cortex-A 内核,其他 ARM 内核则需要去 ARM 官网下载!
) o& |; g2 v$ \2 @+ e2 u" S
4 e2 P8 c) z  o  g' S) a
  • 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
    ; \8 e0 s0 J1 [

/ Y  ^) L5 U- a; M  正如官网的说明,官方发布的编译好二进制可执行编译器文件,仅在 Linux 系统( Ubuntu LTS)进行了测试。 目前,官方没有提供其他平台的可执行程序!/ V# h  @& O; e1 V1 r. @: Q

3 }3 W3 E* i( F* U( X3 [. \7 q4 k' L. E+ F$ ]
ARM Toolchain
/ w7 T4 E0 @7 c$ C. c0 ~6 q( v, h/ z$ q. s7 j& A
  ARM 除了有自己的专用编译器之外,还维护了一套基于 GCC 的交叉编译工具链。估计是为了能更有效的占有市场吧!绝大多数第三方的 IDE 都是使用这一套交叉编译工具链。$ F, P4 _7 B8 I# b( I* a5 a
3 c2 c! w% w4 u1 U7 r! P6 R
arm-none-eabi" y' u. z$ q: n% S7 Z! r& j  }3 P

/ x4 ]6 |$ p7 p, n+ F; x  用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),所以不支持那些跟操作系统关系密切的函数,比如fork,它使用的是 newlib 这个专用于嵌入式系统的C库。
; S. x, Q& s4 F7 ?  作为维持和增强 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。
& N, K( e. |; T% s  作为其中的一部分,ARM 定期发布来自 ARM 嵌入式分支的预构建和测试二进制文件。 这些改进可以免费集成到第三方工具链中,也可以由最终用户直接下载。整套工具链包含以下组件:# `/ e/ _. E4 P* I. w7 F1 P- M
- C$ S4 Q' W6 K! k5 c# C. m
  • gcc : gcc-8-branch revision 267074
    # y. g9 k0 f, j# Xsvn://gcc.gnu.org/svn/gcc/branches/gcc-8-branch
  • binutils : 2.31 with mainline backports
    6 c9 e; {7 V6 j, i, ]# m9 \% cgit://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351
  • newlib and newlib-nano :, s. V7 [( |0 u) R9 h$ @7 c9 ^
    git://sourceware.org/git/newlib-cygwin.git commit df6915f029ac9acd2b479ea898388cbd7dda4974
  • gdb : 8.2 without target sim support
    ( p; R5 n/ d' j  }git://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351+ w  B3 \0 b$ W0 Q' V0 H  g
4 B2 z, X& h) M9 _% C
   目前由 ARM 来维护开发。使用 launchpad 来维护该项目源码。但是根据之前的公告,launchpad 上不发布编译好的程序和源码包("As previously announced all new binary and source packages will not be released on Launchpad henceforth, they can be found on:
0 s1 L/ |% b; O" _& ehttps://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 进行下载。下面是,版本发布时间线:' A$ `! I$ R9 F" A$ O' }, {

  s7 [8 X4 D" I0 e+ l 2 t" e, U; o2 i  v% o! K
) x9 K& L: o/ U. }, q/ `7 K  f

! m1 s9 u  a; L1 T+ x& ?这是目前,我们编写 ARM 裸机程序时,使用最多的交采编译工具链! 安装/解压 之后,目录如下图所示:
3 W$ F9 J1 j9 H- a* D6 X1 @% @  a/ m+ @% G# Q# Q

: a- j; ~7 f! `+ U
: t# S- S2 L* n2 c/ f: t4 ^. i5 S+ c编译器工具中的各工具,与标准的GCC没有太多区别,主要就是针对的平台变了。各工具的功能是一样的!比如:arm-none-eabi-gcc.exe 是C 语言编译器、arm-none-eabi-g++.exe 是 C++ 编译器、arm-none-eabi-ld.exe 是连接器、arm-none-eabi-gdb.exe 是调试器等等。0 N" e* m8 I$ E0 ]: U

- B0 ^7 _, O$ j1 f- Y7 v
, W6 \4 ?5 L; {) @Cortex-A 专用
  z9 F, @7 H: m! A: u5 R# \6 t4 s* y2 O6 ?/ ^, {
  以上交叉编译工具链只支持 ARM Cortex-M/R等系列的核,ARM 官网还提供了针对于 ARM Cortex-A 系列内核的交叉编译工具链,可以从以下地址下载
+ b6 h4 d8 f" P) w2 h+ u+ O4 shttps://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads。 具体如下所示:7 N" q, E) k/ y8 f* q  T

% [0 q$ ?! ^3 E4 ~* h/ U4 k) f3 f
# Z6 E" ]) I" [% Z3 e
* V& T, A' g5 f8 G7 l6 k5 T7 t, k: a4 X7 q& D- a" u
需要注意的是,上图中红框全称的就是编译工具链的名字。以 gcc-arm-8.3-2019.03-i686-mingw32-arm-eabi 为例,解压后如下图所示:$ e# ]% q. o. W/ @
' @  d- p( {1 M

! m/ [! n- D0 L8 n+ ], Q& m' o
4 Z; F( p$ t: g1 P各命令行工具与标准 GCC 也没啥区别!; x4 P" t. Z% @" 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 平台! 整套工具包含以下组件:6 C' z( q; z& m3 C
' _% o$ F4 K: }5 h$ ]* x" h

. Q: `1 ]2 F* j' K* P) Q5 X. P( P" K+ _8 Z, o0 c
再再一个需要注意的是,编译器的目标平台。
- i* g4 k/ y; K( d1 T/ h& \! O- O" c! ?9 I' g4 x' w
  • 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位带硬件模式浮点运算
    / v7 A4 G& P4 Q. L. ~2 W: m" ]

6 a- z, {6 \+ R# @0 R/ ]: }
" ^7 s& a' m7 [( u; B2 b
) J& a1 s4 c- ]; A
- s* U- S0 b0 i9 o

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 00:55 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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