EDK II FDF Specification
1.0.0
Search…
⌃K

3.6 [FV] Sections

One or more of theses sections is required for platform images, and not required for simple Option ROM generation.

Summary

This describes the [FV] section tag, which is required in all platform FDF files. This file is created by the platform integrator and is an input to the one or more parsing utilities.
Note that FvAttributes, listed below, may be set via PCD settings. Setting the attribute via PCD takes precedence over the FvAttributes settings in this FDF file. If the FvAttribute is not set by either a PCD or an FvAttribute line in the FDF file, then the default value is FALSE - the corresponding bit in the EFI_FV_ATTRIBUTE of the EFI_FIRMWARE_VOLUME_PROTOCOL.GetVolumeAttributes() is set per the FvAttributesSet or FvAttributesClear; items specified in FvAttributesSet are default "TRUE", while items in FvAttributesClear are default "FALSE".
If FV files are created, they will be created in the $(OUTPUT_DIRECTORY)/$(TARGET)_$(TAGNAME)/FV directory using the values from the individual instance of the build tools. (Build tools get these values after parsing DSC, INF, target.txt, tools_def.txt files and command line options).
Conditional statements may be used anywhere within this section.

Prototype

<FV> ::= "[FV" <FvUiName> "]" <FvStmts>*
<FvStmts> ::= {<ExtendedFvEntry>} {<FvStatements>} {<GlobalStmts>}
<FvUiName> ::= "." (a-zA-Z)(a-zA-Z0-9_)*
<ExtendedFvEntry> ::= <TS> "FV_EXT_ENTRY_TYPE" <MTS> "TYPE" <Eq>
<Hex4>
"{" [<EOL>]
{<TS> "FILE" <Eq> <BinaryFile> [<EOL>]}
{<TS> "DATA" <Eq> "{" <DataContent> "}" }
"}" <EOL>
<DataContent> ::= <TS> {<RawData>} {<CFormatGUID>} {<UINT8z>}
{<UINT16z>} {<UINT32z>} {<UINT64z>} [<EOL>]
<BinaryFile> ::= <PATH> <File> [<EOL>]
<FvStatements> ::= [<BlockStatements>]
[<FvAlignment>]
[<FvAttributes>]
[<FileSystemGuid>]
[<VariableSignatureGuid>]
[<VariabeRegionSize>]
[<FtwWorkingSpaceSize>]
[<FtwSpareSpaceSize>]
[<FvNameGuid>]
[<FvUsedSize>]
[<FvNameString>]
[<PeiAprioriSection>]
[<DxeAprioriSection>]
<InfStatements>*
<FileStatements>*
<GlobalStmts> ::= {<MacroDefinition>} {<IncludeStatement>}
<BlockStatements> ::= <FixedBlocks>
<FixedBlocks> ::= [<TS> "BlockSize" <Eq> <UINT32> <EOL>]
[<TS> "NumBlocks" <Eq> <UINT32> <EOL>]
<SetStatements> ::= <TS> "SET" <MTS> {<PcdName>} {<PcdFieldName>} <Eq> <VALUE> <EOL>
<VALUE> ::= {<Number>} {<Boolean>} {<GUID>} {<CArray>}
{<CString>} {<UnicodeString>} {<Expression>}{<Array>}{<OffsetOf>}
<FvAlignment> ::= [<TS> "FvBaseAddress" <Eq> <UINT64> <EOL>]
[<TS> "FvForceRebase" <Eq> <TrueFalse> <EOL>]
<TS> "FvAlignment" <Eq>
<FvAlignmentValues> <EOL>
<FvAttributes> ::= [<TS> "MEMORY_MAPPED" <Eq> <TrueFalse> <EOL>]
[<TS> "LOCK_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "LOCK_STATUS" <Eq> <TrueFalse> <EOL>]
[<TS> "WRITE_LOCK_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "WRITE_LOCK_STATUS" <Eq> <TrueFalse> <EOL>]
[<TS> "WRITE_ENABLED_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "WRITE_DISABLED_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "WRITE_STATUS" <Eq> <TrueFalse> <EOL>]
[<TS> "STICKY_WRITE" <Eq> <TrueFalse> <EOL>]
[<TS> "WRITE_POLICY_RELIABLE" <Eq> <TrueFalse> <EOL>]
[<TS> "READ_LOCK_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "READ_LOCK_STATUS" <Eq> <TrueFalse> <EOL>]
[<TS> "READ_ENABLED_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "READ_DISABLED_CAP" <Eq> <TrueFalse> <EOL>]
[<TS> "READ_STATUS" <Eq> <TrueFalse> <EOL>]
[<TS> "WEAK_ALIGNMENT" <Eq> <TrueFalse> <EOL>]
[<TS> "ERASE_POLARITY" <Eq> {"0"} {"1"} <EOL>]
<FileSystemGuid> ::= <TS> "FileSystemGuid" <Eq> <NamedGuidOrPcd> <EOL>
<VariableSignatureGuid> ::= <TS> "VariableSignatureGuid" <Eq> <NamedGuidOrPcd> <EOL>
<VariabeRegionSize> ::= <TS> "VariabeRegionSize" <Eq> <UINT32> <EOL>
<FtwWorkingSpaceSize> ::= <TS> "FtwWorkingSpaceSize" <Eq> <UINT32> <EOL>
<FtwSpareSpaceSize> ::= <TS> "FtwSpareSpaceSize" <Eq> <UINT32> <EOL>
<FvNameGuid> ::= <TS> "FvNameGuid" <Eq> <NamedGuidOrPcd> <EOL>
<FvUsedSize> ::= <TS> "FvUsedSizeEnable" <Eq> <TrueFalse> <EOL>
<FvNameString> ::= <TS> "FvNameString" <Eq> <TrueFalse> <EOL>
<PeiAprioriSection> ::= <TS> "APRIORI" <MTS> "PEI" <MTS>
"{" <EOL>
<MacroDefinition>*
<InfStatements>*
<FileStatements>*
<TS> "}" <EOL>
<DxeAprioriSection> ::= <TS> "APRIORI" <MTS> "DXE" <MTS>
"{" <EOL>
<MacroDefinition>*
<InfStatements>*
<FileStatements>*
<TS> "}" <EOL>
<InfStatements> ::= <TS> "INF" <MTS> [<InfOptions>] <InfFile>
<InfOptions> ::= [<Use>] [<Rule>] [<SetVer>] [<SetUi>]
<Use> ::= "USE" <Eq> <TargetArch> <MTS>
<TargetArch> ::= <arch>
<Rule> ::= "RuleOverride" <Eq> {<RuleUiName>} {"BINARY"}
<MTS>
<SetVer> ::= "VERSION" <Eq> <CString> <MTS>
<SetUi> ::= "UI" <Eq> <CString> <MTS>
<InfFile> ::= if (MODULE_TYPE == "SEC"
|| MODULE_TYPE == "PEI_CORE"
|| MODULE_TYPE == "PEIM"):
<PATH> <Word> ".inf" [<FS> <RelocFlags>] <EOL> else:
<PATH> <Word> ".inf" <EOL>
<RelocFlags> ::= {"RELOCS_STRIPPED"} {"RELOCS_RETAINED"}
<FileStatements> ::= {<type1>} {<type2>} {<type3>} {<type4>}
{<type5>} <EOL>
<type1> ::= <TS> "FILE" <MTS> <FvType1> <Eq> <NamedGuidOrPcd> <Options1>
<type2> ::= <TS> "FILE" <MTS> <FvType2> <Eq> <NamedGuidOrPcd> <Options2>
<type3> ::= <TS> "FILE" <MTS> "RAW" <Eq> <NamedGuidOrPcd>
<Options2>
<type4> ::= <TS> "FILE" <MTS> "NON_FFS_FILE" <Eq> [<NamedGuidOrPcd>]
<Options2>
<type5> ::= <TS> "FILE" <MTS> "FV_IMAGE" <Eq>
<NamedGuidOrPcd> <Options2>
<FvType1> ::= {"SEC"} {"PEI_CORE"} {"PEIM"}
<FvType2> ::= {"FREEFORM"} {"PEI_DXE_COMBO"} {"DRIVER"}
{"DXE_CORE"} {"APPLICATION"} {"SMM_CORE"} {"SMM"}
{"MM_CORE_STANDALONE"} {"MM_STANDALONE"}
<Options1> ::= [<Use>] [<FileOpts>] <RelocFlags> <MTS>
"{" [<EOL>]
{<Filename>} {<SectionData>} <TS> <TS> "}" [<EOL>]
<Options2> ::= [<Use>] [<FileOpts>] <MTS>
"{" [<EOL>]
<TS> {<Filename>} {<FileList>+} {<SectionData> <EOL>}
"}" <EOL>
<FileList> ::= <TS> [<FfsAlignment>] <NormalFile> <EOL>
<FileOpts> ::= ["FIXED" <MTS>] ["CHECKSUM" <MTS>]
[<FfsAlignment>]
<FfsAlignment> ::= "Align" <Eq> <FfsAlignmentValues> <MTS>
<Filename> ::= <TS> {<FvImage>} {<FdImage>} {<NormalFile>} <EOL>
<FvImage> ::= <TS> "FV" <Eq> <FvUiName> <EOL>
<FdImage> ::= <TS> "FD" <Eq> <FdUiName> <EOL>
<FdUiName> ::= {<Word>} {"common"}
<NormalFile> ::= <PATH> <Word> "." <Word> <EOL>
<SectionData> ::= <MacroDefinition>*
[<PeiAprioriSection>]
[<DxeAprioriSection>]
<EncapSec>*
<LeafSections>*
<LeafSections> ::= {<VerSection>} {<UiSec>} {<FvImgSection>}
{<DataSection>} {<DepexExpSection>}
<VerSection> ::= <TS> "SECTION" <MTS> [<VerArgs>] "VERSION" <VerUniArg>
<UiSec> ::= <TS> "SECTION" <MST> [<FfsAlignment>] "UI" <VerUniArg>
<FvImgSection> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] "FV_IMAGE"
<FvImgArgs>
<VerArgs> ::= [<FfsAlignment>] [<Build>]
<Build> ::= "BUILD_NUM" <Eq> <BuildVal> <MTS>
<BuildVal> ::= {<HexDigit> <HexDigit> <HexDigit> <HexDigit>}
{"$(BUILD_NUMBER)"}
<VerUniArg> ::= <Eq> {<StringData>} {<NormalFile>} <EOL>
<StringData> ::= {<UnicodeString>} {<QuotedString>}
<FvImgArgs> ::= <Eq> <FvUiName> <MTS>
"{" <EOL>
<MacroDefinition>*
<ExtendedFvEntry>*
[<FvAlignment>]
[<FvAttributes>]
[<PeiAprioriSection>]
[<DxeAprioriSection>]
<InfStatements>*
<FileStatements>*
<TS> "}" <EOL>
<DataSection> ::= {<KnownSection>} {<SubTypeGuid>}
<KnownSection> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] <SecData>
<SecData> ::= <LeafSecType> <MTS> [<ChkReloc> <MTS>]
<SectionOrFile>
<LeafSecType> ::= {"COMPAT16"} {"PE32"} {"PIC"} {"TE"} {"RAW"}
{"FV_IMAGE"} {"DXE_DEPEX"} {"SMM_DEPEX"}
{"UI"} {"PEI_DEPEX"} {"VERSION"}
<SubTypeGuid> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] <STG_Data>
<STG_Data> ::= "SUBTYPE_GUID" <MTS> <NamedGuidOrPcd> <Eq>
<NormalFile> <EOL>
<ChkReloc> ::= if ((LeafSectionType == "PE32"
|| LeafSectionType == "TE")
&& (MODULE_TYPE == "SEC"
|| MODULE_TYPE == "PEI_CORE"
|| MODULE_TYPE == "PEIM")): [<RelocFlags>]
<SectionOrFile> ::= {<Eq> <NormalFile> <EOL>} {<EncapSec>}
<EncapSec> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] <EncapSection>
<EOL>
<EncapSection> ::= {<CompressSection>} {<GuidedSection>}
<CompressSection> ::= <TS> "COMPRESS" <MTS> [<CompType>]
"{" <EOL>
<EncapSec>*
<LeafSections>*
<TS> "}" [<EOL>]
<CompType> ::= {"PI_STD"} {"PI_NONE"} <MTS>
<GuidedSection> ::= "GUIDED" <MTS> <NamedGuidOrPcd> <MTS>
[<GuidedOptions>]
"{" <EOL>
<EncapSec>*
<LeafSections>*
<TS> "}" [<EOL>]
<GuidedOptions> ::= [<GuidAttrPr>] [<GuidAttrASV>]
[<GuidHeaderSize>]
<GuidAttrPr> ::= "PROCESSING_REQUIRED" <Eq> <TrueFalse> <MTS>
<GuidAttrASV> ::= "AUTH_STATUS_VALID" <Eq> <TrueFalse> <MTS>
<GuidHeaderSize> ::= "EXTRA_HEADER_SIZE" <Eq> <Number> <MTS>
<DepexExpSection> ::= if ( COMPONENT_TYPE == "LIBRARY"
|| LIBRARY_CLASS is declared in defines section of INF
|| MODULE_TYPE == "USER_DEFINED" ):
[<Depex>]
else if ( MODULE_TYPE == "PEIM"
|| MODULE_TYPE == "DXE_DRIVER"
|| MODULE_TYPE == "DXE_RUNTIME_DRIVER"
|| MODULE_TYPE == "DXE_SAL_DRIVER"
|| MODULE_TYPE == "MM_STANDALONE"
|| MODULE_TYPE == "DXE_SMM_DRIVER" ):
<Depex>
else if ( MODULE_TYPE == "UEFI_APPLICATION"
&& MODULE_TYPE == "UEFI_DRIVER"
&& MODULE_TYPE == "PEI_CORE"
&& MODULE_TYPE == "DXE_CORE"
&& MODULE_TYPE == "SMM_CORE"
&& MODULE_TYPE == "MM_CORE_STANDALONE"
&& MODULE_TYPE == "SEC" ):
No DEPEX section is permitted
<Depex> ::= if (MODULE_TYPE == "PEIM"):
<PeiDepexExp>
else if (MODULE_TYPE == "DXE_SMM_DRIVER"):
<SmmDepexExp> [<DxeDepexExp>]
else if (MODULE_TYPE == "MM_STANDALONE"):
<SmmDepexExp>
else:
<DxeDepexExp>
<PeiDepexExp> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] "PEI_DEPEX_EXP"
<Eq> "{" [<EOL>] <PeiDepex> "}" <EOL>
<PeiDepex> ::= [<TS> <BoolStmt> {<EOL>} {<MTS>}]
[<TS> <DepInstruct> {<EOL>} {<MTS>}]
[<TS> "end" {<EOL>} {<MTS>}]
<BoolStmt> ::= {<Bool>} {<BoolExpress>}
{<GuidCName>} {<EOL>} {<MTS>}
<Bool> ::= {"TRUE"} {"FALSE"} {<GuidCName>}
<BoolExpress> ::= [<Not>] <GuidCName> [<OP> [<Not>] <GuidCName> ]*
<Not> ::= "NOT" <MTS>
<OP> ::= <MTS> {"AND"} {"OR"} <MTS>
<DepInstruct> ::= "push" <MTS> <Filename>
<DxeDepexExp> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] "DXE_DEPEX_EXP"
<Eq> "{" [<EOL>] <DxeDepex> "}" <EOL>
<DxeDepex> ::= [<TS> <SorStmt> {<EOL>} {<MTS>}]
[<TS> <GuidStmt> {<EOL>} {<MTS>}]
[<TS> <BoolStmt> {<EOL>} {<MTS>}]
[<TS> <DepInstruct> {<EOL>} {<MTS>}]
[<TS> "END" {<EOL>} {<MTS>}]
<SorStmt> ::= "SOR" <BoolStmt>
<GuidStmt> ::= {"before"} {"after"} <MTS> <Filename>
<SmmDepexExp> ::= <TS> "SECTION" <MTS> [<FfsAlignment>] "SMM_DEPEX_EXP"
<Eq> "{" [<EOL>] <DxeDepex> "}" <EOL>
Note: The VariableSignatureGuid and VariabeRegionSize must exist when FileSystemGuid value is same as FFF12B8D-7696-4C8B-A9852747075B4F50.

