riscv64gc-unknown-linux-gnu
层级: 2 (带有主机工具)
RISC-V 目标使用带有 G 扩展集合以及 C 扩展的 RV64I 基本指令集。
目标维护者
- Kito Cheng, [email protected], @kito-cheng
- Michael Maitland, [email protected], @michaelmaitland
- Robin Randhawa, [email protected], @robin-randhawa-sifive
- Craig Topper, [email protected], @topperc
要求
此目标需要
- Linux Kernel 4.20 或更高版本
- glibc 2.17 或更高版本
构建目标
这些目标通过 rustup
分发,在其他方面不需要特殊配置。
如果由于某些原因您需要构建自己的 Rust,则可以在 config.toml
中启用这些目标。例如
[build]
target = ["riscv64gc-unknown-linux-gnu"]
构建 Rust 程序
在 RISC-V 主机上,riscv64gc-unknown-linux-gnu
目标应自动安装并默认使用。
在非 RISC-V 主机上,添加目标
rustup target add riscv64gc-unknown-linux-gnu
然后使用以下命令交叉编译 crate
cargo build --target riscv64gc-unknown-linux-gnu
测试
对于测试和运行目标,没有特殊要求。 为了在主机上测试交叉构建,请参阅下面的“交叉编译工具链和 C 代码”部分。
交叉编译工具链和 C 代码
可以从 riscv-gnu-toolchain
仓库为 Windows/Mac/Linux 获取 RISC-V 工具链。 二进制文件可通过 embecosm 获得,也可能从您的操作系统软件包管理器获得。
在 Ubuntu 上,可以使用以下命令安装 RISC-V 工具链
apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-dev-riscv64-cross
根据您的系统,您可能需要配置目标以使用 GNU GCC 链接器。 要使用它,请将以下内容添加到您的 .cargo/config.toml
[target.riscv64gc-unknown-linux-gnu]
linker = "riscv64-linux-gnu-gcc"
如果您的 riscv64-linux-gnu-*
工具链不在您的 PATH
中,您可能需要配置其他设置
[target.riscv64gc-unknown-linux-gnu]
# Adjust the paths to point at your toolchain
cc = "/TOOLCHAIN_PATH/bin/riscv64-linux-gnu-gcc"
cxx = "/TOOLCHAIN_PATH/bin/riscv64-linux-gnu-g++"
ar = "/TOOLCHAIN_PATH/bin/riscv64-linux-gnu-ar"
ranlib = "/TOOLCHAIN_PATH/bin/riscv64-linux-gnu-ranlib"
linker = "/TOOLCHAIN_PATH/bin/riscv64-linux-gnu-gcc"
要在非 RISC-V 主机上测试交叉编译的二进制文件,您可以使用 qemu
。 在 Ubuntu 上,可以使用以下命令获取 RISC-V 模拟器
apt install qemu-system-riscv64
然后,在 .cargo/config.toml
中设置 runner
[target.riscv64gc-unknown-linux-gnu]
runner = "qemu-riscv64-static -L /usr/riscv64-linux-gnu -cpu rv64"
在 Mac 和 Linux 上,也可以使用 lima
来模拟 RISC-V,其方式类似于 WSL2 在 Windows 上的工作方式
limactl start template://riscv
limactl shell riscv
使用 Docker (使用 BuildKit),riscv64/ubuntu
镜像可用于构建或运行 riscv64gc-unknown-linux-gnu
二进制文件。
docker run --platform linux/riscv64 -ti --rm --mount "type=bind,src=$(pwd),dst=/checkout" riscv64/ubuntu bash