[ipxe-devel] Unable to boot Linux kernel for arm64 architecture

Michael Brown mcb30 at ipxe.org
Mon Mar 20 18:27:13 UTC 2017


On 20/03/17 18:17, Andre wrote:
> it seems that Mark is right and it is indeed a firmware issue.
> I did some tests with a virtual machine in a QEMU/KVM environment which
> boots the kernel without any errors.
>
> I have attached the "snponly.efi.tmp.map" linker map.

Thank you.  According to the linker map, the error happens at 
ipv4_rx+0x108.  In my ARM64 build, this is the instruction which reads 
iphdr->dest.s_addr in the line:

   ( iphdr->dest.s_addr != INADDR_BROADCAST )

This looks very plausible for causing an error if the MMU has been 
erroneously disabled by the firmware, since the destination IP address 
is most likely unnaturally aligned.

You can add "EXTRA_CFLAGS=-mstrict-align" to your build command line. 
That will build a (much bigger and slower) iPXE binary in which all 
potentially unaligned accesses will be handled using byte loads/stores 
and shifts as needed; this should work around the buggy platform firmware.

Please also report this to Gigabyte as a bug in their UEFI firmware!

Thanks,

Michael



More information about the ipxe-devel mailing list