<div dir="ltr"><div>Hi all,</div><div><br></div><div>I currently use iPXE to load memdisk and, subsequently, a FreeBSD disk image to perform an OS installation to disk.  This works great in BIOS, but upcoming requirements make UEFI a prerequisite.  Because memdisk is not UEFI-aware, new UEFI-aware media is necessary.  The current plan is to integrate the installation scripts (currently in the hard drive image) into a bootable FreeBSD ISO (something I’ve previous experience with) and instead of loading it via memdisk, load it directly from iPXE using `sanboot` (or similar).</div><div><br></div><div>Unfortunately, I have been unable to get iPXE to sanboot an ISO.  It errors citing “Operation not permitted”.  The current working theory is that the necessary features aren’t enabled in the current UEFI-aware iPXE program.  This has lead me to the general.h[2] header file where many of the image types are disabled, including IMAGE_PXE, which seems to be the image type necessary for PXE booting.  However, uncommenting and building the resulting code via:</div><div><br></div><div># pwd</div><div>/ipxe/src</div><div># make bin-x86_64-efi/ipxe.efi</div><div><br></div><div>produces the following error:</div><div><br></div><div>  [AR] bin-x86_64-efi/blib.a</div><div>ar: creating bin-x86_64-efi/blib.a</div><div>  [HOSTCC] util/elf2efi64</div><div>  [VERSION] bin-x86_64-efi/version.ipxe.efi.o</div><div>  [LD] bin-x86_64-efi/ipxe.efi.tmp</div><div>bin-x86_64-efi/blib.a(librm.o): In function `pm_esp':</div><div>(.data.pm_esp+0x0): relocation truncated to fit: R_X86_64_32 against symbol `_estack' defined in .stack section in bin-x86_64-efi/blib.a(stack.o)</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x1): relocation truncated to fit: R_X86_64_PC16 against symbol `enable_a20' defined in .text16.early section in bin-x86_64-efi/blib.a(liba20.o)</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x8): relocation truncated to fit: R_X86_64_16 against symbol `rm_ds' defined in .text16.data.rm_ds section in bin-x86_64-efi/blib.a(librm.o)</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x22): relocation truncated to fit: R_X86_64_16 against `.bss16.rm_virt_addrs'</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x2e): relocation truncated to fit: R_X86_64_16 against `.bss16.rm_virt_addrs'</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x33): relocation truncated to fit: R_X86_64_16 against `.bss16.rm_virt_addrs'</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x39): relocation truncated to fit: R_X86_64_16 against `.data16.gdt'</div><div>bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':</div><div>(.text16.real_to_prot+0x58): relocation truncated to fit: R_X86_64_32 against `.text.real_to_prot'</div><div>bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':</div><div>(.text.real_to_prot+0x10): relocation truncated to fit: R_X86_64_32 against `.data.pm_esp'</div><div>bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':</div><div>(.text.real_to_prot+0x17): relocation truncated to fit: R_X86_64_32 against symbol `idtr32' defined in .data.idtr32 section in bin-x86_64-efi/blib.a(librm_mgmt.o)</div><div>bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':</div><div>(.text.real_to_prot+0x1f): additional relocation overflows omitted from the output</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':</div><div>(.text16.data+0x26): undefined reference to `_data16_memsz'</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':</div><div>(.text16.data+0x2e): undefined reference to `_data16_memsz'</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':</div><div>(.text16.data+0x36): undefined reference to `_text16_memsz'</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':</div><div>(.text16.data+0x3e): undefined reference to `_text16_memsz'</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':</div><div>(.text16.data+0x76): undefined reference to `_data16_memsz'</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':</div><div>(.text16.data+0x82): undefined reference to `_data16_memsz'</div><div>bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':</div><div>(.text16.data+0x86): undefined reference to `_text16_memsz'</div><div>make: *** [bin-x86_64-efi/ipxe.efi.tmp] Error 1</div><div>rm bin-x86_64-efi/version.ipxe.efi.o</div><div><br></div><div>Are there additional options, such as PXE_STACK, that are required when booting a FreeBSD ISO from iPXE under UEFI, but perhaps disabled that might mitigate this error or perhaps this feature is unavailable under UEFI?</div><div><br></div><div><br></div><div>[1] <a href="http://ipxe.org/efi/vision">http://ipxe.org/efi/vision</a></div><div>[2] <a href="https://git.ipxe.org/ipxe.git/blob/HEAD:/src/config/general.h">https://git.ipxe.org/ipxe.git/blob/HEAD:/src/config/general.h</a></div><div><br></div>-- <br><div class="gmail_signature">Take care<br>Rick Miller</div>
</div>