TianoCore EDK II

Last updated
Developer(s) Intel
Repository github.com/tianocore/edk2
License BSD-2-Clause-Patent
Website www.tianocore.org   OOjs UI icon edit-ltr-progressive.svg

TianoCore EDK II (formerly Tiano) is the reference implementation of UEFI by Intel. EDK is the abbreviation for EFI Development Kit and is developed by the TianoCore community. [1] TianoCore EDK II is the de facto standard generic UEFI services implementation. [2]

Contents

History

In 2004, Intel released their "Foundation Code" of their EFI implementation using a free license. [1] The resulting code formed the basis of the community-run EDK project on SourceForge, started in 2004. The name "Tiano" was present in the initial Intel code. [3] The last update to the EDK (version 1) project happened in May 2010. [4] Version 2 is in active development. [5] [ non-primary source needed ]

An "edk2" project was imported into SourceForge in April 2006, with a package-oriented code base again written by Intel. The initial "DeveloperManual" referred to this project as "Tiano R9". [6] In 2008, a stable, validated version of EDK II was tagged as "UEFI Development Kit 2008" (UDK2008). The tag includes a BuildNotes.txt dating to November 2006 describing the code found in the initial import, and a BuildNotes2.txt describing modules added in May 2008. [7] UDK2010 was the first version of EDK II to be widely known. [8] Intel would continue to validate certain snapshots of EDK II as UDK until 2018, when EDK II moved into a "stable tag" format. [9]

Although EDK II implements the UEFI specification, it is not endorsed by the UEFI Forum. [1]

Projects

UEFI shell 2.2, a part of TianoCore EDK II UEFI shell 2.2 screenshot.png
UEFI shell 2.2, a part of TianoCore EDK II

EDK II code has been integrated into other projects.

A part of TianoCore is the UEFI shell. When a specific UEFI vendor does not provide a UEFI shell, the one from TianoCore can be used. [10]

Coreboot

Google uses a version of coreboot modified to launch Tiano. This feature is called PIANO (payload into Tiano) or tianocoreboot. PIANO code was merged into coreboot in 2013. [11] The code was updated to be compatible with EDK II in 2017. [12]

EDK2 source code includes instructions for building as a payload for coreboot or Intel's "slim bootloader". [13]

Project Mu

Project Mu is a fork of EDK-II by Microsoft. [14] [15] It is an open source release of the UEFI core used in Microsoft Surface and Hyper-V products initiated by Microsoft in December 2018. [16] The project promotes the idea of Firmware as a Service. [17] The project was started to replace TianoCore's edk2 implementation to improve quality tests of the competing open source UEFI core. [18]

EFIDroid

EFIDroid is a bootloader for Android devices based on Snapdragon processors that is based on EDK-II. [19]

LogoFAIL vulnerability

In December 2023 a vulnerability termed "LogoFAIL" was discovered associated with EDK II which enabled an attacker to insert their own code in place of custom boot logo bitmap loader modules. [20]

Related Research Articles

<span class="mw-page-title-main">GNU GRUB</span> Boot loader package

GNU GRUB is a boot loader package from the GNU Project. GRUB is the reference implementation of the Free Software Foundation's Multiboot Specification, which provides a user the choice to boot one of multiple operating systems installed on a computer or select a specific kernel configuration available on a particular operating system's partitions.

<span class="mw-page-title-main">UEFI</span> Operating system and firmware specification

Unified Extensible Firmware Interface is a specification that defines the architecture of the platform firmware used for booting the computer hardware and its interface for interaction with the operating system. Examples of firmware that implement the specification are AMI Aptio, Phoenix SecureCore, TianoCore EDK II, InsydeH2O. UEFI replaces the BIOS which was present in the boot ROM of all personal computers that are IBM PC compatible, although it can provide backwards compatibility with the BIOS using CSM booting. Intel developed the original Extensible Firmware Interface (EFI) specification. Some of the EFI's practices and data formats mirror those of Microsoft Windows. In 2005, UEFI deprecated EFI 1.10.

coreboot Open-source computer firmware

coreboot, formerly known as LinuxBIOS, is a software project aimed at replacing proprietary firmware found in most computers with a lightweight firmware designed to perform only the minimum number of tasks necessary to load and run a modern 32-bit or 64-bit operating system.

In computing, the System Management BIOS (SMBIOS) specification defines data structures that can be used to read management information produced by the BIOS of a computer. This eliminates the need for the operating system to probe hardware directly to discover what devices are present in the computer. The SMBIOS specification is produced by the Distributed Management Task Force (DMTF), a non-profit standards development organization. The DMTF estimates that two billion client and server systems implement SMBIOS.

<span class="mw-page-title-main">Free and open-source graphics device driver</span> Software that controls computer-graphics hardware

