安装Arm交叉编译工具链

通常我们使用的Arm交叉编译器都是从各种开发板的SDK中得到的,那些toolchain的版本有可能比较旧或者无法满足我们的编译需求,所以今天来讲一下如何获取并安装一个预编译的Arm交叉工具链。

工具链的种类

GCC 的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]-gcc

比如 arm-linux-gnueabi-gccarm-none-eabi-gccaarch64-linux-gnu-gcc

  • 带[]的是可选部分。
  • arch:芯片架构,比如32位的Arm架构对应的arch为arm,64 位的Arm架构对应的arch为aarch64。
  • vendor:工具链提供商,大部分工具链名字里面都没有包含这部分。
  • os:编译出来的可执行文件(目标文件)针对的操作系统,比如Linux。

arm-none-eabi-gcc一般适用用于Arm Cortex-M/Cortex-R平台,它使用的是newlib库。

arm-linux-gnueabi-gcc和aarch64-linux-gnu-gcc适用于Arm Cortex-A系列芯片,前者针对32位芯片,后者针对64位芯片,它使用的是glibc库。可以用来编译u-boot、linux kernel以及应用程序。

工具链的下载

现在Arm平台上用的最广泛的工具链是Linaro发布的,大家可以到Linaro官网下载。

如果要下载的工具链版本比较新,还可以从Arm官网下载。

另外,还可以使用国内的清华源以加快下载速度。

1
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz

工具链的安装

首先需要解压到一个指定的目录,这里我们解压到/usr/local/toolchain

1
2
sudo mkdir -p /usr/local/toolchain
tar -xf gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz -C /usr/local/toolchain/

然后我们需要添加环境变量,只有把可执行文件对应的路径加入到 PATH 环境变量里,系统才可以认到这些命令,可以添加到 ~/.bashrc 文件的最后。

1
PATH=$PATH:/usr/local/toolchain/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin

查看版本

1
arm-none-linux-gnueabihf-gcc -v