在QEMU上运行RISCV平台Linux
QEMU支持如下RISC-V平台:
- Spike是官方的RISC-V模拟平台。
- SiFive的E和U系列。
- Virt是通用的虚拟化RISC-V平台,支持VirtIO设备。
$ qemu-system-riscv64 -M ?
Supported machines are:
none empty machine
sifive_e RISC-V Board compatible with SiFive E SDK
sifive_u RISC-V Board compatible with SiFive U SDK
spike RISC-V Spike Board (default)
spike_v1.10 RISC-V Spike Board (Privileged ISA v1.10)
spike_v1.9.1 RISC-V Spike Board (Privileged ISA v1.9.1)
virt RISC-V VirtIO board
QEMU RISC-V模拟了如下硬件特性:
- HTIF Console (Host Target Interface) for Spike emulation
- SiFive CLINT (Core Local Interruptor) for Timer interrupts and IPIs
- SiFive PLIC (Platform Level Interrupt Controller) for multi-core interrupts
- SiFive Test (Test Finisher) for exiting simulations in tests
- SiFive UART for console on the SiFive U series and E series devices
- SiFive PRCI, AON, PWM, QSPI mocks for SiFive E series devices
- VirtIO MMIO for network and block device support
- Generic 16550A UART emulation on the ‘virt’ board
- SMP and MTTCG support for multi-core emulation
编译Linux内核:
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- defconfig
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- menuconfig
make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- Image -j8
获取rootfs:busybox是一个用busybox制作的微型rootfs。
https://github.com/michaeljclark/busybear-linux/releases
安装opensbi固件:
sudo apt install opensbi
在qemu中用opensbi固件启动Linux内核:
qemu-system-riscv64 -nographic -machine virt -serial mon:stdio \
-bios /usr/lib/riscv64-linux-gnu/opensbi/qemu/virt/fw_jump.elf \
-kernel arch/riscv/boot/Image -append "root=/dev/vda ro console=ttyS0" \
-drive file=../images/busybear.img,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0