EFIBootLoaders

Differences between revisions 4 and 9 (spanning 5 versions)
Revision 4 as of 2013-09-23 18:07:37
Size: 12012
Editor: ip98-182-36-23
Comment: Updated EFI filesystem driver information
Revision 9 as of 2023-12-07 18:11:36
Size: 27843
Editor: roguescholar
Comment: Update links in References section
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:

UEFI defines a new method of interfacing between PC operating systems and firmware. The UEFI interface is composed of data tables containng platform-related information, plus boot and runtime functions that are available to the operating system and the boot loader. These provide a standard environment for booting and running pre-boot applications.

The table following lists known features found in current EFI/UEFI capable boot loaders and boot managers. (Note: Boot managers present a menu of boot options, whereas boot loaders load a kernel. Many programs can do both tasks, although rEFIt and rEFInd can load a kernel only if it includes an EFI stub loader.)

Key:
Y - feature known to exist,
? - cannot determine,
blank - feature does not exist

||||||||<tablestyle="width: 90%">'''UEFI/EFI Bootloader Features'''|| || || '''BIOS Bootloader'''||
|| ||<:17%> '''ELILO''' ||<:17%> '''Grub 2''' ||<:17%> '''Kernel EFI stub loader''' ||<:17%> '''rEFIt''' ||<:17%> '''rEFInd''' ||<:17%>'''Grub 0.97'''||
||<v>'''Features''' ||LILO like EFI boot loader, originally developed for IA-64 by HP, now with IA-32 support || Grub 2 with EFI support || Boot loader built into 3.3.0 and later kernels; turns the kernel into its own boot loader || EFI graphical boot manager, originally for Apple Macs|| EFI graphical boot manager, forked from rEFIt because of rEFIt's apparent abandonment || BIOS Only ||
||Graphical boot manager || || Y || || Y || Y || Background ||
|| JPG images || || Y || || || || ||
|| BMP images || || || || Y || Y || ||
|| PNG images || || Y || || || || ||
|| XPM images || || ? || || || || Y ||
|| ICNS images || || ? || || Y || Y || ? ||
||Text boot manager || Y || Y || || Y || Y || Y ||
||Mouse support || || || || || || ||
||Config file || Y|| Y || || Y || Y || Y ||
||specify kernel image || Y|| Y || || || Y || Y ||
||interactive mode || Y|| Y || || || || Y ||
||load initrd || Y|| Y || Y || || Y || Y ||
||kernel selector menu || Y|| Y || || || Y || Y ||
||kernel boot params || Y|| Y || Y || || Y || ||
||Boot once and then revert to previous kernel || Y || || || || || ||
||Variables to paramaterize boot e.g. root=/dev/nfs ip=%I:%z:%G:%N|| Y || || || || || ||
||Enable legacy BIOS || || ? || || Y || Y || '''BIOS ONLY''' ||
||Chain loading || || Y || || Y || Y || Y ||
||Gzip compression support || || Y || Y || || Y || Y ||
||Load ELF binaries || || Y || || || || Y ||
||IA-64 || Y || ? || Y || || ? || ||
||x86-32 || Y || Y || Y || Y || Y || Y ||
||x86-64 || Y || Y || Y || Y || Y || Y ||
||Apple fat image || || || || Y || || ||
||Boot unmodified linux kernel || Y || Y || Y || || Y || Y ||
||Relocate Kernel ||IA-64 modified kernel|| || || || || ||
||Load FPSWA driver (Floating Point Software Assist) || Y (IA-64 only) || || || || || N/A ||
||Font Support || Y || Y || || || || ? ||
||'''File System Support:''' || || || || || || ||
|| AFFS || || Y || || || || ||
|| AFS || || Y || || || || ||
|| CPIO || || Y || || || || ||
|| FAT || Y || Y || Y || Y || Y || Y ||
|| EXT2 || Y || Y || Y || Y || Y || Y ||
|| EXT3 || Y || Y || Y || Y || Y || Y ||
|| EXT4 || || Y || || || || Y (Jaunty+) ||
|| FFS || || || || || || Y ||
|| HFS || || Y || || || || ||
|| HFSPLUS || Y || Y || Y || Y || Y || ||
|| ISO9660 || Y || Y || Y || Y || Y || Y ||
|| JFS || || Y || || || || Y ||
|| MINIX || || Y || || || || Y ||
|| NTFS || || Y || || || || ||
|| NTFSCOMP || || Y || || || || ||
|| REISERFS || Y || Y || Y || Y || Y || Y ||
|| SFS (Amiga) || || Y || || || || ||
|| UDF || || Y || || || || ||
|| UFS || || Y || || || || Y ||
|| XFS || || Y || || || || Y ||
||NOTE: || ELILO loads kernel + initrd using EFI, hence only supports VFAT or, via EFI drivers, ext2, ext3, ext4, ReiserFS, Btrfs, HFS+, or ISO-9660 || || Same comment as for ELILO || Same comment as for ELILO || Same comment as for ELILO || ||
||'''Disk Volume/Partition Support:'''|| || || || || || ||
|| RAID || || Y || || || || Y ||
|| LVM || || Y || || || || Y ||
|| ADFS (Acorn) partition maps || || Y || || || || ||
|| Amiga Patition Tables || || Y || || || || ||
|| Macintosh Partition Tables || || Y || || || || ||
|| PC (MBR) Partition Tables || || Y || Y || Y || Y || Y ||
|| Sun Partition Tables || || Y || || || || ||
|| GPT (GUID Partition Tables) (UEFI)|| Y || Y || Y || Y || Y ||
|| Disk Loopback || || Y || || || || ||
|| Find filesystems by UUID or label|| || Y || || || || Y (Intrepid+)||
||'''Commands''' || || Y || || || || ||
|| background || || || || || || Y ||
|| beep sound PC speaker || || Y || || || || ||
|| print file block list || || Y || || || || Y ||
|| set border colour || || || || || || Y ||
|| cat files || || Y || || || || Y ||
|| clear screen || || || || || || Y ||
|| compare files || || Y || || || || Y ||
|| cpu ID || || Y || || || || ||
|| debug mode || Y || || || || || Y ||
|| display APM BIOS info || N/A || N/A || || N/A || N/A || N/A || Y ||
|| display memory info || || || || || || Y ||
|| dump file (copy) || || || || || || Y ||
|| echo / print || || Y || || || || Y ||
|| fallback to known kernel || || || || || || Y ||
|| find a file on partitions || || || || || || Y ||
|| file system test mode || || || || || || Y ||
|| help || || Y || || || || Y ||
|| print geometry of disk || || || || || || Y ||
|| manually load config file || || Y || || || || ||
|| halt machine || || Y || || Y || Y || Y ||
|| hide a partition || || || || || || Y ||
|| hexdump a file || || Y || || || || ||
|| intel multiprocessor probe || || || || || || Y ||
|| i/o port probe a drive || || || || || || Y ||
|| load/save environment variables|| || Y || || || || ||
|| ls files || || Y || || || || ||
|| lspci || || Y || || || || ||
|| make a drive bootable || || || || || || Y ||
|| map one drive to another || || || || || || Y ||
|| screen pager || || || || || || Y ||
|| partition manipulation || || || || || || Y ||
|| pause/sleep || || Y || || || || Y ||
|| read variables from user input|| || Y || || || || ||
|| read memory address || || || || || || Y ||
|| reboot computer || || Y || || Y || Y || ||
|| select terminal || || Y || || || || ||
|| serial console support || || || || || || Y ||
|| set keyboard mappings || || || || || || Y ||
|| expression handling || || Y || || || || ||
|| video testing || || Y || || || || ||
|| list vbe modes || || Y || || || || Y ||
|| vbe test || || Y || || || || ||
|| load font files || || Y || || || || ||
|| block users from using EFI shell || || || || Y || Y || ||
|| disable booting from optical drive || || || || Y || Y || ||
|| disable booting from internal drives|| || || || Y || Y || ||
|| block apple HW testing || || || || Y || Y || ||
||'''Toolchain Contraints''' || || || || || || || ||
||IA-64: gcc version ||3.1, 3.2|| ? || ? || ? || ? || ? ||
||IA-64: binutils ||2.13.90 || ? || ? || ? || ? || ? ||
||x86-32: gcc-version ||3.2 || ? || ? || ? || ? || ? ||
||x86-32: binutils ||2.13.90.0.2 || ? || ? || ? || ? || ? ||
||x86-64: gcc-version ||4.1.1+ || ? || ? || ? || ? || ? ||
||x86-64: bintil ||2.17.50.0.14+ || ? || ? || ? || ? || ? ||
||'''Netboot''' || || || || || || || ||
|| PXE || Y || || || || || ||
|| DCHP || Y || || || || || Y ||
|| TFTP || Y || || || || || Y ||
|| BOOTP || || || || || || Y ||
|| IFCONFIG || ? || || || || || Y ||
|| RARP || || || || || || Y ||
||<tablestyle="border-style: ridge; border-width: 3px; clear: both; float: right; margin-bottom: 2rem; margin-right: 4rem; text-align: center;" -2> '''Legend''' ||
||<style="background-color: #99ff99; text-align: center; width: 3.5rem;"> Yes || Feature known to exist ||
||<:#ececec> ? || Indeterminate feature presence ||
||<:#ff9999> No || Feature does not exist ||

