[ipxe-devel] Using iPXE with UNDI driver

Lantz, Philip philip.lantz at intel.com
Fri Jul 1 18:23:29 UTC 2011


Michael Brown wrote:
> On Friday 01 Jul 2011 05:06:05 Philip Lantz wrote:
> > How does iPXE detect a UNDI driver? I have written a UNDI driver for a
> > experimental network device. I load my driver from the EFI shell and then
> > run ipxe.efi, but iPXE doesn't find my device. (I am using the binary found
> > in bin-i386-efi\ipxe.efi after having done 'make everything'.) I am
> > completely comfortable with poking through the iPXE source code and/or
> > running it in a debugger to figure out what it is (or is not) doing, if
> >  only I knew what it is supposed to be doing.
>
> Under EFI, iPXE can either use a built-in iPXE driver (i.e. something under
> drivers/net), or use an existing EFI network device via an EFI SNP interface.
> Your driver needs to provide an EFI SNP interface, or rely upon components
> that consume an EFI UNDI interface and provide an EFI SNP interface.

I suspected this -- thanks for confirming it -- and I have tried loading an SNP interface on top of my UNDI driver before running iPXE, but iPXE still doesn't find it. Do you have any more suggestions for why this might happen? Can you point me toward the code in iPXE that is supposed to locate the SNP interface and connect to it?

After I got some debugging output enabled, iPXE prints
     EFIPCI DRIVER_SUPPORTED 0x3de92f90 (0x0)
     EFIPCI device 0x3de92f90 is not a PCI device
In fact, 0x3de92f90 isn't even a valid handle; as far as I know, EFI handles are small integers, not memory addresses.

This message is displayed right before iPXE exits, after it has given up and said "No more network devices".

Do you have any thoughts about who would be calling efipci_supported with a bogus device handle?

> > Also, the web site tells how to specify the DEBUG option at build time, but
> > it doesn't give any hint how to figure out what names are possible.

> It's a list of object names, which is (in almost all cases) equivalent to a
> list of source files.  If you want to enable DBG() statements in foo.c, use
> DEBUG=foo.

I finally figured out that I was getting errors because I was using 'make everything' and some builds don't include the components I wanted to debug. I guess it was too late last night.

Thanks again for your help.

Philip



More information about the ipxe-devel mailing list