安装交叉编译工具如何安装交叉工具链_其它_山海自留地

山海自留地

安装交叉编译工具如何安装交叉工具链

其它
2024-11-19 13:56

工具链的种类  GCC 的命名规则为: arch [-vendor] [-os] [-(gnu)eabi]-gcc

比如 arm-linux-gnueabi-gcc ,arm-none-eabi-gcc, aarch64-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 以及应用程序。


另外需要补充一点的是,32 位的 Arm 和 64 位的 Arm,它们的指令集是不同的,所以需要使用不同的工具链。当然,Arm64 为了保证前向兼容,提供了一个 32 位的兼容模式,

所以我们用 arm-linux-gnueabi-gcc 编译的应用程序也是可以直接在Arm64 的系统上运行的,但是 Linux Kernel 和 U-Boot 就不行,除非你提前把 CPU 切换到 32 位模式。曾经有个项目使用了一颗四核的 Arm64 芯片,

但是内存只有64M,为了节省空间,在 CPU 运行到 U-Boot 之前,我们就把它切到了 32 位模式,后面的 U-Boot、Linux Kernel,应用全部都用 32 位编译,加上 Thumb 指令集,节省了不少空间。


工具链的下载安装

下载地址

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


http://releases.linaro.org/components/toolchain/binaries/

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain


4.9、6.3、7.4 这些是工具链的版本号,理论上越新的版本,性能越好。


目前用的多的版本应该是 6.x,当然我也看到有些开发组织在使用 7.x 的工具链,比如 Armbian 目前在用 7.4 编译内核。


另外目前最新版本的 U-Boot 已经强制必须使用 6.0 以上版本的 GCC 进行编译。


这两个网站下载可能会比较慢,可以考虑使用国内的镜像下载:

https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchains/

可以直接点击下载,也可以通过命令行用 wget 命令下载:

wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchains/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf.tar.xz
wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchains/gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz


下载了两个,arm 针对是是 32 位的, aarch64 针对 Arm64.


安装

解压:


xz -d gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf.tar.xz 
xz -d gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar.xz


安装到 /usr/local/toolchain/ 目录下,当然也可以放在其他任何你喜欢的地方:

sudo mkdir -p /usr/local/toolchain
tar -xvf gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf.tar -C /usr/local/toolchain/
sudo tar -xvf gcc-linaro-6.4.1-2017.11-x86_64_aarch64-linux-gnu.tar -C /usr/local/toolchain/


成功后执行 ls 命令,可以看到两个 toolchain 都被安装到 /usr/local/toolchain/ 目录下了。


添加环境变量

只有把可执行文件对应的路径加入到 PATH 环境变量里,系统才可以认到这些命令。


这里的路径就是上面截图中 pwd 命令显示的路径,可以添加到 ~/.bashrc 文件的最后:

PATH=$PATH:/usr/local/toolchain/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin:/usr/local/toolchain/gcc-linaro-6.4.
1-2017.11-x86_64_aarch64-linux-gnu/bin



注意: 两个独立的路径之间用 冒号: 隔开。


执行 source ~/.bashrc 命令让配置生效,然后我们就可以在命令行里执行这些命令了:


比如 arm-linux-gnueabihf-gcc -v 和aarch64-linux-gnu-gcc -v 查看编译器版本:


能看到如图的信息,说明已经大功告成了。


编译内核

这里下载 imx 的官方内核:

git clone https://source.codeaurora.org/external/imx/linux-imx


切换到 4.19 版本:

git checkout -b imx_v2019.04_4.19.35_1.0.0  origin/imx_v2019.04_4.19.35_1.0.0


编译:

make ARCH=arm imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-


如果你电脑上其他的依赖库都安装的完整,就能顺利编译成功。