| # |
| # Copyright (C) 2015 Google, Inc |
| # |
| # SPDX-License-Identifier: GPL-2.0+ |
| # |
| |
| EFI on U-Boot |
| ============= |
| This document provides information about the implementation of the UEFI API [1] |
| in U-Boot. |
| |
| |
| =========== Table of Contents =========== |
| |
| Motivation |
| How do I get it? |
| Status |
| Future work |
| |
| |
| Motivation |
| ---------- |
| |
| With this API support in place, you can run any UEFI payload (such as the Linux |
| kernel, grub2 or gummiboot) on U-Boot. This dramatically simplifies boot loader |
| configuration, as U-Boot based systems now look and feel (almost) the same way |
| as TianoCore based systems. |
| |
| How do I get it? |
| ---------------- |
| |
| EFI support for 32bit ARM and AArch64 is already included in U-Boot. All you |
| need to do is enable |
| |
| CONFIG_CMD_BOOTEFI=y |
| CONFIG_EFI_LOADER=y |
| |
| in your .config file and you will automatically get a bootefi command to run |
| an efi application as well as snippet in the default distro boot script that |
| scans for removable media efi binaries as fallback. |
| |
| Status |
| ------ |
| |
| I am successfully able to run grub2 and Linux EFI binaries with this code on |
| ARMv7 as well as AArch64 systems. |
| |
| When enabled, the resulting U-Boot binary only grows by ~10KB, so it's very |
| light weight. |
| |
| All storage devices are directly accessible from the uEFI payload |
| |
| Removable media booting (search for /efi/boot/boota{a64,arm}.efi) is supported. |
| |
| Simple use cases like "Plug this SD card into my ARM device and it just |
| boots into grub which boots into Linux", work very well. |
| |
| |
| Running HelloWord.efi |
| --------------------- |
| |
| You can run a simple 'hello world' EFI program in U-Boot. |
| Enable the option CONFIG_CMD_BOOTEFI_HELLO. |
| |
| Then you can boot into U-Boot and type: |
| |
| > bootefi hello |
| |
| The 'hello world EFI' program will then run, print a message and exit. |
| |
| |
| Future work |
| ----------- |
| |
| Of course, there are still a few things one could do on top: |
| |
| - Improve disk media detection (don't scan, use what information we |
| have) |
| - Add EFI variable support using NVRAM |
| - Add GFX support |
| - Make EFI Shell work |
| - Network device support |
| - Support for payload exit |
| - Payload Watchdog support |
| |
| [1] http://uefi.org/ |