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. 验证镜像完整性与扩容操作
扩容操作可能损坏分区表,先跳过扩容直接启动原始镜像:
- 重新解压镜像(避免之前解压出错):
unxz -v downloaded_file_name.img.xz > ubunturv.img - 用原始镜像执行启动命令,若能正常启动,再重新进行扩容并修复文件系统:
# 挂载镜像到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
相关产品推荐
相关产品推荐

