I'm trying to setup diskless UEFI + PXE + NFS booting for CentOS 7 on ARM. Generally, the process looks like this:

  1. Client CPU boots UEFI firmware
  2. Client UEFI's PXE firmware requests DHCP from the network
  3. Server supplies IP, TFTP server IP, PXE NBP (network bootstrap program) filename
  4. Client UEFI loads NBP from TFTP server
  5. Client UEFI executes NBP, which loads kernel image from TFTP server
  6. Client NBP executes kernel image, which mounts filesystem via NFS

Every PXE boot guide I can find eventually requires pxelinux.0, from Syslinux, as the NBP (steps 3, 4, 5). Syslinux doesn't support ARM (afaik?). With that in mind:

Can someone describe how to PXE boot an aarch64?

  • Even without edits, the original question directly followed the format suggested in the community wiki: "I have <problem-x> that I don't know how to solve. I've already tried X, Y, Z, but those programs don't work because this or that. How do I do this?" meta.superuser.com/a/5373/639139 – Dan Apr 12 '17 at 13:57
  • I think this was mistakenly closed unless your question was really different previously. I do know a lot of ARM platforms don't use UEFI but U-boot or other bootloader - typically these will load the kernel and initrd directly from an ext2 or fat32 partition and then simply transfer control to it. There are some other ARM platforms like rackmount servers that may be different. I really don't think anything other than Microsoft's Surface RT uses UEFI in ARM but I could be wrong. Anyway you need to learn/confirm what the bootloader is in the system you are trying to install this on. – LawrenceC Apr 12 '17 at 14:13
  • PXE is an Intel/x86 standard by the way - on the Guruplug, which is a U-boot based ARM board, you can have the board load a kernel and initrd from a TFTP host. But this isn't quite equivalent to PXE, because there is no BIOS or UEFI services available. – LawrenceC Apr 12 '17 at 14:16
  • @LawrenceC, thanks for the comments. I made pretty significant edits in hopes of getting the question re-opened, but even the original one was within the guidelines. – Dan Apr 12 '17 at 14:24
  • 2
    UEFI doesn’t use pxelinux.0 anyway. That’s for PXE, it’s a real-mode binary. You want UEFI NetBoot, which is not PXE. But Syslinux really does not support ARM anyway. GRUB 2 may, though. – Daniel B Apr 12 '17 at 14:52
up vote 0 down vote accepted

Here are my eventual findings and solution, with lots of help from the comments!

  • Syslinux doesn't support ARM
  • Even if it did, pxelinux.0 only applied to BIOS, not UEFI
  • Use GRUB2 instead of Syslinux

Assuming the PXE (DHCP + TFTP) server(s) are already setup according to many guides,

  1. Copy your kernel and initramfs to your TFTP root dir (commonly /var/lib/tftpboot)
  2. Copy grubaa64.efi from /boot/efi/EFI/centos/ to your TFTP root dir (or ./boot/ subdir)
  3. Create a config file, grub.cfg, in the same directory

    (GRUB treats / as your TFTP root dir. Change linux & initrd as needed)

    menuentry 'Shared CentOS (4.5.0-23.el7.aarch64)' {
        linux       /vmlinuz-4.5.0-23.el7.aarch64 rw root=/dev/nfs ip=dhcp nfsroot=/netboot/CentOS_7.3 enforcing=0
        initrd      /initramfs-nfs-only.img
    }
    menuentry 'Refresh GRUB menu' {
        configfile  /boot/grub.cfg
    }
    
  4. Point your DHCP server to grubaa64.efi instead of pxelinux.0

  5. That's it! Try editing grub.cfg on the TFTP server, then choosing "Refresh GRUB menu" to see that it pulls in the new config
  • do I need to build grub2 for ARM? – elvis.dukaj Dec 18 '17 at 16:58
  • You shouldn't need to. The distro you start with is already built for ARM. So if it has, or you install GRUB2, it should already be built for ARM. – Dan Dec 23 '17 at 16:41

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.