Re: bhyve: bootindex= not working?

From: Roman Bogorodskiy <novel_at_freebsd.org>
Date: Mon, 26 May 2025 14:22:50 UTC
  Dave Cottlehuber wrote:

> On Mon, 26 May 2025, at 06:01, Corvin Köhne wrote:
> 
> > Hi Roman,
> >
> > EDKII honors bootindex since 202408 [1]. So, our latest EDKII port, based on
> > 202308, is too old.
> 
> Thanks Corvin
> 
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285554 has a patch for this, bringing it up to 202502.
> 
> Roman can you let us know if this works for you?
> 
> A+
> Dave

I've updated the port to 202505 using patch from that PR. At the first
glance, nothing's changed.

Command I run:

bhyve -c 2 -m 4096 -A -I -u -H -P \
-s 0:0,hostbridge \
-l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd,/var/lib/libvirt/bhyve/nvram/freebsd_VARS.fd,fwcfg=qemu \
-s 2:0,xhci,tablet -s 1:0,lpc \
-s 3:0,ahci,hd:/data/img/freebsd.img,bootindex=1,cd:/data/isos/FreeBSD-14.2-RELEASE-amd64-disc1.iso,bootindex=2 \
-s 4:0,virtio-net,tap4,mac=52:54:00:47:f4:dc -s 5:0,fbuf,tcp=127.0.0.1:5920 \
-l com1,/dev/nmdm5A \
freebsd

It still boots from the "cd" device, not from "hd" as expected. Before
running the VM, I've re-created
/var/lib/libvirt/bhyve/nvram/freebsd_VARS.fd from the fresh copy.

Just to make sure:

$ pkg which /usr/local/share/uefi-firmware/BHYVE_UEFI.fd
/usr/local/share/uefi-firmware/BHYVE_UEFI.fd was installed by package edk2-bhyve-g202505
$

That's what I see in the VM's console log:

BdsDxe: loading Boot0001 "UEFI BHYVE SATA DVD ROM BHYVE-6057-BC56-DB6C" from PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x1,0xFFFF,0x0)                                                                                                                                             
BdsDxe: starting Boot0001 "UEFI BHYVE SATA DVD ROM BHYVE-6057-BC56-DB6C" from PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x1,0xFFFF,0x0)                                                                                                                                            
Consoles: EFI console                                                                                                                                                                                                                                                   
    Reading loader env vars from /efi/freebsd/loader.env                                                                                                                                                                                                                
Setting currdev to cd1:                                                                                                                                                                                                                                                 
FreeBSD/amd64 EFI loader, Revision 3.0                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                        
   Command line arguments: loader.efi                                                                                                                                                                                                                                   
   Image base: 0xbe252000                                                                                                                                                                                                                                               
   EFI version: 2.70                                                                                                                                                                                                                                                    
   EFI Firmware: BHYVE (rev 1.00)                                                                                                                                                                                                                                       
   Console: efi (0x20001000)                                                                                                                                                                                                                                            
   Load Path: \EFI\BOOT\BOOTX64.EFI                                                                                                                                                                                                                                     
   Load Device: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x1,0xFFFF,0x0)/CDROM(0x1)                                                                                                                                                                                               
   BootCurrent: 0001                                                                                                                                                                                                                                                    
   BootOrder: 0000 0001[*] 0002                                                                                                                                                                                                                                         
   BootInfo Path: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x1,0xFFFF,0x0)                                                                                                                                                                                                        
Ignoring Boot0001: Only one DP found                                                                                                                                                                                                                                    
Trying ESP: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x1,0xFFFF,0x0)/CDROM(0x1)                                                                                                                                                                                                   
Setting currdev to cd1:                                                                                                                                                                                                                                                 
Trying: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x1,0xFFFF,0x0)/CDROM(0x0)                                                                                                                                                                                                       
Setting currdev to cd0:                                                                                                                                                                                                                                                 
Loading /boot/defaults/loader.conf        

Again, when I run "efibootmgr -o 0002", then I see:

BdsDxe: loading Boot0002 "UEFI BHYVE SATA DISK BHYVE-412B-5D46-BC34" from PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)
BdsDxe: starting Boot0002 "UEFI BHYVE SATA DISK BHYVE-412B-5D46-BC34" from PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)
Consoles: EFI console  
    Reading loader env vars from /efi/freebsd/loader.env
Setting currdev to disk0p1:
FreeBSD/amd64 EFI loader, Revision 3.0

   Command line arguments: loader.efi
   Image base: 0xbe252000
   EFI version: 2.70
   EFI Firmware: BHYVE (rev 1.00)
   Console: efi (0x20001000)
   Load Path: \EFI\BOOT\BOOTX64.EFI
   Load Device: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)/HD(1,GPT,88BF7344-316E-11F0-986D-87D32D3EC81F)
   BootCurrent: 0002
   BootOrder: 0002[*] 0000 0001
   BootInfo Path: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)
Ignoring Boot0002: Only one DP found
Trying ESP: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)/HD(1,GPT,88BF7344-316E-11F0-986D-87D32D3EC81F)
Setting currdev to disk0p1:
Trying: PciRoot(0x0)/Pci(0x3,0x0)/Sata(0x0,0xFFFF,0x0)/HD(2,GPT,88BFF6FB-316E-11F0-986D-87D32D3EC81F)
Setting currdev to disk0p2:
Loading /boot/defaults/loader.conf

Thanks,
Roman