On Thu, Jul 10, 2008 at 08:39:01AM -0600, Jordan Crouse wrote:
On 09/07/08 21:40 -0400, Kevin O'Connor wrote:
SeaBIOS has to initialize the 8086 real mode irq vectors on startup. It does overwrite the 0x10 handler that the vga bios may have installed. I don't see anyway around this - the contents of the irq table could be junk and not initializing it would lead to mysterious crashes.
What if coreboot ensured that it wasn't junk before you saw it?
Well, sure, we could do that. However, that leads to multiple software components needing to know about the quirky 8086 bios requirements. I'd think we'd be better off moving that all into one place. Coreboot could start with a stripped down bios init stage and seabios could follow up with the full init, but I suspect that various option roms would want more and more parts of the full init present..
I'm concerned that in a payload chooser you'll want to have graphical output to allow the user to choose SeaBIOS. If you can't run the VGA BIOS first ... that seems like a problem.
This was something that Stefan brought up. He suggested having SeaBIOS return to coreboot and then let coreboot select the payload. However, I'm not convinced that this is the best way to go. Making sure that SeaBIOS and coreboot don't stomp on each other could be difficult.
Another possibility is to teach SeaBIOS how to launch payloads from flash.
We could also make SeaBIOS a special "must absolutely, positively run first" payload in the chooser so that it executes before we try to access the display. I am convinced we can find a reasonable solution to the problem.
I totally agree that this is solvable.
It's worth noting that the init stage and boot stage of seabios is all 32bit gcc compiled C code. (There is as much 32bit code as there is 16bit code in seabios today.) So, whether the boot menu is in seabios, coreboot, or a chooser - I don't think it makes a tremendous difference.
-Kevin