[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

This is an old revision of the document!


Linux kernel options for UEFI and ELILO

The purpose of this article is to inform the user about necessary kernel options for booting from UEFI, and some info about how ELILO and perhaps other EFI bootloaders work, as this is currently lacking online.

Required kernel options for UEFI support

The following options are required for booting a kernel from UEFI. These are already set in the stock Slackware kernels.

Booting from UEFI requires that the kernel be the same bitness as the UEFI firmware. This usually means 64-bit, with the exception of older (pre-2008) Apple Macs and Intel Server boards using EFI v1.10 in 32-bit mode, and some Intel Cloverfield ultrabooks. However, you can still enable 32-bit emulation in the kernel and run 32-bit programs in Linux using multilib.
Enable the block layer
Partition Types
Advanced partition selection
EFI GUID Partition support (CONFIG_EFI_PARTITION)
Processor type and features
EFI runtime service support (CONFIG_EFI)
EFI stub support (CONFIG_EFI_STUB)
Build a relocatable kernel (CONFIG_RELOCATABLE)
Device Drivers
Graphics support
Support for frame buffer devices (CONFIG_FB)
EFI-based Framebuffer Support (CONFIG_FB_EFI)
File systems
Miscellaneous filesystems
EFI Variable filesystem (CONFIG_EFIVAR_FS)
You should DISABLE the old efivars sysfs interface found at:
Firmware Drivers
EFI (Extensible Firmware Interface) Support
EFI Variable Support via sysfs (CONFIG_EFI_VARS)

as it is deprecated in favor of CONFIG_EFIVAR_FS, because it has a 1024-byte variable size limit, and because it can cause data inconsistency issues. However, if you do disable this, you will need a fork of the efibootmgr program that supports the new EFI Variable filesystem found at: https://github.com/vathpela/efibootmgr/tree/libefivars

UEFI and ELILO

During the install procedure of Slackware 14.1 for ELILO (the eliloconfig script), the following happens and is required for booting from UEFI using ELILO.

  1. The EFI System Partition (ESP) is located and mounted. On a running system it is usually found already mounted at /boot/efi. This is a special FAT partition that is basically the UEFI firmware replacement of what the MBR was for BIOS. However, it can not only hold a bootloader (all the MBR was capable of), but also config files, the kernel, and other things you might want to access using the UEFI firmware.
  2. The three items required by ELILO (and other bootloaders) are copied onto the ESP to /boot/efi/EFI/Slackware. These include:
    1. The bootloader. In the case of ELILO it is elilo.efi
    2. The config file. In the case of ELILO it is elilo.conf
    3. The kernel, usually titled vmlinuz
  3. A boot entry variable is registered in the UEFI firmware using efibootmgr. The exact command that is run is
    EFI_DEVICE=$(mount | grep vfat | grep -w /boot/efi | cut -b 1-8)
    EFI_PARTITION=$(mount | grep vfat | grep -w /boot/efi | cut -f 1 -d ' ' | cut -b 9-)
    efibootmgr -q -c -d $EFI_DEVICE -p $EFI_PARTITION -l "\\EFI\\Slackware\\elilo.efi" -L "Slackware"
If for some reason you cannot register a boot entry with the UEFI firmware, you should put the bootloader at /EFI/boot/bootx64.efi. This special location allows the UEFI firmware to run the bootloader without any boot entry.

Sources

 howtos:slackware_admin:linux_kernel_options_for_uefi_and_elilo ()