Managing EFI Boot Loaders for Linux:
Using SYSLINUX

by Rod Smith, rodsmith@rodsbooks.com

Originally written: 6/30/2013; last update: 7/16/2017

This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!

Donate $1.00 Donate $2.50 Donate $5.00 Donate $10.00 Donate another value
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal

This page is part of my Managing EFI Boot Loaders for Linux document. If a Web search has brought you to this page, you may want to start at the beginning.

SYSLINUX is a family of boot loaders for Linux. Often employed as a means to boot Linux installation discs, SYSLINUX can also be used on hard disks. Prior to version 6 (introduced in 2013), it did not include an EFI version; but more recent versions include this support.

When to Use SYSLINUX

SYSLINUX is reasonably reliable in my experience, although that experience is limited. As I write (summer, 2017), the latest version is 6.0.3, and has not been updated since 2014, so it's not clear if it's being actively developed. SYSLINUX is similar in capabilities to ELILO, but it's easier to create a conventional menu system with SYSLINUX than with ELILO. I know of no scripts or other tools to help maintain the program's configuration file; you're on your own for that task.

As far as I can tell, SYSLINUX's EFI version is similar in capabilities to ELILO: It can load a Linux kernel, but not other EFI programs. I could be wrong about this, though; I could find no documentation about its EFI-specific capabilities, and what I considered logical extensions to the BIOS-mode options for chainloading didn't work for chainloading an EFI boot loader. There could be an EFI chainloading option that's undocumented or whose documentation I haven't found, though.

To the best of my knowledge, SYSLINUX doesn't explicitly support Secure Boot—but that may be a lack of knowledge on my part rather than a lack of support in the program. In principle, you should be able to sign syslinux.efi and launch it from shim much as you would any other boot loader, and from there launch any signed or unsigned Linux kernel.

Overall, SYSLINUX is best used by experts who want to take full control of their boot loader's menu system and who either don't want to dual-boot with another OS or who are willing to rely on another boot manager program to handle switching OSes.

Installing SYSLINUX

SYSLINUX installation works just as described in EFI Boot Loader Installation. A major caveat is that SYSLINUX requires a number of support files be installed on your ESP, and it may not be obvious what files need to go there. To help simplify things, I've created an x86-64 binary tarball of SYSLINUX 6.03+dfsg-14, based on an Ubuntu Linux package. To use this binary, you should unpack it in your ESP's root directory—that is, normally in /boot/efi or sometimes in /boot. When unpacked, this package creates a directory called EFI/syslinux, which holds the syslinux.efi boot loader binary, syslinux.cfg configuration file, and several support files. Note that the configuration file works on my Ubuntu 16.10 installation with its 4.8.0-58-generic kernel, but will require changes to work on other systems.

Configuring SYSLINUX

Many of the SYSLINUX configuration features are similar to those of its BIOS counterpart. See the SYSLINUX wiki for detailed configuration instructions. The syslinux.cfg configuration file consists of a series of global options followed by one or more boot stanzas, each of which defines a single kernel or other tool to be launched. A simple example resembles the following:

DEFAULT arch
TIMEOUT 50
UI menu.c32

LABEL arch
    MENU LABEL Arch Linux
    LINUX ../../vmlinuz-linux
    APPEND root=/dev/sda2 ro
    INITRD ../../initramfs-linux.img

LABEL archfallback
    MENU LABEL Arch Linux Fallback
    LINUX ../../vmlinuz-linux
    APPEND root=/dev/sda2 ro
    INITRD ../../initramfs-linux-fallback.img

This example defines two boot entries, arch and archfallback, which boot Arch Linux in two different ways—the entries vary in their INITRD lines, which specify the initial RAM disk files to be used.

The sample configuration file in the tarball I'm providing includes entries to launch various SYSLINUX tools for detecting hardware, rebooting, and powering off. These tools hang my computer, but you may have better luck.

Using SYSLINUX

When SYSLINUX is launched, you'll see a menu, whose appearance can vary depending on your configuration file options. The configuration file provided with my sample SYSLINUX binary produces a menu like this:


SYSLINUX presents a simple text-mode menu.

You interact with SYSLINUX in the same way you interact with most boot loaders: Press the arrow keys to select a boot option and then press Enter to boot the OS.

Maintaining SYSLINUX

I know of no distribution that ships with scripts to help automate SYSLINUX maintenance; thus, you should plan on editing its configuration file manually whenever you upgrade your kernel or make other changes to your configuration that might require SYSLINUX changes.


Go on to "Using GRUB Legacy"

Return to "Managing EFI Boot Loaders for Linux" main page


If you have problems with or comments about this web page, please e-mail me at rodsmith@rodsbooks.com. Thanks.

Return to my main Web page.