Re: [Etherboot-discuss] Hook INT18 for IBM servers?
Brought to you by:
marty_connor,
stefanhajnoczi
From: Jarrod J. <jar...@gm...> - 2009-08-25 23:04:59
|
IBM BIOS can rehook INT19 to prevent gPXE from jumping in front, but without hooking anything, I don't see a way to make gPXE actually boot (i.e. the BEV never gets called by IBM BIOS). If I make gPXE hook INT18, then it certainly does proceed in the expected order, but I can't get past the gPXE boot device without looping to the first network interface (if storing and calling the original INT18 vector) or hanging (various attempts to ret/iret out of the INT18 handler). Glenn Brown at Myricom managed to get Etherboot to work like this, but I can't figure it out for gPXE (maybe I'm not ensuring the stack is restored or some register value is right when I iret, or maybe I just am out of my depth generally). My understanding of how IBM BIOS works: -It executes the PCI option rom -If option rom hooks int18, it saves that int18 vector and reinstates its own -When 'network boot' option is reached, it invokes its INT18 handler -That handler then, in order, invokes each INT18 handler -If an INT18 handler wants to yield to the next device, it achieves it in IBM BIOS by iret to get back in the correct place to IBM INT18 handler. Presumably, the stack and possibly other registers are expected to be put back the way they were when the option rom started execution. I'm a little outside my general scope (firmware development is something I personally lack experience in), but I'll do what I can to help as possible. On Tue, Aug 25, 2009 at 1:23 PM, Michael Brown<mb...@fe...> wrote: > On Monday 24 August 2009 19:13:43 Jarrod Johnson wrote: >> In short, the GIT change did allow gPXE to detect PnP capability, but >> INT19 is still detected/used, and I'm pretty sure that is an accurate >> assessment of IBM BIOS capabilities (PnP, but not BBS compliant). > > Thanks for testing this. I was waiting for an opportunity to get hold of an > IBM to test against. > > I believe that most IBM BIOSes usually have some form of "recapture INT 19" > option. If you use this, you should find that the BIOS overwrites the INT 19 > value written by gPXE, which will prevent gPXE interfering with the boot > process. You *should* then be able to select gPXE via whatever > non-BBS-compliant boot device selection mechanism the BIOS provides. > > This is based only partly on memory; I may be wrong on some of the details. > > Michael > |