From: Simon Glass <simon.glass@canonical.com>
The build-qemu script accepts --arch riscv via build_helper's argument
parser but raises ValueError since no riscv block exists.
Add RISC-V support with:
- Board names qemu-riscv64/qemu-riscv32 (and _spl variants)
- QEMU binary selection (qemu-system-riscv64/riscv32)
- Machine type 'virt' with TCG acceleration
- Tianocore firmware path (RISCV_VIRT_CODE.fd)
- virtio-gpu-pci display setup (shared with arm, since the virt
machine has no native VGA)
Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---
scripts/build-qemu | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
@@ -9,7 +9,7 @@ It assumes that
board config
- your OS images are in ${imagedir}/{distroname}/
-So far the script supports only ARM and x86
+So far the script supports ARM, RISC-V and x86
"""
import argparse
@@ -122,6 +122,8 @@ class BuildQemu:
elif args.use_tianocore:
if args.arch == 'arm':
bios_override = Path(self.tiano, 'OVMF-pure-efi.aarch64.fd.64m')
+ elif args.arch == 'riscv':
+ bios_override = Path(self.tiano, 'RISCV_VIRT_CODE.fd')
else:
bios_override = Path(self.tiano, 'OVMF-pure-efi.x64.fd')
if not bios_override.exists():
@@ -156,6 +158,23 @@ class BuildQemu:
self.board = 'qemu_arm64'
self.helper.qemu = 'qemu-system-aarch64'
self.qemu_extra.extend(['-cpu', 'cortex-a57'])
+ elif args.arch == 'riscv':
+ if args.xpl:
+ self.board = 'qemu-riscv64_spl'
+ default_bios = 'u-boot.bin'
+ else:
+ self.board = 'qemu-riscv64'
+ default_bios = 'u-boot.bin'
+ self.helper.qemu = 'qemu-system-riscv64'
+ self.qemu_extra.extend(['-machine', 'virt'])
+ if not args.kvm:
+ self.qemu_extra.extend(['-accel', 'tcg'])
+ if self.helper.bitness == 32:
+ if args.xpl:
+ self.board = 'qemu-riscv32_spl'
+ else:
+ self.board = 'qemu-riscv32'
+ self.helper.qemu = 'qemu-system-riscv32'
elif args.arch == 'x86':
self.board = 'qemu-x86'
default_bios = 'u-boot.rom'
@@ -291,7 +310,7 @@ class BuildQemu:
# SCT usually runs headlessly
if self.args.serial_only or self.args.sct_seq:
qemu_cmd.extend(['-display', 'none'])
- elif self.args.arch == 'arm':
+ elif self.args.arch in ('arm', 'riscv'):
qemu_cmd.extend(['-device', 'virtio-gpu-pci'])
qemu_cmd.extend(['-device', 'qemu-xhci', '-device', 'usb-kbd',
'-device', 'usb-tablet', '-device', 'usb-mouse'])