Skip to content

FDF Include File in Detail

This readme aims to describe FrontpageDsc.inc in detail, providing details and justification for the libraries and components included for Frontpage.

Preliminaries

What is an FDF File

The .fdf filetype is an EDK2 Platform Description file format. The FDF file is used to describe the content and layout of binary images. It is used in conjunction with an EDK2 DSC file to generate bootable images, option ROM images, and update capsules for bootable images that comply with the UEFI specifications. To learn more about FDF files, look at the specification on the tianocore-docs github.

What is an INF File

The .inf filetype is an EDK2 Platform Description file format. The INF file describes properties of a module, how it is coded, what it provides, what it depends on, architecture specific items, features, etc. regarding the module. To learn more about INF files, look at the specification on the tianocore-docs github.

How do I Include an FDF File

This file will be included in the DSC file for the platform being built. The syntax for including a file is:

!include path/to/fdf/inc/file

What is DFCI

From the feature document: The Device Firmware Configuration Interface (DFCI) brings new levels of security and usability to PC configuration management. It is a new feature of UEFI that enables secure programmatic configuration of hardware settings that are typically configured within a BIOS menu.

FDF Breakdown

This first line is a comment simply alerting the dev to include this file at some point under the [FV.FvMain] section of the platform FDF file.

# Continuation of [FV.FvMain]

Finds and takes ownership of gEfiGraphicsOutputProtocolGuid so RenderingEngine can use it by uninstalling it on its current handle and reinstalling it on a new one.

INF MsGraphicsPkg/GopOverrideDxe/GopOverrideDxe.inf

AuthManager provides authentication for DFCI.

INF DfciPkg/IdentityAndAuthManager/IdentityAndAuthManagerDxe.inf

The main component of DFCI which manages and enforces all DFCI settings

INF DfciPkg/SettingsManager/SettingsManagerDxe.inf

Installs protocol to share the UI theme.

INF MsGraphicsPkg/MsUiTheme/Dxe/MsUiThemeProtocol.inf

Produces EfiGraphicsOutputProtocol to draw graphics to the screen

INF MsGraphicsPkg/RenderingEngineDxe/RenderingEngineDxe.inf

Produces gEdkiiFormDisplayEngineProtocolGuid protocol which handles input and displays strings

INF MsGraphicsPkg/DisplayEngineDxe/DisplayEngineDxe.inf

Application that presents & manages the Boot Menu Setup on Front Page.

INF OemPkg/BootMenu/BootMenu.inf

Application that presents and manages FrontPage.

INF OemPkg/FrontPage/FrontPage.inf

Enables MsBootPolicy which implements the desired boot behavior when no UEFI boot options are present (or they failed) and a alternate boot has been requested (ex. booting from USB).

INF PcBdsPkg/MsBootPolicy/MsBootPolicy.inf

A module which produces Boot Manager Policy protocol.

INF MdeModulePkg/Universal/BootManagerPolicyDxe/BootManagerPolicyDxe.inf

A regular expression library to support Remote/IT/Admin Settings such as DFCI.

INF MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.inf

Processes ingoing and outgoing DFCI settings requests

INF DfciPkg/DfciManager/DfciManager.inf

Driver for On Screen Keyboard.

INF MsGraphicsPkg/OnScreenKeyboardDxe/OnScreenKeyboardDxe.inf

Spoofs button press to automatically boot to FrontPage.

INF OemPkg/FrontpageButtonsVolumeUp/FrontpageButtonsVolumeUp.inf

Manages windows and fonts to be drawn by the rendering engine

INF MsGraphicsPkg/SimpleWindowManagerDxe/SimpleWindowManagerDxe.inf

This final bit places the bmp files and shell.efi file within this firmware volume so they can be accessed by UEFI drivers.

  FILE APPLICATION=PCD(gPcBdsPkgTokenSpaceGuid.PcdShellFile) {
    SECTION PE32=$(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/AARCH64/Shell.efi
    SECTION UI= "EdkShell"
  }
  FILE FREEFORM = PCD(gOemPkgTokenSpaceGuid.PcdLogoFile) {
    SECTION RAW = OemPkg/FrontPage/Resources/BootLogo.bmp
    SECTION UI = "Logo"
  }
  FILE FREEFORM = PCD(gOemPkgTokenSpaceGuid.PcdFrontPageLogoFile) {
    SECTION RAW = OemPkg/FrontPage/Resources/FrontpageLogo.bmp
  }
  FILE FREEFORM = PCD(gOemPkgTokenSpaceGuid.PcdLowBatteryFile) {
    SECTION RAW = OemPkg/FrontPage/Resources/LBAT.bmp
  }
  FILE FREEFORM = PCD(gOemPkgTokenSpaceGuid.PcdThermalFile) {
    SECTION RAW = OemPkg/FrontPage/Resources/THOT.bmp
  }