1. RISC-V 工具链搭建与交叉编译环境验证

RISC-V 工具链搭建与交叉编译环境验证 学习卡片

任务说明

在 x86_64 Linux 主机上安装 RISC-V GNU 工具链,交叉编译一个静态链接的 Hello World,并用 QEMU 用户态模拟器运行验证。核心链路:riscv64-linux-gnu-gcc 编译 → 生成 riscv64 静态 ELF → qemu-riscv64 执行。

hello.c (源码) riscv64-linux-gnu-gcc -static hello (ELF) riscv64 qemu- riscv64 x86_64 主机上完成交叉编译与模拟运行

环境与依赖

  • 主机:Ubuntu/Debian x86_64(其他发行版替换包管理器命令)。
  • 工具链:gcc-riscv64-linux-gnu(提供 riscv64-linux-gnu-gcc)。
  • 模拟器:qemu-user(提供 qemu-riscv64)。
sudo apt update
sudo apt install -y gcc-riscv64-linux-gnu qemu-user

源码与编译

创建 hello.c,用 -static 静态链接,避免依赖目标机动态库,便于在 QEMU 中直接运行。

#include <stdio.h>

int main(void) {
    printf("Hello, RISC-V!\n");
    return 0;
}
riscv64-linux-gnu-gcc -static -o hello hello.c
file hello

file 应显示类似 ELF 64-bit LSB executable, UCB RISC-V,说明产物是 RISC-V 架构。

在 QEMU 中运行验证

qemu-riscv64 ./hello

预期输出(由代码逻辑唯一确定):

Hello, RISC-V!

通过判定标准

  1. riscv64-linux-gnu-gcc --version 与 qemu-riscv64 --version 均能正常输出版本信息。
  2. file hello 输出包含 RISC-V 且为 ELF 64-bit。
  3. qemu-riscv64 ./hello 打印 Hello, RISC-V!,退出码为 0(可用 echo $? 查看)。

常见问题

  • 报 qemu-riscv64: command not found:确认已安装 qemu-user,或使用完整路径 /usr/bin/qemu-riscv64。
  • 运行报动态链接错误:确认编译时加了 -static。
  • 找不到交叉编译器:包名在不同发行版可能为 gcc-riscv64-linux-gnu 或 gcc-riscv64-unknown-linux-gnu,按实际包名安装。