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

如何在QEMU中搭配自定义内核运行Fedora系统?

问题:QEMU中搭配自定义平头哥C910内核启动Fedora卡顿

我需要在QEMU中运行Fedora(首个支持RISC-V的操作系统),搭配基于平头哥C910处理器构建的自定义内核做基准测试,目前遇到启动卡顿问题,具体情况如下:

已成功的两种启动场景

1. Fedora官方内核正常启动

按照官方步骤执行以下命令,可正常启动Fedora:

qemu-system-riscv64 \
-bios none \
-nographic \
-machine virt \
-smp 8 \
-m 2G \
-kernel Fedora-Developer-Rawhide-*-fw_payload-uboot-qemu-virt-smode.elf \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-device,rng=rng0 \
-device virtio-blk-device,drive=hd0 \
-drive file=Fedora-Developer-Rawhide-*.raw,format=raw,id=hd0 \
-device virtio-net-device,netdev=usernet \
-netdev user,id=usernet,hostfwd=tcp::10000-:22

2. 自定义内核单独启动(无完整OS)

用自定义内核构建文档中的命令,能启动内核但无法加载完整操作系统:

LD_LIBRARY_PATH=./host/lib ./host/csky-qemu/bin/qemu-system-riscv64 -M virt -kernel fw_jump.elf -device loader,file=Image,addr=0x80200000 -append "rootwait root=/dev/vda ro" -drive file=rootfs.ext2,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -nographic -smp 1

当前故障

将Fedora官方命令中的-kernel参数替换为自定义内核路径后,启动出现卡顿,截图如下:
启动卡顿截图

推测问题源于两种命令的QEMU参数配置差异,以下是针对性解决步骤:


解决步骤

1. 对齐内核加载逻辑

Fedora官方命令直接指定带UBoot的ELF文件作为内核,而自定义内核需要通过fw_jump.elf作为bootloader加载内核镜像,不能直接替换-kernel参数。调整命令如下:

qemu-system-riscv64 \
-nographic \
-machine virt \
-smp 8 \
-m 2G \
-kernel fw_jump.elf \
-device loader,file=./你的自定义内核Image路径,addr=0x80200000 \
-append "rootwait root=/dev/vda ro" \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-device,rng=rng0 \
-device virtio-blk-device,drive=hd0 \
-drive file=Fedora-Developer-Rawhide-*.raw,format=raw,id=hd0 \
-device virtio-net-device,netdev=usernet \
-netdev user,id=usernet,hostfwd=tcp::10000-:22

注意:若Fedora根分区不是/dev/vda,可通过fdisk -l查看raw镜像的分区表,替换为实际根分区路径(如/dev/vda3)。

2. 统一QEMU版本

自定义内核使用的是csky-qemu,而Fedora命令用的是标准QEMU,可能存在兼容性问题,尝试用csky-qemu执行调整后的命令:

LD_LIBRARY_PATH=./host/lib ./host/csky-qemu/bin/qemu-system-riscv64 \
-nographic \
-machine virt \
-smp 8 \
-m 2G \
-kernel fw_jump.elf \
-device loader,file=./你的自定义内核Image路径,addr=0x80200000 \
-append "rootwait root=/dev/vda ro" \
-object rng-random,filename=/dev/urandom,id=rng0 \
-device virtio-rng-device,rng=rng0 \
-device virtio-blk-device,drive=hd0 \
-drive file=Fedora-Developer-Rawhide-*.raw,format=raw,id=hd0 \
-device virtio-net-device,netdev=usernet \
-netdev user,id=usernet,hostfwd=tcp::10000-:22

3. 检查内核配置

确保自定义内核开启了Fedora所需的关键配置:

  • 开启virtio块设备、网络设备支持(CONFIG_VIRTIO_BLK、CONFIG_VIRTIO_NET)
  • 开启RISC-V virt平台驱动(CONFIG_RISCV_MACHINE_VIRT)
  • 开启ext4文件系统支持(CONFIG_EXT4_FS,Fedora默认使用ext4)

4. 简化参数排查

先简化命令排除干扰项,确认基础启动正常后再逐步添加参数:

  • 将smp改为1,和自定义内核单独启动时一致,排除多核兼容性问题
  • 暂时去掉RNG相关参数,减少启动负载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:10:27