[ipxe-devel] Regression with commit fc87adb46c1395b09302085e9d15fcd8ab3c31fe - [efi] Expose downloaded images via EFI_SIMPLE_FILE_SYSTEM_PROTOCOL on IMAGE_EFI

Michael Brown mbrown at fensystems.co.uk
Tue Apr 9 18:03:51 UTC 2013


On 09/04/13 15:40, Joshua C. wrote:
> I didn't know this. Up to know I've been using a modified version of
> ipxe that gives me a shell after initilizing the devices (just a
> modified main() function),

It would be simpler to embed a script such as:

   #!ipxe
   shell

That would avoid any need for modifying core/main.c.

> so that I can load and boot any image over a
> network. I've always had all image types enabled in general.h and never
> had an issues when starting ipxe. Right now my system just reboots
> regardless of the not supported IMAGE_EFI. From my point of view this is
> a regression, because befor this commit ipxe started without glitches
> regardless if an image is supported or not. So even if the image is not
> supported then ipxe should gracefully continue initilization and not
> reboot the mashine....

You have enabled an image type which cannot possibly be supported on the 
target platform.  Do not do that.

It's not a regression; the error is in your modifications in general.h. 
  Prior to this commit, this error in your local modifications to 
general.h was not directly visible to you.

Any "fix" to this would be to detect the impossible option and 
deliberately fail the build.  I don't propose to do this, since there 
are several possible build options you could apply which would generate 
impossible code (e.g. explicitly enabling CONSOLE_PCBIOS when building a 
.efirom).

Just remove your erroneous "#define IMAGE_EFI" from your local 
modifications to general.h, and all will be well.

> From the shell I can point to and download any efi image over the
> network, but why it cannot boot the system?

For pretty much exactly the same reason that you can't take a Linux ELF 
binary and run it under Windows.  PC BIOS and EFI are fundamentally 
incompatible platforms.  Binaries for one WILL NOT run on the other.


You can build a PC BIOS version of iPXE (e.g. bin/rtl8139.rom).  This 
will work under a PC BIOS, and will be able to run PXE, bzImage, 
Multiboot, and various other (non-EFI) binaries.

You can build an EFI version of iPXE (e.g. 
bin-x86_64-efi/rtl8139.efirom).  This will work under EFI, and will be 
able to run EFI binaries.

Michael



More information about the ipxe-devel mailing list