Arm架构
ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7、ARMv8
ARMv6
ARMv7(Cortex-A7, Cortex-A9)
ARMv8(Cortex-A53(处理器), Cortex-A72)确认了ARM架构之后,选择支持该架构的交叉编译环境。
例如,使用aarch64-linux-gnu-gcc -march=armv8-a命令编译代码时,表示编译针对于Cortex-A53处理器。
GNU Arm Embedded Toolchain官网提供交叉编译工具
下载交叉编译工具
arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz,该文件名称意为:在x86平台的linux主机进行编译,生成的文件为aarch64平台可运行的文件,这里宿主机和目标平台都是64位机器。
安装
使用如下命令进行解压:tar -xvf arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz -C /usr/local/arm
mv arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu 12.2.1
接下来配置系统环境变量,把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具
vim /etc/profile
将解压目录下的bin目录添加至环境变量中:
export PATH=$PATH:/usr/local/arm/12.2.1/bin
接下来使用以下命令使修改后的profile文件生效:
source /etc/profile
然后,使用命令:aarch64-none-linux-gnu-gcc -v查看当前交叉编译链工具的版本信息:
aarch64-none-linux-gnu-gcc -v
由于在/usr/local/arm/12.2.1/bin下没有arm-linux-gcc、arm-linux-ld、arm-linux-strip链接,所以我们进入bin路径:
cd 12.2.1/bin/
创建自己创建软链接:
sudo ln -s aarch64-none-linux-gnu-gcc arm-linux-gcc
sudo ln -s aarch64-none-linux-gnu-ld arm-linux-ld
sudo ln -s aarch64-none-linux-gnu-objdump arm-linux-objdump
sudo ln -s aarch64-none-linux-gnu-objcopy arm-linux-objcopy
sudo ln -s aarch64-none-linux-gnu-strip arm-linux-strip
sudo ln -s aarch64-none-linux-gnu-cpp arm-linux-cpp
sudo ln -s aarch64-none-linux-gnu-ar arm-linux-ar
sudo ln -s aarch64-none-linux-gnu-as arm-linux-as
sudo ln -s aarch64-none-linux-gnu-strings arm-linux-strings
sudo ln -s aarch64-none-linux-gnu-readelf arm-linux-readelf
sudo ln -s aarch64-none-linux-gnu-size arm-linux-size
sudo ln -s aarch64-none-linux-gnu-c++ arm-linux-c++
sudo ln -s aarch64-none-linux-gnu-gdb arm-linux-gdb
sudo ln -s aarch64-none-linux-gnu-nm arm-linux-nm
sudo ln -s aarch64-none-linux-gnu-g++ arm-linux-g++
然后,使用命令:arm-linux-gcc -v查看当前交叉编译链工具的版本信息:
arm-linux-gcc -v