当前位置:   article > 正文

Linux 下安装交叉编译工具链_linux交叉编译工具链

linux交叉编译工具链

Linux 下安装交叉编译工具链

这里以安装 GNU Arm Embedded Toolchain 10-2020-q4-major 交叉编译工具链为例

下载交叉编译工具链

https://developer.arm.com/downloads/-/gnu-rm
https://developer.arm.com/downloads/-/gnu-a
  • 1
  • 2

可以在 windows 中下载然后使用 FTP/scp(SSH拷贝命令) 传到 Linux,也可以直接在 linux 中下载

解压

在 Linux 中选择一个目录:/home/tyustli/cross-tool

解压命令

sudo tar vxf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
  • 1

添加环境变量

打开 profile 文件

sudo vim /etc/profile
  • 1

编辑文件,在文件的最后一行添加:

export PATH=$PATH:/home/tyustli/cross-tool/gcc-arm-none-eabi-10-2020-q4-major/bin
  • 1

保存退出

使环境变量生效

source /etc/profile
  • 1

linux 下使用 source /etc/profile 保存配置后,新的环境变量只能在一个终端里面有效,重新开启一个终端后,该环境变量失效

解决方法

重启系统

因为设置的环境变量,并没有真正生效,只是使用source 命令让临时运行而已。

查看安装结果

 arm-none-eabi-gcc -v
  • 1

如果能够正确打印如下信息说明交叉编译工具链安装成功

Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/home/tyustli/cross-tool/gcc-arm-none-eabi-10-2020-q4-major/bin/../lib/gcc/arm-none-eabi/10.2.1/lto-wrapper
Target: arm-none-eabi
Configured with: /mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/src/gcc/configure --target=arm-none-eabi --prefix=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native --libexecdir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native/lib --infodir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/install-native/arm-none-eabi --build=x86_64-linux-gnu --host=x86_64-linux-gnu --with-gmp=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/build-native/host-libs/usr --with-mpfr=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/build-native/host-libs/usr --with-mpc=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/build-native/host-libs/usr --with-isl=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/build-native/host-libs/usr --with-libelf=/mnt/workspace/workspace/GCC-10-pipeline/jenkins-GCC-10-pipeline-48_20201124_1606180641/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Arm Embedded Toolchain 10-2020-q4-major' --with-multilib-list=rmprofile,aprofile
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.2.1 20201103 (release) (GNU Arm Embedded Toolchain 10-2020-q4-major) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

编译器分类

名词

  • abi(application binary interface): 二进制程序接口
  • eabi(embedded): 嵌入式二进制程序接口
  • arm-none-eabi: 无操作系统,不支持系统调用的函数,如 fork 等。其使用专用于嵌入式开发的 C 程序库。
  • arm-none-linux-eabi: 用于 linux,使用 glibc。
  • GNU:GNU’s Not Unix 缩写
  • armel:soft fpu 软浮点
  • armhf:hard fpu 硬浮点

GCC 常用编译器

  • arm-none-eabi-gcc: 编译裸机程序或系统,适用于 ARM7/Cortex-M/Cortex-R,可调用 newlib 库。
  • arm-none-linux-gnueabi-gcc: 编译 ARM 架构的 Linux 程序,有 uboot/linux kernel/linux 应用,适用于 ARM9/ARM11/Cortex-A。
  • armcc:类似与 arm-none-eabi-gcc ,keil MDK 使用,需要授权

浮点运算时编译器的差异

  • arm-linux-gnueabi-gcc: 适用于 armel 架构(与 armhf 有浮点运算间的差异)。
  • arm-linux-gnueabihf-gcc: 适用于 armhf 架构。

两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。gcc 的选项 -mfloat-abi 有三种值 softsoftfphard(其中后两者都要求 arm 里有 fpu 浮点运算单元,soft 与后两者是兼容的,但 softfp 和 hard 两种模式互不兼容):

  • soft: 不用 fpu 进行浮点计算,即使有 fpu 浮点运算单元也不用,而是使用软件模式。
  • softfp: armel 架构(对应的编译器为 arm-linux-gnueabi-gcc )采用的默认值,用 fpu 计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
  • hard: armhf 架构(对应的编译器 arm-linux-gnueabihf-gcc )采用的默认值,用 fpu 计算,传参数也用 fpu 中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/485670
推荐阅读
相关标签
  

闽ICP备14008679号