[syslinux] [ipxe-devel] sanbooting FreeBSD ISO under UEFI

Shao Miller
2017-01-23T15:12:02Z

On 1/23/2017 09:17, Rick Miller via Syslinux wrote:
> Hi all,
>
> 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).
>
> 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:
>
> # pwd
> /ipxe/src
> # make bin-x86_64-efi/ipxe.efi
>
> produces the following error:
>
>    [AR] bin-x86_64-efi/blib.a
> ar: creating bin-x86_64-efi/blib.a
>    [HOSTCC] util/elf2efi64
>    [VERSION] bin-x86_64-efi/version.ipxe.efi.o
>    [LD] bin-x86_64-efi/ipxe.efi.tmp
> bin-x86_64-efi/blib.a(librm.o): In function `pm_esp':
> (.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)
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.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)
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.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)
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.text16.real_to_prot+0x22): relocation truncated to fit: R_X86_64_16
> against `.bss16.rm_virt_addrs'
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.text16.real_to_prot+0x2e): relocation truncated to fit: R_X86_64_16
> against `.bss16.rm_virt_addrs'
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.text16.real_to_prot+0x33): relocation truncated to fit: R_X86_64_16
> against `.bss16.rm_virt_addrs'
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.text16.real_to_prot+0x39): relocation truncated to fit: R_X86_64_16
> against `.data16.gdt'
> bin-x86_64-efi/blib.a(librm.o): In function `real_to_prot':
> (.text16.real_to_prot+0x58): relocation truncated to fit: R_X86_64_32
> against `.text.real_to_prot'
> bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':
> (.text.real_to_prot+0x10): relocation truncated to fit: R_X86_64_32 against
> `.data.pm_esp'
> bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':
> (.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)
> bin-x86_64-efi/blib.a(librm.o): In function `r2p_pmode':
> (.text.real_to_prot+0x1f): additional relocation overflows omitted from the
> output
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
> (.text16.data+0x26): undefined reference to `_data16_memsz'
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
> (.text16.data+0x2e): undefined reference to `_data16_memsz'
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
> (.text16.data+0x36): undefined reference to `_text16_memsz'
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxe_segments':
> (.text16.data+0x3e): undefined reference to `_text16_memsz'
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':
> (.text16.data+0x76): undefined reference to `_data16_memsz'
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':
> (.text16.data+0x82): undefined reference to `_data16_memsz'
> bin-x86_64-efi/blib.a(pxe_entry.o): In function `pxenv':
> (.text16.data+0x86): undefined reference to `_text16_memsz'
> make: *** [bin-x86_64-efi/ipxe.efi.tmp] Error 1
> rm bin-x86_64-efi/version.ipxe.efi.o
>
> 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?
>
>
> [1]http://ipxe.org/efi/vision
> [2]https://git.ipxe.org/ipxe.git/blob/HEAD:/src/config/general.h
>

Good day, Rick.

I'll try to "move" the discussion over to the iPXE mailing-list.
:) You
might consider joining that list:
https://lists.ipxe.org/mailman/listinfo/ipxe-devel

The following forum-post might be related:
http://forum.ipxe.org/showthread.php?tid=6896&pid=9117#pid9117
--
Shao Miller
Synthetel Corporation
W: https://www.synthetel.com