[ipxe-devel] EFI_PXE_BASE_CODE_PROTOCOL

Michael Brown mcb30 at ipxe.org
Thu Sep 10 15:29:38 UTC 2015


On 10/09/15 16:20, Gerd Hoffmann wrote:
>> Thanks.  From my experiments, it seems that GRUB is using the hardcoded
>> path /efi/boot/grub.cfg to locate the configuration file, regardless of
>> where grub.efi was loaded from.
>
> Hmm, probably depends on how you are building it.  There are also tools
> like grub2-mknetdir and grub2-mkstandalone.  Pretty confusing :(
>
> I'm using the binary shipped with RHEL.  The centos one should show the
> same behavior.
>
> https://ftp.fau.de/centos/7.1.1503/os/x86_64/EFI/BOOT/

That grubx64.efi binary makes no attempt to even look for an 
EFI_PXE_BASE_CODE_PROTOCOL.  Here's the complete log of calls that it makes:

OpenProtocol ( 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, 
LoadedImage, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f1aac00 ) -> 0x3e90349b
LocateProtocol ( ConsoleControl, 0x0 ) = NOT_FOUND ( 0x0 ) -> 0x3e90344b
LocateProtocol ( ConsoleControl, 0x0 ) = NOT_FOUND ( 0x0 ) -> 0x3e90344b
OpenProtocol ( ConIn, SimpleTextInputEx, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3ed3ffc0 ) -> 0x3e90349b
LocateHandle ( ByProtocol, BlockIo, 0x0, 64 ) = 0 ( 32, { 
PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0), 
PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x0), 
PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x1), 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1) } ) -> 0x3e903478
OpenProtocol ( PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0), DevicePath, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f398f98 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0), BlockIo, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f3980a8 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x0), DevicePath, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f372998 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x0), BlockIo, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f35be68 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x1), DevicePath, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f3726d8 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x1,0x0)/Floppy(0x1), BlockIo, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f35c128 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1), 
DevicePath, PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, 
<NULL>, G ) = 0 ( 0x3ea75b48 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1), BlockIo, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3ea72e50 ) -> 0x3e90349b
LocateProtocol ( UgaDraw, 0x0 ) = NOT_FOUND ( 0x0 ) -> 0x3e90344b
LocateHandle ( ByProtocol, GraphicsOutput, 0x0, 64 ) = 0 ( 16, { 
PciRoot(0x0)/Pci(0x2,0x0)/AcpiAdr(0x80010100), ConOut } ) -> 0x3e903478
OpenProtocol ( PciRoot(0x0)/Pci(0x2,0x0)/AcpiAdr(0x80010100), 
GraphicsOutput, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f3750b8 ) -> 0x3e90349b
LocateHandle ( ByProtocol, SimpleNetwork, 0x0, 64 ) = 0 ( 8, { 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1) } ) -> 0x3e903478
OpenProtocol ( PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1), 
SimpleNetwork, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3ea755d0 ) -> 0x3e90349b
OpenProtocol ( 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, 
LoadedImage, 
PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, <NULL>, G ) 
= 0 ( 0x3f1aac00 ) -> 0x3e90349b
OpenProtocol ( PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1), 
DevicePath, PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/grubx64.efi, 
<NULL>, G ) = 0 ( 0x3ea75b48 ) -> 0x3e90349b

It's looking for and successfully opening our 
EFI_SIMPLE_NETWORK_PROTOCOL and it is able to obtain an IP address using 
"net_bootp".  It doesn't look anywhere for EFI_PXE_BASE_CODE_PROTOCOL.

Do you have a set of instructions (starting from "git clone 
git://git.savannah.gnu.org/grub.git") which will allow me to rebuild 
that grubx64.efi binary from the source?

Thanks,

Michael



More information about the ipxe-devel mailing list