Restrictions

Filename
For BINARY ONLY content (UEFI_DRIVER and UEFI_APPLICATION .efi files) the file names specified in the elements (FILE and SECTION) of this section must be relative to the directory identified by the WORKSPACE or relative to a path listed in the PACKAGES_PATH system environment variable.
TargetArch
Only specific architectures are permitted - use of "common" is prohibited.
FvBaseAddress
The FvBaseAddress, if present, must be listed before the FvAlignment element. If present, the FvForceRebase must immediately follow the FvBaseAddress.

Parameters

FvBaseAddress
A UINT64 value that will be used to rebase the code to run at a different address than the address specified by the location of the FV in the FD section.
SUBTYPE_GUID
This is short hand notation refering to content that will be placed in a Section of type: EFI_SECTION_FREEFORM_SUBTYPE_GUID. A single
EFI_SECTION_FREEFORM_SUBTYPE_GUID section is permitted in an FFS File of type EFI_FV_FILETYPE_FREEFORM
Expression
Refer to the EDK II Expression Syntax Specification for more information.
COMPRESS
Compression sections that use PI_STD compression do not have PROCESSING_REQUIRED = TRUE flag, it is only required for GUIDED sections.
User Interface (UI) entries
There are three possible methods for specifying a User Interface string. 1) Specify the string value in the FDF file, 2) specify a ASCII plain text file that has an extension of ".ui" or 3) specify a Unicode file with an extension of ".uni" that contains a single Unicode string.
Paths
Unless otherwise noted, all file paths are relative to the WORKSPACE directory or relative to a directory listed in the PACKAGESPATH. In some cases, the tools will search well known paths for some files, for example, for FD filenames, the output will typically be located in the `$(OUTPUT_DIRECTORY)/$(TARGET)$(TAGNAME)/FV` directory.
Note that no space characters are permitted on the left side of the expression (before the equal sign).
Target
This value must match a target identifier in the EDK II tools_def.txt file - the first field, where fields are separated by the underscore character. Wildcard characters are not permitted.
TagName
This must match a tag name field in the EDK II tools_def.txt file - second field. Wildcard characters are not permitted.

