You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QEMU启动RISC-V架构Ubuntu镜像时卡住的问题求助

解决思路

以下是针对RISC-V Ubuntu镜像在QEMU中卡在EFI stub: Exiting boot services...的排查与解决步骤:

1. 调整内核启动参数,增加调试输出

卡在该阶段通常是内核启动后无法输出日志,先强制开启早期控制台输出,确认具体卡位点:
修改启动命令中的-append参数,添加earlycon=sbi:

qemu-system-riscv64 -machine virt -cpu rv64gc -m 2G \
-device virtio-blk-device,drive=hd \
-drive file=ubunturv.img,if=none,id=hd \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf \
-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-object rng-random,filename=/dev/urandom,id=rng \
-device virtio-rng-device,rng=rng \
-append "root=LABEL=rootfs console=ttyS0 earlycon=sbi" \
-nographic

如果仍然无响应,可临时添加init=/bin/bash直接进入根shell,验证根文件系统是否能正常挂载:

-append "root=LABEL=rootfs console=ttyS0 earlycon=sbi init=/bin/bash"

2. 移除手动指定的Bootloader,使用镜像自带配套组件

Ubuntu官方RISC-V镜像已包含适配的EFI Bootloader,手动指定-bios和-kernel可能导致版本不兼容,尝试简化启动命令:

qemu-system-riscv64 -machine virt -cpu rv64gc -m 2G \
-device virtio-blk-device,drive=hd \
-drive file=ubunturv.img,if=none,id=hd \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-nographic

注意:将-cpu rv64替换为rv64gc,匹配Ubuntu镜像要求的通用指令集+压缩指令集支持。

3. 验证镜像完整性与扩容操作

扩容操作可能损坏分区表,先跳过扩容直接启动原始镜像:

  1. 重新解压镜像(避免之前解压出错):
    unxz -v downloaded_file_name.img.xz > ubunturv.img
    
  2. 用原始镜像执行启动命令,若能正常启动,再重新进行扩容并修复文件系统:
    # 挂载镜像到loop设备
    sudo losetup -fP ubunturv.img
    # 假设loop设备为/dev/loop0,查看分区
    sudo fdisk -l /dev/loop0
    # 扩展根分区(通常是第2个分区)
    sudo parted /dev/loop0 resizepart 2 100%
    # 检查并修复文件系统
    sudo e2fsck -f /dev/loop0p2
    # 扩容文件系统
    sudo resize2fs /dev/loop0p2
    # 卸载loop设备
    sudo losetup -d /dev/loop0
    

4. 更新QEMU到最新版本

旧版QEMU对RISC-V EFI的支持存在缺陷,执行更新:

sudo apt update && sudo apt upgrade qemu-system-riscv64 u-boot-qemu opensbi

5. 简化启动命令,排除非必要组件干扰

日志中的EFI_RNG_PROTOCOL unavailable虽非致命错误,但可暂时移除RNG相关参数,简化启动流程:

qemu-system-riscv64 -machine virt -cpu rv64gc -m 2G \
-device virtio-blk-device,drive=hd \
-drive file=ubunturv.img,if=none,id=hd \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22 \
-nographic

内容的提问来源于stack exchange,提问作者Glitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:43:19