因为我的需求是构建裸机的程序,所以我选择了裸机相关的交叉工具链
其他工具链也类似,在给出的两个官方链接中提供了所有的交叉工具链,选择合适的工具构建即可
使用的工具链为:aarch64-none-elf-xxx
aarch64-none-linux-gnu
用于编译在 ARM64 架构的 Linux 内核以及在 Linux 系统上运行的程序
aarch64-none-elf
用于编译在无操作系统环境(裸机)下运行的程序,可以用来编译自定义操作系统等
arm工具链(下载会比较慢):
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
例如:我的操作系统为 ubuntu22.04.3,平台架构为 x86_64
找到其中的 x86_64 Linux hosted cross toolchains,和我的操作系统和平台架构是一致的
下载对应的部分即可
我这里是 aarch64-none-elf-xxx,所以下载如下内容
AArch64 bare-metal target (aarch64-none-elf)
下载下来的压缩包里包含了可执行文件位于 bin 目录下,即不需要我们本地编译
为了在任意位置可以使用,将其添加到环境变量中
vim ~/.bashrc
# 添加如下内容, 注:我对本地文件夹进行了改名,这个路径需要根据情况进行修改
export PATH=$PATH:/home/jingyu/arm-gnu-toolchain-x86_64-aarch64-none-elf/bin
有时候为了更清晰,可以选择将其 mv
到 /opt
文件夹下,环境变量一致即可
RISCV64 则是源码编译时通过设置
--prefix
参数指定了/opt/riscv
的路径。
使用的工具链为:riscv64-unknown-elf-xxx
工具链官方仓库:https://github.com/riscv-collab/riscv-gnu-toolchain
仓库 README 说:
This repository uses submodules, but submodules will fetch automatically on demand, so
--recursive
orgit submodule update --init --recursive
is not needed.
# 1、官网的意思是,在构建时会自动下载需要的包
git clone https://github.com/riscv/riscv-gnu-toolchain
# 2、先 clone 仓库,然后添加仓库里的子模块
git clone https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
git submodule update --init --recursive
# 3、尽管有魔法,但是我上述两种方式都不成功,在 clone 时指定 --recursive 参数能成功下载
git clone https://github.com/riscv/riscv-gnu-toolchain --recursive
其他老哥的方案(借助gitee):https://blog.csdn.net/limanjihe/article/details/122373942
我使用的是 ubuntu,所以需要以下依赖(其他操作系统查仓库)
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev
我要安装的是 riscv64-unknown-elf-xxx 交叉编译工具,对应的是 Newlib 部分
要构建 Newlib 交叉编译器,请选择一个安装路径(可写)。例如 /opt/riscv
则添加 /opt/riscv/bin
到您的PATH
. 然后,只需运行以下命令:
# 在 riscv-gnu-toolchain 内进行如下操作
./configure --prefix=/opt/riscv
make # 可能权限会不够, 使用 sudo make 即可, 使用 -j4 (根据实际情况选择) 参数可以加快编译
然后就能够使用 riscv64-unknown-elf-xxx
添加到环境变量中
vim ~/.bashrc
# 添加如下内容, 注:我对本地文件夹进行了改名,这个路径需要根据情况进行修改
export PATH=$PATH:/opt/riscv/bin