Example

[Fv.Root]
FvAlignment = 64
ERASE_POLARITY = 1
MEMORY_MAPPED = TRUE
STICKY_WRITE = TRUE
LOCK_CAP = TRUE
LOCK_STATUS = TRUE
WRITE_DISABLED_CAP = TRUE
WRITE_ENABLED_CAP = TRUE
WRITE_STATUS = TRUE
WRITE_LOCK_CAP = TRUE
WRITE_LOCK_STATUS = TRUE
READ_DISABLED_CAP = TRUE
READ_ENABLED_CAP = TRUE
READ_STATUS = TRUE
READ_LOCK_CAP = TRUE
READ_LOCK_STATUS = TRUE
INF VERSION = "1" $(WORKSPACE)/EdkNt32Pkg/Dxe/WinNtThunk/Cpu/Cpu.inf
FILE DXE_CORE = B5596C75-37A2-4b69-B40B-72ABD6DD8708 {
SECTION COMPRESS {
DEFINE DC = $(WORKSPACE)/Build/Nt32/DEBUG_IA32
SECTION PE32 = $(DC)/B5596C75-37A2-4b69-B40B-72ABD6DD8708-DxeCore.efi
}
}
FILE FREEFORM = 85C3EBE1-F58F-4820-8AD3-F2FB62DC3A23 {
FvAlignment = 512K
SECTION SUBTYPE_GUID AFC13561-9A65-4754-9C93-E133B3B8767C = $(WORKSPACE)/MyPackage/MyNewType/Binary/newform.bin
}
FILE FV_IMAGE = EF41A0E1 - 40B1 - 481f - 958E-6FB4D9B12E76 {
FvAlignment = 512K
WRITE_POLICY_RELIABLE = TRUE
SECTION GUIDED 3EA022A4-1439-4ff2-B4E4-A6F65A13A9AB {
SECTION FV_IMAGE = Dxe {
APRIORI DXE {
INF $(WORKSPACE)/a/a.inf
INF $(EDK_SOURCE/a/c/c.inf
INF $(WORKSPACE)/a/b/b.inf
}
INF a/d/d.inf
...
}
}
}
DEFINE SAMPLE = $(EDK_SOURCE)/Sample
INF $(SAMPLE)/Universal/Network/Ip4/Dxe/Ip4.inf
INF $(SAMPLE)/Universal/Network/Ip4Config/Dxe/Ip4Config.inf
INF $(SAMPLE)/Universal/Network/Udp4/Dxe/Udp4.inf
INF $(SAMPLE)/Universal/Network/Tcp4/Dxe/Tcp4.inf
INF $(SAMPLE)/Universal/Network/Dhcp4/Dxe/Dhcp4.inf
INF $(SAMPLE)/Universal/Network/Mtftp4/Dxe/Mtftp4.inf
INF $(SAMPLE)/Universal/Network/SnpNt32/Dxe/SnpNt32.inf
FILE RAW = 197DB236-F856-4924-90F8-CDF12FB975F3 {
$(OUTPUT_DIRECTORY)/$(TARGET)_$(TOOL_CHAIN_TAG)/$PLATFORM_ARCH)/File.bin
}
FILE RAW = 197DB236-F856-4924-90F8-CDF12FB975F3 {
Align=16 $(PLATFORM_PACKAGE)/Binaries/File1.pdb
Align=16 $(PLATFORM_PACKAGE)/Binaries/File2.pdb
Align=16 $(PLATFORM_PACKAGE)/Binaries/File3.pdb
}