A free and open-source graphics device driver is a software stack which controls computer-graphics hardware and supports graphics-rendering application programming interfaces (APIs) and is released under a free and open-source software license. Graphics device drivers are written for specific hardware to work within a specific operating system kernel and to support a range of APIs used by applications to access the graphics hardware. They may also control output to the display if the display driver is part of the graphics hardware. Most free and open-source graphics device drivers are developed by the Mesa project. The driver is made up of a compiler, a rendering API, and software which manages access to the graphics hardware.

<span class="mw-page-title-main">UEFI Forum</span> Non-profit corporation based in Oregon

UEFI Forum, Inc. is an alliance between technology companies to coordinate the development of the UEFI specifications. The board of directors includes representatives from twelve promoter companies: AMD, American Megatrends, ARM, Apple, Dell, Hewlett Packard Enterprise, HP Inc., Insyde Software, Intel, Lenovo, Microsoft, and Phoenix Technologies.

Advanced Configuration and Power Interface (ACPI) is an open standard that operating systems can use to discover and configure computer hardware components, to perform power management, auto configuration, and status monitoring. It was first released in December 1996. ACPI aims to replace Advanced Power Management (APM), the MultiProcessor Specification, and the Plug and Play BIOS (PnP) Specification. ACPI brings power management under the control of the operating system, as opposed to the previous BIOS-centric system that relied on platform-specific firmware to determine power management and configuration policies. The specification is central to the Operating System-directed configuration and Power Management (OSPM) system. ACPI defines hardware abstraction interfaces between the device's firmware, the computer hardware components, and the operating systems.

<span class="mw-page-title-main">GUID Partition Table</span> Computer disk partitioning standard

The GUID Partition Table (GPT) is a standard for the layout of partition tables of a physical computer storage device, such as a hard disk drive or solid-state drive, using universally unique identifiers (UUIDs), which are also known as globally unique identifiers (GUIDs). Forming a part of the Unified Extensible Firmware Interface (UEFI) standard, it is nevertheless also used for some BIOSs, because of the limitations of master boot record (MBR) partition tables, which use 32 bits for logical block addressing (LBA) of traditional 512-byte disk sectors.

<span class="mw-page-title-main">Trusted Platform Module</span> Standard for secure cryptoprocessors

Trusted Platform Module (TPM) is an international standard for a secure cryptoprocessor, a dedicated microcontroller designed to secure hardware through integrated cryptographic keys. The term can also refer to a chip conforming to the standard ISO/IEC 11889.

System Management Mode is an operating mode of x86 central processor units (CPUs) in which all normal execution, including the operating system, is suspended. An alternate software system which usually resides in the computer's firmware, or a hardware-assisted debugger, is then executed with high privileges.

<span class="mw-page-title-main">Das U-Boot</span> Open-source, primary boot the devices operating system kernel

Das U-Boot is an open-source boot loader used in embedded devices to perform various low-level hardware initialization tasks and boot the device's operating system kernel. It is available for a number of computer architectures, including 68k, ARM, Blackfin, MicroBlaze, IBM S360, My66, Motorola 68000, MOS 6502, ARM64, MIPS, Nios, SuperH, PPC, RISC-V and x86.

<span class="mw-page-title-main">EFI system partition</span> Partition used by Unified Extensible Firmware Interface

The EFIsystem partition or ESP is a partition on a data storage device that is used by computers that have the Unified Extensible Firmware Interface (UEFI). When a computer is booted, UEFI firmware loads files stored on the ESP to start operating systems and various utilities.

In the context of free and open-source software, proprietary software only available as a binary executable is referred to as a blob or binary blob. The term usually refers to a device driver module loaded into the kernel of an open-source operating system, and is sometimes also applied to code running outside the kernel, such as system firmware images, microcode updates, or userland programs. The term blob was first used in database management systems to describe a collection of binary data stored as a single entity.

<span class="mw-page-title-main">SeaBIOS</span> Open-source implementation of x86 BIOS

SeaBIOS is an open-source implementation of an x86 BIOS, serving as a freely available firmware for x86 systems. Aiming for compatibility, it supports standard BIOS features and calling interfaces that are implemented by a typical proprietary x86 BIOS. SeaBIOS can either run on bare hardware as a coreboot payload, or can be used directly in emulators such as QEMU and Bochs.

<span class="mw-page-title-main">Fastboot</span> Recovery mode included in Android mobile operating system

Fastboot is a communication protocol used primarily with Android devices. It is implemented in a command-line interface tool of the same name and as a mode of the bootloader of Android devices. The tool is included with the Android SDK package and used primarily to modify the flash filesystem via a USB connection from a host computer. It requires that the device be started in Fastboot mode. If the mode is enabled, it will accept a specific set of commands, sent through USB bulk transfers. Fastboot on some devices allows unlocking the bootloader, and subsequently, enables installing custom recovery image and custom ROM on the device. Fastboot does not require USB debugging to be enabled on the device. To use fastboot, a specific combination of keys must be held during boot.