UEFI defines a new method of interfacing between PC operating systems and firmware. The UEFI interface is composed of data tables containing platform-related information, plus boot and runtime functions that are available to the operating system and the boot loader. These provide a standard environment for booting and running pre-boot applications.

The table following lists known features found in current EFI/UEFI capable boot loaders and boot managers. (Note: Boot managers present a menu of boot options, whereas boot loaders load a kernel. Many programs can do both tasks, although rEFIt can load a kernel on PC hardware only if it includes an EFI stub loader.)

<<BR>>

=== Comparison table ===
||<tablestyle="clear: both; margin: auto; width: 90%;"|3> '''Features''' ||<:-3> '''EFI/UEFI Bootloaders''' ||<:-3> '''EFI/UEFI Boot Managers''' ||<:14%> '''BIOS Bootloader''' ||
||<:14%> '''[[https://elilo.sourceforge.io/|ELILO|target="_blank"]]''' ||<:14%> '''[[https://www.gnu.org/software/grub/|GRUB 2|target="_blank"]]''' ||<:14%> '''[[https://www.kernel.org/doc/Documentation/efi-stub.txt|Kernel stub loader|target="_blank"]]''' ||<:14%> '''[[http://refit.sourceforge.net|rEFIt|target="_blank"]]''' ||<:14%> '''[[https://www.rodsbooks.com/refind/index.html|rEFInd|target="_blank"]]''' ||<:14%> '''[[https://systemd.io/BOOT_LOADER_SPECIFICATION/|systemd-boot|target="_blank"]]''' ||<:> '''[[https://www.gnu.org/software/grub/grub-legacy.html|GRUB 0.97|target="_blank"]]''' ||
||<:> Oldest/most stable Linux EFI bootloader, very limited features ||<:> Most complex Linux EFI bootloader available, actively developed ||<:> Linux kernels since v3.3.0 are bootable via system firmware; no bootloader needed ||<:> EFI graphical boot manager, development stopped in 2010 ||<:> EFI graphical boot manager with OS auto-detection, semi-active development ||<:> EFI text-menu boot manager with modern features but very simple interface, actively developed ||<:> No EFI/UEFI support; for comparison only ||
||Graphical interface mode ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ffff99> Background imgs only ||
||Mouse support ||<:#ff9999> No ||<:#ff9999> No ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||
||Text menu interface mode ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||File-based configuration ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||select from multiple kernels ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||interactive mode ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||load initrd ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||kernel selector menu ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||kernel boot params ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||Boot old kernel if upgrade fails ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||Paramaterize kernel cmdline opts<<FootNote(e.g. root=/dev/nfs ip=%I:%z:%G:%N, where the utility can generate the needed values based on information it can probe for)>> ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||
||Enable legacy BIOS ||<:#ececec> ? ||<:#ececec> ? ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> '''BIOS ONLY''' ||
||Chain loading ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||Gzip compression support ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||Load ELF binaries ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||Apple fat image ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||Boot unmodified linux kernel ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||Relocate Kernel ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
||IA-64 modified kernel ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||Load FPSWA driver<<FootNote(Floating Point Software Assist)>> ||<:#99ff99> Yes (IA-64 only) ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ffefd5> N/A ||
||Custom font support ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ececec> ? ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''Architecture Support:''' ||
||x86-64 ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
||x86-32 ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
||IA-64 ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''File System Support:'''<<FootNote(Loading of kernel+initrd occurs using EFI firmware, hence only supports FAT16/32 (but if given 3rd-party EFI drivers can then read: ext2, ext3, ext4, ReiserFS, Btrfs, HFS+, or ISO-9660))>> ||
|| Amiga FFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| AFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| Btrfs ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| CPIO ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| EXT2 ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| EXT3 ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| EXT4 ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes (Jaunty+) ||
|| FAT ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| FFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ff9999> No ||<:#ececec> ? ||<:#99ff99> Yes ||
|| HFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| HFS+ ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| ISO9660 ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| JFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| MINIX ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| NTFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| NTFS Compressed ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| ReiserFS ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| SFS (Amiga) ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| UDF ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| UFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| XFS ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| ZFS ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''Disk Volume/Partition Support:''' ||
|| RAID ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| LVM ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| ADFS (Acorn partition maps) ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| Amiga partition tables ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| Macintosh partition tables ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| Master Boot Record (MBR) tables ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| Sun partition tables ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| GPT (GUID partition tables) ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||
|| Disk loopback ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| Filesystems by UUID/Label ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes (Intrepid+) ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''Image File Format Support:''' ||
|| JPG images ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||
|| BMP images ||<:#ff9999> No ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||
|| PNG images ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ff9999> No ||
|| XPM images ||<:#ff9999> No ||<:#ececec> ? ||<:#ff9999> No ||<:#ff9999> No ||<:#ff9999> No ||<:#ff9999> No ||<:#99ff99> Yes ||
|| ICNS images ||<:#ff9999> No ||<:#ececec> ? ||<:#ff9999> No ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ff9999> No ||<:#ececec> ? ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''Command Line Operations''' ||
|| background ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| beep (PC speaker) ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| print file block list ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| set border color ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| read text file contents ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| clear screen ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| compare files ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| identify CPU ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| debug mode ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| display APM BIOS info ||<:#ffefd5> N/A ||<:#ffefd5> N/A ||<:#ececec> ? ||<:#ffefd5> N/A ||<:#ffefd5> N/A ||<:#ececec> ? ||<:#99ff99> Yes ||
|| display RAM info ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| dump file (copy) ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| echo / print ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| fallback to known good kernel ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| find filename on partition ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| filesystem test mode ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| help ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#99ff99> Yes ||
|| display disk geometry ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| manually load config. file ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| halt machine ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| hide partition ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||
|| file hexdump ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| intel multiprocessor probe ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| disk I/O port probe ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| load/save env. variables ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||
|| show directory contents ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||
|| probe PCI bus ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| set partition boot flag ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| map one drive to another ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| screen pager ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| partition manipulation ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| pause/sleep ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| read variables from user input ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| read memory address ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| reboot computer ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| select terminal ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| serial console support ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| set keyboard mappings ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| expression handling ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| video testing ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| list vbe modes ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| vbe test ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| load font files ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
|| block users from using EFI shell ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| disable booting from optical drive ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| disable booting from internal drives ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| block apple HW testing ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''Toolchain Contraints''' ||
||IA-64: gcc version ||<:> 3.1, 3.2 ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||IA-64: binutils ||<:> 2.13.90 ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||x86-32: gcc-version ||<:> 3.2 ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||x86-32: binutils ||<:> 2.13.90.0.2||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||x86-64: gcc-version ||<:> 4.1.1+ ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||x86-64: bintil ||<:> 2.17.50.0.14+||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||
||<rowstyle="background: #e9ba25; text-align: center; font-weight: 700;" -8> '''Netboot Methods:''' ||
|| PXE ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||
|| DCHP ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| TFTP ||<:#99ff99> Yes ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| BOOTP ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| IFCONFIG ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||
|| RARP ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#ececec> ? ||<:#99ff99> Yes ||

<<BR>> '''Footnotes:''' <<BR>>
<<FootNote>>
Line 142: Line 151:

All EFI compliant systems have an EFI System Partition (ESP), which is a FAT32 partition containing EFI firmware modules and boot images. Note that there can be one or more system partions. The ESP is effectively the boot partition, and contains the necessary images to boot a system.  This boot partition should probably be mounted on a Linux system as /boot/efi for the updating of new kernels and initrd images.

Each vendor "must" use a dedicated directory in \EFI\vendor for the .efi bootloader code.

nshell is the
EFI shell. It will execute the boot script called startup.nsh found in the root of an ESP. startup.nsh can be used to load and execute the preferred boot loader. More commonly, a list of boot loaders is maintained in NVRAM variables called Boot####, where #### is a hexadecimal number. The boot order is maintained in the BootOrder variable. These variables can be manipulated in Linux with the efibootmgr utility. If the NVRAM contains no such entries or if they're all invalid, recent EFI implementations default to using a boot loader of the form \EFI\BOOT\boot{arch}.efi, where {arch} is an architecture code, such as "x64" for x86-64 or "ia32" for x86.

All EFI executable images contain a PE/COFF header defining the format of the executable code. 
All EFI compliant systems have an EFI System Partition (ESP), which is a volume formatted with either a FAT16 or FAT32 filesystem containing EFI firmware modules and boot images. Note that there can be multiple EFI system partitions present on a system, with their order of precedence configured in the firmware setup menu. The ESP is effectively the boot partition, and contains the necessary images to boot a system. This boot partition should be mounted on a Linux system as `/efi` (formerly `/boot/efi`) for the updating of new kernels and initrd images.

Each vendor "must" use a dedicated directory within the `\EFI\` directory (i.e. `\EFI\vendor`) for its EFI executable and other related files.

[[https://github.com/tianocore/tianocore.github.io/wiki/ShellPkg|Shell.efi]] is the name of the UEF
I Shell binary generated by the [[https://www.tianocore.org/|TianoCore EFI Development Kit (EDK) II]]. If present, it will execute a boot script with the filename `startup.nsh` in the root directory of an ESP. `startup.nsh` can be used to load and execute the preferred boot loader, or perform other tasks related to the ESP contents. More commonly, a list of boot loaders is maintained in NVRAM variables with names of the format `Boot####`, where #### is a hexadecimal value in a series beginning with 0000. The boot order is stored in the !BootOrder variable and determines the order in which the system will attempt to execute the boot loaders that are configured. These variables can be manipulated in Linux with the `efibootmgr` utility. If the NVRAM contains no such entries or if they're all invalid, recent EFI implementations fallback to using the boot loader located at `\EFI\BOOT\boot{arch}.efi`, where {arch} is an architecture code, such as "x64" for x86-64 or "ia32" for x86.

All EFI executable images contain a PE/COFF header defining the format of the executable code.
Line 161: Line 169:
Line 165: Line 172:
   CONFIG_FB_EFI=y
   CONFIG_FRAMEBUFFER_CONSOLE=y
  CONFIG_FB_EFI=y
  CONFIG_FRAMEBUFFER_CONSOLE=y
Line 171: Line 178:
   CONFIG_EFI=y
   CONFIG_EFI_VARS=y or m # optional 
  CONFIG_EFI=y
  CONFIG_EFI_VARS=y or m # optional
Line 177: Line 184:
   CONFIG_EFI_STUB=y   CONFIG_EFI_STUB=y
Line 182: Line 189:
== References ==

 * UEFI specification: http://www.uefi.org
 * Intel EFI resources http://www.intel.com/technology/efi/
 * EFI scripting language http://software.intel.com/en-us/articles/efi-shells-and-scripting/
 * DDJ EFI background http://www.ddj.com/embedded/18440624 and http://www.ddj.com/embedded/199500688
 * EFI background in OSX book http://osxbook.com/book/bonus/chapter4/firmware/
 * ELILO: http://elilo.sourceforge.net/cgi-bin/blosxom
 * GRUB: http://www.gnu.org/software/grub/
 * rEFIt: http://refit.sourceforge.net
 * rEFInd: http://www.rodsbooks.com/refind/
== External Links ==
 * '''~+Implementations+~'''
  * '''[[https://www.rodsbooks.com/refind/|The rEFInd Boot Manager]]'''
  * '''[[https://www.gnu.org/software/grub/index.html|GNU GRUB]]'''
  * '''[[https://elilo.sourceforge.io/|ELILO: EFI Linux Boot Loader]]'''
  * '''[[https://refit.sourceforge.net/|rEFIt: An EFI Boot Menu and Toolkit]]'''
 * '''~+Documentation+~'''
  * '''[[https://uefi.org/specifications|UEFI Specifications]]'''
  * '''[[https://www.intel.com/content/www/us/en/developer/articles/tool/unified-extensible-firmware-interface.html|Intel UEFI resources]]''' (September 6, 2019)
  * '''[[https://uefi.org/sites/default/files/resources/UEFI_Shell_2_2.pdf|UEFI Shell Specification]]''' (v2.2 - January 26, 2016, a UEFI scripting primer)
  * '''[[https://www.drdobbs.com/the-extensible-firmware-interface/184406244|The Extensible Firmware Interface]]''' (September 1, 2005) and '''[[https://www.drdobbs.com/embedded-systems/efi-architecture/199500688|EFI Architecture]]''' (May 10, 2007) from Dr. Dobb's Journal
  * '''[[https://web.archive.org/web/20200103161736if_/http://osxbook.com/book/bonus/chapter4/firmware/|Mac OS X Internals: More Power To Firmware]]''' by Amit Singh (June 2004, archived by The Wayback Machine on January 3, 2020)

EFI/UEFI Boot Loaders

Legend

Yes

Feature known to exist

?

Indeterminate feature presence

No

Feature does not exist

UEFI defines a new method of interfacing between PC operating systems and firmware. The UEFI interface is composed of data tables containing platform-related information, plus boot and runtime functions that are available to the operating system and the boot loader. These provide a standard environment for booting and running pre-boot applications.

The table following lists known features found in current EFI/UEFI capable boot loaders and boot managers. (Note: Boot managers present a menu of boot options, whereas boot loaders load a kernel. Many programs can do both tasks, although rEFIt can load a kernel on PC hardware only if it includes an EFI stub loader.)


Comparison table

Features

EFI/UEFI Bootloaders

EFI/UEFI Boot Managers

BIOS Bootloader

ELILO

GRUB 2

Kernel stub loader

rEFIt

rEFInd

systemd-boot

GRUB 0.97

Oldest/most stable Linux EFI bootloader, very limited features

Most complex Linux EFI bootloader available, actively developed

Linux kernels since v3.3.0 are bootable via system firmware; no bootloader needed

EFI graphical boot manager, development stopped in 2010

EFI graphical boot manager with OS auto-detection, semi-active development

EFI text-menu boot manager with modern features but very simple interface, actively developed

No EFI/UEFI support; for comparison only

Graphical interface mode

No

Yes

No

Yes

Yes

No

Background imgs only

Mouse support

No

No

No

No

Yes

No

No

Text menu interface mode

Yes

Yes

No

Yes

Yes

Yes

Yes

File-based configuration

Yes

Yes

No

Yes

Yes

Yes

Yes

select from multiple kernels

Yes

Yes

No

Yes

Yes

Yes

Yes

interactive mode

Yes

Yes

No

No

Yes

Yes

Yes

load initrd

Yes

Yes

Yes

Yes

Yes

Yes

Yes

kernel selector menu

Yes

Yes

No

Yes

Yes

Yes

Yes

kernel boot params

Yes

Yes

Yes

?

Yes

Yes

Yes

Boot old kernel if upgrade fails

Yes

Yes

No

No

Yes

Yes

Yes

Paramaterize kernel cmdline opts1

Yes

No

No

No

Yes

No

No

Enable legacy BIOS

?

?

No

Yes

Yes

No

BIOS ONLY

Chain loading

No

Yes

No

Yes

Yes

Yes

Yes

Gzip compression support

Yes

Yes

Yes

Yes

Yes

Yes

Yes

Load ELF binaries

Yes

Yes

No

Yes

Yes

Yes

Yes

Apple fat image

?

?

?

Yes

?

?

?

Boot unmodified linux kernel

Yes

Yes

Yes

?

Yes

Yes

Yes

Relocate Kernel

No

Yes

No

No

Yes

Yes

Yes

IA-64 modified kernel

Yes

Yes

Yes

?

?

?

?

Load FPSWA driver2

Yes (IA-64 only)

?

?

?

?

?

N/A

Custom font support

Yes

Yes

No

Yes

Yes

No

?

Architecture Support:

x86-64

Yes

Yes

Yes

Yes

Yes

?

Yes

x86-32

Yes

Yes

Yes

Yes

Yes

?

Yes

IA-64

Yes

Yes

Yes

?

?

?

?

File System Support:3

Amiga FFS

?

Yes

?

?

Yes

?

?

AFS

?

Yes

?

?

Yes

?

?

Btrfs

?

Yes

?

?

Yes

?

?

CPIO

?

Yes

?

?

Yes

?

?

EXT2

Yes

Yes

Yes

Yes

Yes

Yes

Yes

EXT3

Yes

Yes

Yes

Yes

Yes

Yes

Yes

EXT4

?

Yes

?

?

Yes

Yes

Yes (Jaunty+)

FAT

Yes

Yes

Yes

Yes

Yes

Yes

Yes

FFS

?

Yes

?

?

No

?

Yes

HFS

?

Yes

?

?

Yes

?

?

HFS+

Yes

Yes

Yes

Yes

Yes

?

?

ISO9660

Yes

Yes

Yes

Yes

Yes

?

Yes

JFS

?

Yes

?

?

Yes

?

Yes

MINIX

?

Yes

?

?

Yes

?

Yes

NTFS

?

Yes

?

?

Yes

?

?

NTFS Compressed

?

Yes

?

?

?

?

?

ReiserFS

Yes

Yes

Yes

Yes

Yes

Yes

Yes

SFS (Amiga)

?

Yes

?

?

Yes

?

?

UDF

?

Yes

?

?

Yes

?

?

UFS

?

Yes

?

?

Yes

?

Yes

XFS

?

Yes

?

?

Yes

?

Yes

ZFS

?

?

?

?

Yes

?

?

Disk Volume/Partition Support:

RAID

?

Yes

?

?

?

?

Yes

LVM

?

Yes

?

?

Yes

?

Yes

ADFS (Acorn partition maps)

?

Yes

?

?

?

?

?

Amiga partition tables

?

Yes

?

?

?

?

?

Macintosh partition tables

?

Yes

?

?

?

?

?

Master Boot Record (MBR) tables

?

Yes

Yes

Yes

Yes

?

Yes

Sun partition tables

?

Yes

?

?

?

?

?

GPT (GUID partition tables)

Yes

Yes

Yes

Yes

Yes

Yes

No

Disk loopback

?

Yes

?

?

?

?

?

Filesystems by UUID/Label

?

Yes

?

?

Yes

?

Yes (Intrepid+)

Image File Format Support:

JPG images

No

Yes

No

?

Yes

No

No

BMP images

No

No

No

Yes

Yes

No

No

PNG images

No

Yes

No

No

Yes

No

No

XPM images

No

?

No

No

No

No

Yes

ICNS images

No

?

No

Yes

Yes

No

?

Command Line Operations

background

?

?

?

?

?

?

Yes

beep (PC speaker)

?

Yes

?

?

?

?

?

print file block list

?

Yes

?

?

?

?

Yes

set border color

?

?

?

?

?

?

Yes

read text file contents

?

Yes

?

?

Yes

?

Yes

clear screen

?

?

?

?

?

?

Yes

compare files

?

Yes

?

?

?

?

Yes

identify CPU

?

Yes

?

?

?

?

?

debug mode

Yes

?

?

?

?

?

Yes

display APM BIOS info

N/A

N/A

?

N/A

N/A

?

Yes

display RAM info

?

?

?

?

?

?

Yes

dump file (copy)

?

?

?

?

?

?

Yes

echo / print

?

Yes

?

?

?

?

Yes

fallback to known good kernel

?

Yes

?

?

?

Yes

Yes

find filename on partition

?

?

?

?

?

?

Yes

filesystem test mode

?

?

?

?

Yes

Yes

Yes

help

?

Yes

?

?

Yes

Yes

Yes

display disk geometry

?

?

?

?

?

?

Yes

manually load config. file

?

Yes

?

?

?

?

?

halt machine

?

Yes

?

Yes

Yes

?

Yes

hide partition

?

?

?

?

Yes

?

Yes

file hexdump

?

Yes

?

?

?

?

?

intel multiprocessor probe

?

?

?

?

?

?

Yes

disk I/O port probe

?

?

?

?

?

?

Yes

load/save env. variables

?

Yes

?

?

Yes

Yes

?

show directory contents

?

Yes

?

?

Yes

Yes

?

probe PCI bus

?

Yes

?

?

?

?

?

set partition boot flag

?

?

?

?

?

?

Yes

map one drive to another

?

?

?

?

?

?

Yes

screen pager

?

?

?

?

?

?

Yes

partition manipulation

?

?

?

?

?

?

Yes

pause/sleep

?

Yes

?

?

?

?

Yes

read variables from user input

?

Yes

?

?

?

?

?

read memory address

?

?

?

?

?

?

Yes

reboot computer

?

Yes

?

Yes

Yes

?

?

select terminal

?

Yes

?

?

?

?

?

serial console support

?

?

?

?

?

?

Yes

set keyboard mappings

?

?

?

?

?

?

Yes

expression handling

?

Yes

?

?

?

?

?

video testing

?

Yes

?

?

?

?

?

list vbe modes

?

Yes

?

?

?

?

Yes

vbe test

?

Yes

?

?

?

?

?

load font files

?

Yes

?

?

?

?

?

block users from using EFI shell

?

?

?

Yes

Yes

?

?

disable booting from optical drive

?

?

?

Yes

Yes

?

?

disable booting from internal drives

?

?

?

Yes

Yes

?

?

block apple HW testing

?

?

?

Yes

Yes

?

?

Toolchain Contraints

IA-64: gcc version

3.1, 3.2

?

?

?

?

?

?

IA-64: binutils

2.13.90

?

?

?

?

?

?

x86-32: gcc-version

3.2

?

?

?

?

?

?

x86-32: binutils

2.13.90.0.2

?

?

?

?

?

?

x86-64: gcc-version

4.1.1+

?

?

?

?

?

?

x86-64: bintil

2.17.50.0.14+

?

?

?

?

?

?

Netboot Methods:

PXE

Yes

?

?

?

Yes

?

?

DCHP

Yes

?

?

?

?

?

Yes

TFTP

Yes

?

?

?

?

?

Yes

BOOTP

?

?

?

?

?

?

Yes

IFCONFIG

?

?

?

?

?

?

Yes

RARP

?

?

?

?

?

?

Yes


Footnotes:

  1. e.g. root=/dev/nfs ip=%I:%z:%G:%N, where the utility can generate the needed values based on information it can probe for (1)

  2. Floating Point Software Assist (2)

  3. Loading of kernel+initrd occurs using EFI firmware, hence only supports FAT16/32 (but if given 3rd-party EFI drivers can then read: ext2, ext3, ext4, ReiserFS, Btrfs, HFS+, or ISO-9660) (3)

Booting from EFI

All EFI compliant systems have an EFI System Partition (ESP), which is a volume formatted with either a FAT16 or FAT32 filesystem containing EFI firmware modules and boot images. Note that there can be multiple EFI system partitions present on a system, with their order of precedence configured in the firmware setup menu. The ESP is effectively the boot partition, and contains the necessary images to boot a system. This boot partition should be mounted on a Linux system as /efi (formerly /boot/efi) for the updating of new kernels and initrd images.

Each vendor "must" use a dedicated directory within the \EFI\ directory (i.e. \EFI\vendor) for its EFI executable and other related files.

Shell.efi is the name of the UEFI Shell binary generated by the TianoCore EFI Development Kit (EDK) II. If present, it will execute a boot script with the filename startup.nsh in the root directory of an ESP. startup.nsh can be used to load and execute the preferred boot loader, or perform other tasks related to the ESP contents. More commonly, a list of boot loaders is maintained in NVRAM variables with names of the format Boot####, where #### is a hexadecimal value in a series beginning with 0000. The boot order is stored in the BootOrder variable and determines the order in which the system will attempt to execute the boot loaders that are configured. These variables can be manipulated in Linux with the efibootmgr utility. If the NVRAM contains no such entries or if they're all invalid, recent EFI implementations fallback to using the boot loader located at \EFI\BOOT\boot{arch}.efi, where {arch} is an architecture code, such as "x64" for x86-64 or "ia32" for x86.

All EFI executable images contain a PE/COFF header defining the format of the executable code. The code may be one of:

  • IA-32
  • x86-64 (aka X64)
  • Itaninum
  • ARM
  • Processor agnostic generic EFI byte code

ELILO, the kernel's EFI stub loader, Grub 2 (with EFI support), rEFIt, and rEFInd are all processor native executable code.

KERNEL configuration

Build the kernel with the following configuration.

  CONFIG_FB_EFI=y
  CONFIG_FRAMEBUFFER_CONSOLE=y

If EFI runtime services are expected, the following configuration should be selected.

  CONFIG_EFI=y
  CONFIG_EFI_VARS=y or m          # optional

To use the EFI stub loader, you must set the following option:

  CONFIG_EFI_STUB=y

The kernel can then be loaded from an EFI shell or by entering it into the EFI's boot list in NVRAM. Getting the options right can be tricky, though. Using rEFInd to launch a kernel with EFI stub support can simplify matters.

EFIBootLoaders (last edited 2023-12-07 18:11:36 by roguescholar)