[syslinux] What's the best way to get Syslinux to boot efi?

Ady Ady ady-sf at hotmail.com
Fri Aug 19 18:04:04 PDT 2016


> Sorry thinking about this problem at work, I'm using my cellphone. Won't
> get home until 1am.
> 
> I run Gentoo.
> https://wiki.gentoo.org/wiki/Syslinux#Setup_on_EFI_systems
> 
> is my distribution instructions on installing Syslinux.
> 
> http://www.syslinux.org/wiki/index.php?title=Install#UEFI
> are your instructions.
> 
> I have tried both instructions only to get a blank or black screen.
> 
> Trying to make a bootable usb that will boot with efi so I can run
> efibootmgr.
> 
> Just wondering which is correct, or should I uninstall gentoo's Syslinux,
> download it and compile it, and follow your website's instructions. Not
> having much luck in their forums.
 

The instructions in the respective wiki pages are not conflicting each 
other; you just need to read them carefully.

The instructions in Gentoo's wiki suggest mounting the "EFI System 
Partition" on a specific path ("/boot/efi"), and then it is suggested 
to create a (sub)directory on it.

If your OS (Gentoo) on which you are executing the instructions is 
already booted in UEFI mode, the (sub)directory that is being suggested 
is "EFI/syslinux/". That is:

 <root_of_the_ESP>/EFI/systlinux/ 

Since the root of the ESP was mounted as "/boot/efi", then the path at 
this time in your OS is seen as:

 /boot/efi/EFI/syslinux/ 

Later in the instructions, this new (sub)directory ("EFI/syslinux/") is 
used in the 'efibootmgr' command (with backslash "\", instead of slash 
"/"). ---> The "efibootmgr" command is the problematic instruction for 
this case!

The instructions referring to the 'efibootmgr' command in this specific 
Gentoo wiki page are not for a different (USB) removable device, but 
rather for adding "syslinux.efi" as an alternative UEFI bootloader for 
the _same_ ESP of the current OS in which you are executing the 
command. To be clear, I am not saying that the specific efibootmgr 
command in this specific Gentoo wiki page is correct or incorrect, but 
rather that, as-is, it is not intended for installing syslinux.efi on a 
_different_ (removable, USB device) ESP.

The same Gentoo wiki page suggests an alternative: use the "default" 
(as per the UEFI specifications) (sub)directory for your syslinux.efi, 
and this is where it matches the instructions of the Syslinux wiki.

The "default" (sub)directory is:

 <root_of_the_ESP>/EFI/BOOT/ 

In this case, the "root_of_the_ESP" is not the one in your current OS / 
device, but the ESP in your USB device. Additionally, Gentoo's wiki 
page uses "Boot" instead of "BOOT" (all upper-case). Strictly speaking, 
the UEFI specifications uses "BOOT"; I am not sure whether this small 
inaccuracy in Gentoo's wiki page has a practical negative effect in 
real-world cases.

In line with using the "default" UEFI directory as alternative method, 
also the default name for the UEFI bootloader is suggested in Gentoo's 
wiki page. For the "x86_64" architecture, this is "bootx64.efi", and 
again this coincides with Syslinux's wiki page. The result for this 
particular case is:

 <root_of_the_ESP_in_the_USB_device>/EFI/BOOT/BOOTX64.EFI 

or, as it is expressed in the Syslinux wiki page:

 EFI_SYSTEM_PARTITION/EFI/BOOT/BOOTX64.EFI 

(please note that in the Syslinux wiki page the "EFI_SYSTEM_PARTITION" 
is in italics).

As explained in both wiki pages, the rest of the Syslinux-related files 
should be copied to the same location. That means that your 
"syslinux.cfg", "ldlinux.e64", and any required c32 module for the same 
"efi64" architecture should be copied to the same location (including 
lib*.c32):

 <root_of_the_ESP_in_the_USB_device>/EFI/BOOT/ 

Now, with the instructions (hopefully) being clarified, there are 
additional things to be noted. First, UEFI implementations are not 
"perfect". For instance, some UEFI firmware might use a different 
default path, such as "EFI/Microsoft/Bootmgr.efi" or simuilar, instead 
of the default path according to the UEFI specs. This is just one 
example, and many other issues can be found in real-world cases. There 
isn't much that The Syslinux Project can do about it.

Additionally, the Syslinux wiki pages should not be expected to explain 
"anything and everything about booting", whether it would be regarding 
traditional PC-BIOS or regarding UEFI.

Moreover, bugs and potential improvements in syslinux.efi are a 
certainty (and this includes building issues). It would be useful for 
the The Syslinux Project to know if there is a system that is 
UEFI-bootable by means of a different bootloader but fails to boot with 
syslinux.efi.

Please also note that Syslinux configuration examples are usually 
focused on BIOS systems. For UEFI, it is very possible that the paths 
expressed in your own syslinux.cfg might need some tweaking; such as 
changing things like "/boot/" to "/EFI/BOOT/" or similar.

Regards,
Ady.

PS: When replying, please avoid top-posting. TIA.




More information about the Syslinux mailing list