跳转至

安装 RISC-V 交叉编译工具链

在本课程中,我们需要使用 RISC-V 交叉编译工具链来编译 RISC-V 程序。在本节中,我们将介绍安装 RISC-V 交叉编译工具链的两种方法。

为什么不能使用通过 APT 安装的 riscv64-linux-gnu 工具链?

这个交叉编译工具链在编译 64 位程序时没有问题,但在某些机型上编译 32 位程序时会出现问题,因此我们需要自己编译交叉编译工具链。

Vlab 虚拟机已部署此工具

我们已经请求 Vlab 管理员在虚拟机上安装了满足实验要求的 riscv64-unknown-linux-gnu 工具链,位于 /opt/vlab/riscv64 目录下,使用 Vlab 虚拟机完成实验的同学可以跳过此安装步骤。

安装教程

我们提供手动编译安装和解压安装两种安装方法供同学们使用。

手动编译安装

在这部分教程中,你将从工程源码开始一步步编译出所需的交叉编译工具链。

安装依赖

在安装交叉编译工具链之前,我们需要安装一些依赖:

shell
$ sudo apt install autoconf automake autotools-dev curl python3 python3-pip 
$ sudo apt install libmpc-dev libmpfr-dev libgmp-dev gawk 
$ sudo apt install build-essential bison flex texinfo gperf libtool patchutils 
$ sudo apt install bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev

下载源码

我们可以通过以下命令来下载 RISC-V 交叉编译工具链的源码:

shell
$ git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

同样地,你也可以点击此处获取源码压缩包(大小约为 6.8 GB)。

编译安装

进入源码目录,创建 build 文件夹并进入:

shell
$ cd riscv-gnu-toolchain
$ mkdir build
$ cd build

我们需要编译的是支持乘除法扩展的 riscv64-unknown-linux-gnu 工具链,因此需要执行以下命令进行配置:

shell
$ ../configure --prefix=/opt/riscv64 --enable-multilib --target=riscv64-linux-multilib

之后执行编译。这个过程会非常漫长,强烈建议使用多线程加速编译:

shell
$ sudo make linux -j <nproc>

编译完成后,就可以在 /opt/riscv64/bin 目录下找到交叉编译工具链了。

添加环境变量并测试

我们可以通过以下命令将交叉编译工具链添加到环境变量中:

shell
$ echo 'export PATH=/opt/riscv64/bin:$PATH' >> ~/.bashrc
$ source ~/.bashrc

之后,我们就可以通过以下命令来查看交叉编译工具链的版本:

shell
$ riscv64-unknown-linux-gnu-gcc --version

若输出了编译器的版本信息,则说明已经安装成功。

一键解压安装

我们也提供已经编译好的、适用于 x86_64 架构的工具链压缩包,以便大家一键安装。

下载压缩包

你可以点击此处下载交叉编译工具链压缩包。

解压安装

进入压缩包的下载目录,执行如下命令:

shell
$ sudo mv riscv64.tar.gz /
$ cd /
$ sudo tar -xvf riscv64.tar.gz

解压完成后,你将会找到位于 /opt 目录下的 riscv64 目录。你可以在根目录下使用如下命令清楚下载的压缩包:

shell
$ sudo rm riscv64.tar.gz

添加环境变量并测试

我们可以通过以下命令将交叉编译工具链添加到环境变量中:

shell
$ echo 'export PATH=/opt/riscv64/bin:$PATH' >> ~/.bashrc
$ source ~/.bashrc

之后,我们就可以通过以下命令来查看交叉编译工具链的版本:

shell
$ riscv64-unknown-linux-gnu-gcc --version

若输出了编译器的版本信息,则说明已经安装成功。