The Minimum Platform is a software architecture that guides uniform delivery of Intel platforms enabling firmware solutions for basic boot functionality with extensibility built-in. Please see the EDK II Minimum Platform Draft Specification for more details.
Package maintainers for the Minimum Platform projects are listed in Maintainers.txt.
The key elements of the architecture are organized into a staged boot approach where each stage has requirements and
functionality for specific use cases. The generic control flow through the boot process is implemented in the
MinPlatformPkg
.
The generic nature of the tasks performed in MinPlatformPkg lends to reuse across all Intel platforms with no
source modification. Details for any particular board are made accessible to the MinPlatformPkg through a well-defined
statically linked board API. A complete platform solution then consists of the MinPlatformPkg and a compatible board
package.
The board packages supported by Intel follow the naming convention <xxx>OpenBoardPkg where xxx refers to the
encompassing platform name for a particular platform generation. For example, the KabylakeOpenBoardPkg
contains the
board code for Intel KabyLake reference systems. Intel uses the moniker «OpenBoardPkg» to indicate that this package
is the open source board code. A closed source counterpart may exist which simply uses «BoardPkg». Both directly use
the MinPlatformPkg from edk2-platforms.
Stage selection is controlled via the PCD gMinPlatformPkgTokenSpaceGuid.PcdBootStage
in MinPlatformPkg.dec
.
The stage should be configured in the board package DSC file to the appropriate value. For example, a board may disable
all advanced features by setting this value to 4 instead of 6. This may be used to improve boot time for a particular
use case. Decrementing the stage can also be used for debug since only the actions required for that stage objective
should be executed. As an example, ACPI initialization is not required for a Stage 3 boot.
The stages are defined as follows:
Stage | Functional Objective | Example Capabilities |
---|---|---|
I | Minimal Debug | Serial port output, source debug enabled, hardware debugger enabled |
II | Memory Functional | Basic hardware initialization necessary to reach memory initialization, permanent memory available |
III | Boot to UI | Simple console input and output to a UI, UEFI shell |
IV | Boot to OS | Boot an operating system with the minimally required features |
V | Security Enable | UEFI Secure Boot, TCG measured boot, DMA protections |
VI | Advanced Feature Enable | Firmware update, power management, non-essential I/O |
A UEFI firmware implementation using MinPlatformPkg is constructed using the following pieces.
EDK II |
Intel® FSP |
Minimum Platform (MinPlatformPkg ) |
Board Support (<xxx>OpenBoardPkg) |
KabylakeOpenBoardPkg
contains board implementations for KabyLake systems.PurleyOpenBoardPkg
contains board implementations for Purley systems.SimicsOpenBoardPkg
contains board implementations for the Simics hardware simulator.WhiskeylakeOpenBoardPkg
contains board implementations for WhiskeyLake systems.CometlakeOpenBoardPkg
contains board implementations for CometLake systems.TigerlakeOpenBoardPkg
contains board implementations for TigerLake systems.WhitleyOpenBoardPkg
contains board implementations for Ice Lake-SP and Cooper Lake systems.Machine Name | Supported Chipsets | BoardPkg | Board Name |
---|---|---|---|
UP Xtreme | Whiskey Lake | WhiskeylakeOpenBoardPkg | UpXtreme |
Intel Reference and Validation Platform
Machine Name | Supported Chipsets | BoardPkg | Board Name |
---|---|---|---|
RVP 3 | SkyLake, KabyLake, KabyLake Refresh | KabylakeOpenBoardPkg | KabylakeRvp3 |
WHL-U DDR4 RVP | WhiskeyLake | WhiskeylakeOpenBoardPkg | WhiskeylakeURvp |
CML-U LPDDR3 RVP | CometLake V1 | CometlakeOpenBoardPkg | CometlakeURvp |
TGL-U DDR4 RVP | TigerLake | TigerlakeOpenBoardPkg | TigerlakeURvp |
Wilson City RVP | IceLake-SP (Xeon Scalable) | WhitleyOpenBoardPkg | WilsonCityRvp |
Cooper City RVP | Copper Lake | WhitleyOpenBoardPkg | CooperCityRvp |
Note: RVP = Reference and Validation Platform
Machine Name | Supported Chipsets | BoardPkg | Board Name |
---|---|---|---|
Mt. Olympus | Purley | PurleyOpenBoardPkg | BoardMtOlympus |
Machine Name | Supported Chipsets | BoardPkg | Board Name |
---|---|---|---|
TiogaPass | Purley | PurleyOpenBoardPkg | BoardTiogaPass |
Machine Name | Supported Chipsets | BoardPkg | Board Name |
---|---|---|---|
Simics Quick Start Package | Nehalem | SimicsOpenBoardPkg | BoardX58Ich10 |
Galago Pro Laptop
Machine Name | Supported Chipsets | BoardPkg | Board Name |
---|---|---|---|
galp2 | KabyLake | KabylakeOpenBoardPkg | GalagoPro3 |
galp3 & galp3-b | KabyLake Refresh | KabylakeOpenBoardPkg | GalagoPro3 |
The board package follows the standard EDK II package structure with the following additional elements and guidelines:
Shared resources in the package root directory can include interfaces described in header files, library instances, firmware modules, binaries, etc. The UEFI firmware implementation is built using the process described below from the board-specific directory.
A board package must implement the board APIs defined in the MinPlatformPkg even if a «NULL» implementation is used to return back to the minimum platform caller.
C:\ASL
to match default tools_def.txt configuration.C:\NASM
to match default tools_def.txt configuration.Create a new directory for the EDK II WORKSPACE.
Download below repository to this WORKSPACE:
edk2 repository
git clone https://github.com/tianocore/edk2.git
edk2-platforms repository
git clone https://github.com/tianocore/edk2-platforms.git
edk2-non-osi repository
git clone https://github.com/tianocore/edk2-non-osi.git
FSP repository
git clone https://github.com/IntelFsp/FSP.git
Building with the python script
| Argument | Function | | ———————-|————————————-| | -h, –help | show this help message and exit | | –platform, -p | the platform to build | | –toolchain, -t | tool Chain to use in build process | | –DEBUG, -d | debug flag | | –RELEASE, -r | release flag | | –TEST_RELEASE, -tr | test Release flag | | –RELEASE_PDB, -rp | release flag | | –list, -l | lists available platforms | | –cleanall | cleans all | | –clean | cleans specified platform | | –capsule | capsule build enabled | | –silent | silent build enabled | | –performance | performance build enabled | | –fsp | fsp wrapper build enabled | | –fspapi | API mode fsp wrapper build enabled | | –hash | Enable hash-based caching | | –binary-destination | create cache in specified directory | | –binary-source | Consume cache from directory | | |
For more information on build options
Note
The Python build scripts were compatible with Python 2.7.16. But Python 2.x support is no longer maintained or recommended.
This python build script has been tested on Windows 10 and Ubuntu 18.04.1 LTS.
Unless otherwise noted, all boards build with the following components and versions:
Linux build: Ubuntu 18.04.1 LTS with GCC version 5.4.0
Windows build: Windows 10 with the Microsoft Visual Studio 2015 compiler
iASL version: 20190816
NASM version: 2.12.02
Unless otherwise noted all boards have been tested for boot to Windows 10 x64 RS3.
Configuration Files
Workspace view of the build scripts
WORKSPACE |——edk2 |——edk2-non-osi |——edk2-platforms | |—Platform | | |–Intel | | |——build.cfg: Default build settings. These are overridden by | | | platform specific settings (build_config.cfg) and | | | then command-line settings. | | | | | |——build_bios.py: Main build script. Generic pre-build, build, | | | post-build, and clean functions. | | | | | |——KabylakeOpenBoardPkg | | | |——GalagoPro3 | | | | |—build_config.cfg: System 76 Galago Pro 3 specific build | | | | settings environment variables. | | | |——KabylakeRvp3 | | | |—build_config.cfg: KabylakeRvp3 specific | | | | build settings, environment variables. | | | |—build_board.py: Optional board-specific pre-build, build | | | and clean post-build functions. | | | | | |——PurleyOpenBoardPkg | | | |——BoardMtOlympus | | | |—build_config.cfg: BoardMtOlympus specific | | | | build settings, environment variables. | | | |—build_board.py: Optional board-specific pre-build, | | | build, post-build and clean functions. | | |——PurleyOpenBoardPkg | | | |——BoardTiogaPass | | | |—build_config.cfg: BoardTiogaPass specific | | | | build settings, environment variables. | | | |—build_board.py: Optional board-specific pre-build, | | | build, post-build and clean functions.
| | | | | |——SimicsOpenBoardPkg | | | |——BoardX58Ich10 | | | |—build_config.cfg: BoardX58Ich10 specific | | | build settings, environment variables. | | | | | |——WhiskeylakeOpenBoardPkg | | | |——CooperCityRvp | | | | |—build_config.cfg: CooperCityRvp specific build | | | | settings environment variables. | | | |——WilsonCityRvp | | | |—build_config.cfg: WilsonCityRvp specific build | | | settings environment variables. | | | | | |——WhitleyOpenBoardPkg | | | |——UpXtreme | | | |—build_config.cfg: UpXtreme specific build | | | settings environment variables. | | | |——WhiskeylakeURvp | | | |—build_config.cfg: WhiskeylakeURvp specific build | | | settings environment variables. | | | | | |——CometlakeOpenBoardPkg | | | |——CometlakeURvp | | | |—build_config.cfg: CometlakeURvp specific build | | | settings environment variables. | | | | | |——TigerlakeOpenBoardPkg | | | |——TigerlakeURvp | | | |—build_config.cfg: TigerlakeURvp specific build | | | settings environment variables. | | | |——FSP
Building with the batch scripts
Only PurleyOpenBoardPkg still supports batch script build (in addition to Python build). Batch scripts are deprecated and will be removed from PurleyOpenBoardPkg in the future. All other board packages must only use the Python build infrastructure.
For PurleyOpenBoardPkg
For PurleyOpenBoardPkg (TiogaPass)
KabylakeOpenBoardPkg GalagoPro3
KabylakeRvp3
PurleyOpenBoardPkg
**PurleyOpenBoardPkg Tioga Pass **
LINUX Boot Support (PcdLinuxBootEnable needs to be enabled)
Follow directions on http://osresearch.net/Building/ to compile the heads kernel and initrd for qemu-system_x86_64
Copy the following built files (1) initrd.cpio.xz to LinuxBootPkg/LinuxBinaries/initrd.cpio.xz (2) bzimage to LinuxBootPkg/LinuxBinaries/linux.efi
SimicsOpenBoardPkg
WhiskeylakeOpenBoardPkg
CometlakeOpenBoardPkg
TigerlakeOpenBoardPkg
WhitleyOpenBoardPkg
In some cases, such as BoardModulePkg, a package may provide a set of functionality that is included in other packages. To test the build of the whole package, the «build» command should be used following the instructions below.
The full Intel firmware image on a flash device is called the Integrated Firmware Image (IFWI). Users with access to the Intel proprietary FITC tool and ME ingredients can build full IFWI images that may be flashed (Descriptor, UEFI FW, ME FW, etc.).
Users without such access can directly flash a custom built UEFI FW image over the highest area of the flash region directly. It is always recommended to have a hardware flash programmer accessible to recover the firmware image. The original full flash image should always be backed up so it may be flashed again for recovery. Please be aware that if a system supports a technology that authenticates the initial firmware boot image such as Boot Guard, it will fail to boot with a custom firmware image that is not signed properly.
If you would like to help but are not sure where to start some areas currently identified for improvement include:
Please feel free to contact Isaac Oram (isaac.w.oram at intel.com) if you would like to discuss contribution ideas.