不同ARM交叉编译工具链区别

“arm生态发展与交叉编译工具链选择”一文对ARM交叉编译工具链介绍得比较详细,以下引用该文章“交叉编译链选择”部分内容,更多详细介绍请查看原文

免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是****Codesourcery,第三是Linora。

收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。

arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。

arm-linux-gnueabihf-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。

aarch64-linux-gnu-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。

arm-none-elf-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。

arm-none-eabi-gcc:是 GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。

安装交叉编译工具链

  1. 访问Linaro官网下载最新的适合我们机器的交叉工具链版本,由于我使用的是Windows所以选择下载mingw32版本

  2. 解压交叉编译工具链到合适的位置

  3. 设置环境变量。把工具链bin目录的路径加入path环境变量

配置Rust环境

  1. 运行命令rustup target add aarch64-unknown-linux-gnu,添加aarch64-unknown-linux-gnu rust toolchain到系统
  2. 修改cargo的config文件,配置新的目标架构
1
2
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
  1. 最后cargo build时需要添加参数--target aarch64-unknown-linux-gnu 。若是想要省略该参数则需要对config作如下的修改,以改变默认的构建目标
1
2
[build]
target = "aarch64-unknown-linux-gnu"
  1. 另外,也可以给build --target aarch64-unknown-linux-gnu 命令设置别名从而缩短构建命令。比如按下面的方式修改config文件后,就可以使用cargo build_aarch64来构建程序了
1
2
[alias]
build_aarch64 = "build --target aarch64-unknown-linux-gnu"

至此,我们就得到了适用于aarch64-unknown-linux环境的二进制可执行目标文件