Hi, Conor.
On Fri, May 26, 2023 at 06:25:18PM +0800, Zhangjin Wu wrote:
On 2023-05-25 01:52:29+0800, Zhangjin Wu wrote:
riscv qemu has a builtin bios (opensbi), but it may not match the latest kernel and some old versions may hang during boot, let's allow user pass a newer version to qemu via the -bios option.
Nitpick:
This seems very specific and hopefully only necessary temporarily.
RISC-V is such a new ISA and the Spec (especially the SBI) changes very frequently ;-)
Huh. Could you please expand on which versions of QEMU will hang while booting an upstream or stable kernel? Which kernels would be good to know too.
As the cover letter listed (in the Environment section), the softwares we used are:
// higher qemu version is better, latest version is v8.0.0+ $ qemu-system-riscv64 --version QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.18) Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
// opensbi version, higher is better, must match kernel version and qemu version // rv64: used version is 1.2, latest is 1.2 $ head -2 /labs/linux-lab/src/linux-stable/tools/testing/selftests/nolibc/run.out | tail -1 OpenSBI v1.2-116-g7919530 // rv32: used version is v0.9, latest is 1.2 $ head -2 /labs/linux-lab/src/linux-stable/tools/testing/selftests/nolibc/run.out | tail -1 OpenSBI v0.9-152-g754d511
The kernel version is the one this patchset based on (Willy's nolibc repo), it is v6.4-rc1.
qemu v4.2.1 is the one systematically installed (/usr/bin) from the qemu-system-misc package and used to test this patchset in my Ubuntu 20.04 based test docker image.
Just installed a v7.0.0 qemu from ppa:canonical-server/server-backports, there is no default opensbi, and re-checked, there is one prebuilt opensbi for rv64, but still no prebuilt opensbi for rv32.
$ sudo add-apt-repository ppa:canonical-server/server-backports $ sudo apt install qemu-system-misc
$ sudo apt install opensbi $ dpkg -S opensbi | grep -E "fw_*bin|elf" qemu-system-data: /usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf opensbi: /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.elf opensbi: /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf
$ qemu-system-riscv32 -display none -no-reboot -kernel build/riscv32/virt/linux/v6.4-rc1/arch/riscv/boot/Image -serial stdio -M virt -append "console=ttyS0 panic=-1" qemu-system-riscv32: Unable to load the RISC-V firmware "opensbi-riscv32-generic-fw_dynamic.bin"
I used the one built myself, If not want to build such opensbi manually, we can download one (1.2 currently) from qemu source code:
https://gitlab.com/qemu-project/qemu/-/blob/master/pc-bios/opensbi-riscv32-g...
Then, we can use it like this:
$ qemu-system-riscv32 -display none -no-reboot -kernel build/riscv32/virt/linux/v6.4-rc1/arch/riscv/boot/Image -serial stdio -M virt -append "console=ttyS0 panic=-1" -bios /path/to/opensbi-riscv32-generic-fw_dynamic.bin
Will append this extra info in the commit message of the coming new revision of this patch, thanks a lot.
The hang issue I mentioned may be using one of my older prebuilt version of opensbi, I can not find which one it exactly is, so, please ignore that info, will update that description too.
Btw, something not about this patch: qemu v8.0.0 seems not boot non-mmu v6.3, both sides have issues, not dig into it carefully, so, not report it yet.
Thanks, Zhangjin
Thanks, Conor.