On Tue, May 11, 2010 at 03:47:40PM +0300, Gleb Natapov wrote:
On Tue, May 11, 2010 at 08:45:29AM -0400, Kevin O'Connor wrote:
On Tue, May 11, 2010 at 10:04:25AM +0100, Stefan Hajnoczi wrote:
From what I can tell SeaBIOS is reading CMOS_BIOS_BOOTFLAG1 and CMOS_BIOS_BOOTFLAG2 from non-volatile memory. The values index into bev[], which contains IPL entries (the drives).
Is the order of bev[] entries well-defined? Is there a way for QEMU command-line to know that the first virtio-blk device corresponds to x and the IDE CD-ROM corresponds to y?
SeaBIOS arranges for bev[0] = floppy, bev[1] = hd, bev[2] = cdrom, and bev[3] to be the first network card - it does this so that the boot order can be read from qemu. However, it's a pain to force this order.
What if there are more then one disk?
It's possible to boot from the A drive (floppy) or the C drive (hd). There's no standard way to boot from the D drive. So, when booting from the second hard drive, SeaBIOS arranges for that drive to be mapped as the C drive.
The boot order (eg, floppy, hd, cdroms, network cards) is determined by the BEV (Boot Execution Vector) list. The harddrive registration order (eg, C, D, E) is determined by the BCV (Boot Connection Vector) list.
When one selects a hard drive in SeaBIOS' boot menu, SeaBIOS actually does two things - it makes hd booting the first entry in the BEV list and it makes the selected hd the first entry in the BCV list.
It's a mess - but that's what the BIOS Boot Specification (BBS) defines. Both option roms and bootloaders depend on this behavior.
-Kevin