On Wed, Mar 22, 2023 at 11:37:10AM -0500, Andrea Bolognani wrote: > On Wed, Mar 22, 2023 at 10:36:20AM -0300, Daniel Henrique Barboza wrote: > > I'm not sure if the OS overwrites the firmware when running bare metal. Usually > > they provide different OS images for QEMU/libvirt and bare metal systems, probably > > to account for these differences. Baking the firmware in the kernel like Fedora > > Rawhide is doing was important a few years ago when RISC-V QEMU wasn't loading > > the firmware by default, but now it's getting in the way. > > > > All this said, having a look at the recently updated Fedora for RISC-V wiki, the > > instructions for booting with libvirt and QEMU are different. libvirt [1] is using > > the '-bios none' attribute with 'virt-install' + a Fedora Rawhide image, but > > QEMU instructions [2] doesn't use '-bios none' and it's using Fedora 37. > > The libvirt instructions in that page seem to have been updated in > the Fedora 30 timeframe, whereas the QEMU instructions appear to be > current as of Fedora 37. > > > At first I don't see any particular reason of why this Fedora 37 image would work > > on QEMU and not on libvirt. So what t I'll do now is do some testings with libvirt > > and Fedora 37. If it works then this series becomes way less important. > > The libvirt instructions tell you to use > > --boot kernel=Fedora-Developer-Rawhide-*-fw_payload-uboot-qemu-virt-smode.elf > --qemu-commandline='-bios none' > > (aka -bios none -kernel foo) while the QEMU ones suggest > > -bios u/usr/share/uboot/qemu-riscv64_spl/u-boot-spl.bin > -device loader,file=u/usr/share/uboot/qemu-riscv64_spl/u-boot.itb,addr=0x80200000 > > Those are completely different approaches to booting the guest OS. > The latter is much saner IMO, because it keeps the firmware under > control of the host (as is the case for SeaBIOS/edk2) instead of > mixing the kernel and the firmware and requiring guest-specific files > to be extracted from the disk image before being able to boot. > > libvirt already provides the ability to pass arbitrary paths to -bios > via the <loader type='rom'> element, so making the first part work > should just be a matter of pointing it to the correct path. We don't > seem to have the -device loader part wired up though, so that would > need to be added. Probably as an additional attribute, in the vein of > nvram.template? The address would have to be specified as well. > > Note that the firmware descriptor format already supports u-boot as > the firmware type. So in the long run ideally you'd only need to > specify > > <os firmware='uboot'> > > and, assuming the uboot-images-riscv64 package is installed on the > host, everything should just work. I just came across this thread while trying to update the libvirt instructions on that page. Specifically I need to add these to the qemu command line: -bios /path/to/u-boot-spl.bin -device loader,file=/path/to/u-boot.itb,addr=0x80200000 Was any change made to libvirt / virt-install to make this possible? - - - For the benefit of the search engine gods, this works for now: # virt-install --import --memory 8192 -n fedora-37-riscv \ --arch riscv64 --vcpus 8 \ --disk fedora-37-riscv.qcow2,format=qcow2 \ --osinfo fedora37 \ --qemu-commandline=' -bios /path/to/u-boot-spl.bin -device loader,file=/path/to/u-boot.itb,addr=0x80200000 ' 'Course you have to disable SELinux ... Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org