本教程给出了使用 OpenSBI 和 EDK II 在 QEMU 中启动 Ubuntu 24.04.1 的基本流程。
请读者在其主机上安装必要的软件来尝试本教程。本教程是在 Arch Linux 上开发的,建议读者使用 x86_64 平台上的 Linux 环境按照本教程进行尝试。
本教程使用软件版本如下:
软件 | 版本 |
---|---|
riscv64-linux-gnu-gcc | 14.2.0 |
qemu-system-riscv64 | 9.2.0 |
OpenSBI | 1.6 |
EDK II | stable202411 |
创建工作目录并进入该目录
$ mkdir workshop && cd workshop
$ git clone -b v1.6 https://github.com/riscv/opensbi.git
$ git clone -b edk2-stable202411 --recurse-submodule [email protected]:tianocore/edk2.git
下载链接:Ubuntu 24.04.1
$ wget https://cdimage.ubuntu.com/releases/24.04.1/release/ubuntu-24.04.1-preinstalled-server-riscv64.img.xz
$ xz -d ubuntu-24.04.1-preinstalled-server-riscv64.img.xz
ubuntu
is ubuntu
.sudo
更改 root 密码。设置环境变量
$ export WORKSPACE=`pwd`
$ export GCC5_RISCV64_PREFIX=riscv64-linux-gnu-
$ export PACKAGES_PATH=$WORKSPACE/edk2
$ export EDK_TOOLS_PATH=$WORKSPACE/edk2/BaseTools
$ source edk2/edksetup.sh --reconfig
编译 BaseTools
$ make -C edk2/BaseTools
编译 RiscVVirtQemu
$ source edk2/edksetup.sh BaseTools
$ build -a RISCV64 --buildtarget RELEASE -p OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc -t GCC5
$ make -C opensbi \
-j $(nproc) \
CROSS_COMPILE=riscv64-linux-gnu- \
PLATFORM=generic
将 RISCV_VIRT_CODE.fd 和 RISCV_VIRT_VARS.fd 填充至 32M,以适应 RISC-V QEMU pflash devices 的需求
$ truncate -s 32M Build/RiscVVirtQemu/RELEASE_GCC5/FV/RISCV_VIRT_CODE.fd
$ truncate -s 32M Build/RiscVVirtQemu/RELEASE_GCC5/FV/RISCV_VIRT_VARS.fd
启动 qemu-system-riscv64
$ qemu-system-riscv64 \
-M virt,pflash0=pflash0,pflash1=pflash1,acpi=off \
-m 4096 -smp 2 -nographic \
-bios opensbi/build/platform/generic/firmware/fw_dynamic.bin \
-blockdev node-name=pflash0,driver=file,read-only=on,filename=Build/RiscVVirtQemu/RELEASE_GCC5/FV/RISCV_VIRT_CODE.fd \
-blockdev node-name=pflash1,driver=file,filename=Build/RiscVVirtQemu/RELEASE_GCC5/FV/RISCV_VIRT_VARS.fd \
-device virtio-blk-device,drive=hd0 \
-drive file=ubuntu-24.04.1-preinstalled-server-riscv64.img,format=raw,id=hd0,if=none