构建 aarch64 以及 riscv64 交叉编译工具链(裸机)

构建 aarch64 以及 riscv64 交叉编译工具链(裸机)

因为我的需求是构建裸机的程序,所以我选择了裸机相关的交叉工具链

其他工具链也类似,在给出的两个官方链接中提供了所有的交叉工具链,选择合适的工具构建即可

一、ARM64

使用的工具链为: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)

  • arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-elf.tar.xz

下载下来的压缩包里包含了可执行文件位于 bin 目录下,即不需要我们本地编译

为了在任意位置可以使用,将其添加到环境变量中

vim ~/.bashrc
# 添加如下内容, 注:我对本地文件夹进行了改名,这个路径需要根据情况进行修改
export PATH=$PATH:/home/jingyu/arm-gnu-toolchain-x86_64-aarch64-none-elf/bin

有时候为了更清晰,可以选择将其 mv/opt 文件夹下,环境变量一致即可

RISCV64 则是源码编译时通过设置 --prefix 参数指定了/opt/riscv 的路径。

二、RISCV64

使用的工具链为: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 or git 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

你可能感兴趣的:(操作系统,riscv,arm,交叉编译)