构建运行OpenSBI+QEMU的RISC-V Dockerfile遇下载问题求助
问题解决:OpenSBI编译失败的Dockerfile修复
问题背景
按照《1000行代码实现操作系统》指南构建Docker镜像时,RISC-V工具链下载成功,但OpenSBI编译阶段报错。
错误信息(翻译自截图)
/bin/sh: 1: riscv64-unknown-elf-gccgcc: not found make: *** [Makefile:125: build] Error 127
问题根源
Dockerfile中OpenSBI编译的CROSS_COMPILE参数设置错误:指定了完整的编译器命令riscv64-unknown-elf-gcc,但该参数需要的是编译器前缀(即去掉gcc后的部分)。导致make命令尝试调用不存在的riscv64-unknown-elf-gccgcc,最终报错。
修复后的Dockerfile
FROM ubuntu:22.04 ARG USER_ID=1000 ARG GROUP_ID=1000 ENV RISCV=/opt/riscv ENV PATH=$RISCV/bin:$PATH ENV MAKEFLAGS=-j4 RUN groupadd -g "${GROUP_ID}" mygroup \ && useradd -u "${USER_ID}" -g "${GROUP_ID}" -m myuser RUN apt-get update \ && apt-get -y install autoconf automake autotools-dev curl python3 python3-pip python3-tomli 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 libslirp-dev RUN git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git /usr/src/riscv-gnu-toolchain RUN cd /usr/src/riscv-gnu-toolchain && \ ./configure --prefix=${RISCV} --enable-multilib && \ make -j$(nproc) && \ make install && \ rm -rf /usr/src/riscv-gnu-toolchain RUN git clone https://github.com/riscv-software-src/opensbi.git /opt/opensbi # 修复CROSS_COMPILE参数,改为编译器前缀 RUN cd /opt/opensbi && \ make CROSS_COMPILE=riscv64-unknown-elf- PLATFORM=generic CFLAGS="-fno-pie" LDFLAGS="-no-pie" && \ rm -rf /opt/opensbi/.git RUN chown -R myuser:mygroup /opt/riscv /opt/opensbi WORKDIR /usr/src USER myuser CMD ["bash"]
额外优化说明
- 修正
CROSS_COMPILE为riscv64-unknown-elf-,这是RISC-V交叉编译工具链的标准前缀,make会自动拼接gcc、ld等工具名 - 新增对
/opt/opensbi目录的权限修改,确保普通用户能访问该目录
内容的提问来源于stack exchange,提问作者Charlie Chiu
相关产品推荐
相关产品推荐