rEFInd Boot manager for UEFI systems

rEFInd is a boot manager for UEFI and EFI-based machines. It can be used to boot multiple operating systems that are installed on a single non-volatile device. It also provides a way to launch UEFI applications.

fwupd is an open-source daemon for managing the installation of firmware updates on Linux-based systems, developed by GNOME maintainer Richard Hughes. It is designed primarily for servicing the Unified Extensible Firmware Interface (UEFI) firmware on supported devices via EFI System Resource Table (ESRT) and UEFI Capsule, which is supported in Linux kernel 4.2 and later. Previously, the initiation of UEFI firmware updates within an operating system could, on most systems, only be performed using Microsoft Windows or DOS-specific software. ESRT allows the firmware to expose updatable components to the operating system, which can pass a UEFI capsule with updated firmware for processing and installation on the next boot. Updates can be exposed via a command line tool, or within graphical package managers via a D-Bus interface.

iBoot is the stage 2 bootloader for all Apple products. It replaces the old bootloader, BootX. Compared with its predecessor, iBoot improves authentication performed in the boot chain.

<span class="mw-page-title-main">LinuxBoot</span> Free software firmware project

LinuxBoot is a free software project aimed at replacing most of the Driver Execution Environment (DXE) modules in Unified Extensible Firmware Interface (UEFI) firmware with the Linux kernel. LinuxBoot must run on top of hardware initialisation software in order to start. This can be the Pre-EFI Initialization (PEI) part of UEFI, coreboot, or U-Boot. It can boot Linux through the kexec syscall, but is also able to boot Windows with a different method.

LogoFAIL is a security vulnerability and exploit thereof that affects computer motherboard firmware with TianoCore EDK II, including Insyde Software's InsydeH2O modules and similar code in AMI, and Phoenix firmware, which are commonly found on both Intel and AMD motherboards, and which enable loading of custom boot logos. The exploit was discovered in December 2023 by researchers at Binarly.

References

  1. 1 2 3 "What is TianoCore?". www.tianocore.org. Retrieved 2021-03-26.
  2. Häuser, Marvin; Cheptsov, Vitaly (2020). "Securing the EDK II Image Loader". 2020 Ivannikov Ispras Open Conference (ISPRAS). pp. 16–25. arXiv: 2012.05471 . doi:10.1109/ISPRAS51486.2020.00010. ISBN   978-1-6654-1291-9. S2CID   228084173.
  3. "tianocore/edk". tianocore. 9 March 2023.
  4. "Commits · tianocore/edk". GitHub.
  5. "Releases · tianocore/edk2". GitHub. Retrieved 2024-02-23.
  6. "EDK II / Code / [r29574] /tags/InitialImport". sourceforge.net.
  7. "EDK II Project". tianocore. 18 May 2023.
  8. Barry, Peter (2012). Modern embedded computing : designing connected, pervasive, media-rich systems. Patrick Crowley. Amsterdam: Elsevier/Morgan Kaufmann. p. 173. ISBN   978-0-12-394407-8. OCLC   778434967.
  9. "UDK". tianocore documentation (GitHub).
  10. Babar, Yogesh (2020). Hands-on booting learn the boot process of Linux, Windows, and Unix. Berkeley, CA: Apress L. P. p. 119. ISBN   978-1-4842-5890-3. OCLC   1164505064.
  11. "Google Pushes "Project PIANO" Into Coreboot - Phoronix". www.phoronix.com. Retrieved 2021-03-26.
  12. "Coreboot Now Has Basic UEFI Support Working With TianoCore - Phoronix". www.phoronix.com. Retrieved 2021-03-26.
  13. "EDK II Project: BuildAndIntegrationInstructions.txt". GitHub. tianocore. 18 May 2023.
  14. "Microsoft releases Mu open-source UEFI firmware | bit-tech.net". Bit-tech . Retrieved 2021-03-26.
  15. "Microsoft Announces "Project Mu" For Open-Source UEFI Alternative To TianoCore - Phoronix". www.phoronix.com. Retrieved 2021-03-26.
  16. Microsoft Announces "Project Mu" For Open-Source UEFI Alternative To TianoCore - Phoronix
  17. "Microsoft announces Project Mu, an open-source release of the UEFI core". 20 December 2018.
  18. "Microsoft announces Project Mu to promote Firmware as a Service". 16 June 2023.
  19. "EFIDroid: A Second-Stage Bootloader Using UEFI Firmware to Multiboot [XDA Spotlight]". xda-developers. 2017-03-06. Retrieved 2021-03-26.
  20. "The Far-Reaching Consequences of LogoFAIL". Binarly. November 29, 2023.