cloud-hypervisor / rust-hypervisor-firmware

Apache License 2.0
581 stars 53 forks source link

Unable to boot with systemd-boot #333

Open retrage opened 1 month ago

retrage commented 1 month ago

I'm trying to add Ubuntu 24.04 to the integration test targets, but the guest fails to find the rootfs:

[    0.174931] /dev/root: Can't open blockdev
[    0.175095] VFS: Cannot open root device "LABEL=cloudimg-rootfs" or unknown-block(0,0): error -6

Ubuntu 24.04 uses systemd-boot, which sets up the rootfs information at the startup. It installs some EFI protocols during the boot process, but the current RHF implementation does not support the operations. The boot log says it failed to install protocols:

install_multiple_protocol_interfaces: 4006c0c1-fcb3-403e-996d-4a6c8724e06d
error: failed to install protocols.

To fix this issue, RHF needs to support EFI protocol installation operations.

Working branch: https://github.com/retrage/rust-hypervisor-firmware/tree/ubuntu-2404-integration-tests

retrage commented 1 month ago

It also needs InstallMultipleProtocolInterfaces(), which has variadic arguments. Recent nightly Rust has varargs support for "efiapi", but the pinned version of Rust is too old.

rbradford commented 1 month ago

To fix this issue, RHF needs to support EFI protocol installation operations.

I think this might also be needed for the RISC-V support for the a Linux kernel loading protocol.