[edk2-devel] 回复: [PATCH v2] BaseTools: Add support for SUBTYPE_GUID section generation
gaoliming via groups.io
gaoliming=byosoft.com.cn at groups.io
Tue Sep 27 02:25:53 UTC 2022
Bob:
Can you help review this patch?
Thanks
Liming
> -----邮件原件-----
> 发件人: Konstantin Aladyshev <aladyshev22 at gmail.com>
> 发送时间: 2022年8月30日 18:19
> 收件人: devel at edk2.groups.io
> 抄送: bob.c.feng at intel.com; gaoliming at byosoft.com.cn;
> yuwei.chen at intel.com; Konstantin Aladyshev <aladyshev22 at gmail.com>
> 主题: [PATCH v2] BaseTools: Add support for SUBTYPE_GUID section
> generation
>
> EFI_SECTION_FREEFORM_SUBTYPE_GUID is a leaf section type that contains
> a single EFI_GUID in the header to describe the raw data.
> Currently is is not possible to generate such section.
> This patch adds initial support for the generation of such sections.
> The added syntax for this type of section corresponds to EDKII
> "[FV] section" documentation from the FDF Specification:
> ```
> SECTION SUBTYPE_GUID <GUID> = <File>
> ```
>
> Signed-off-by: Konstantin Aladyshev <aladyshev22 at gmail.com>
> ---
> .../Source/Python/CommonDataClass/FdfClass.py | 12 +++
> BaseTools/Source/Python/GenFds/FdfParser.py | 22 ++++++
> .../Python/GenFds/SubTypeGuidSection.py | 76
> +++++++++++++++++++
> 3 files changed, 110 insertions(+)
> create mode 100644
> BaseTools/Source/Python/GenFds/SubTypeGuidSection.py
>
> diff --git a/BaseTools/Source/Python/CommonDataClass/FdfClass.py
> b/BaseTools/Source/Python/CommonDataClass/FdfClass.py
> index 2fbb7b436a..c8cfdaae32 100644
> --- a/BaseTools/Source/Python/CommonDataClass/FdfClass.py
> +++ b/BaseTools/Source/Python/CommonDataClass/FdfClass.py
> @@ -190,6 +190,18 @@ class GuidSectionClassObject (SectionClassObject) :
> self.FvParentAddr = None
>
> self.IncludeFvSection = False
>
>
>
> +## SubType GUID section data in FDF
>
> +#
>
> +#
>
> +class SubTypeGuidSectionClassObject (SectionClassObject) :
>
> + ## The constructor
>
> + #
>
> + # @param self The object pointer
>
> + #
>
> + def __init__(self):
>
> + SectionClassObject.__init__(self)
>
> + self.SubTypeGuid = None
>
> +
>
> ## UI section data in FDF
>
> #
>
> #
>
> diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py
> b/BaseTools/Source/Python/GenFds/FdfParser.py
> index 693e62de7e..a9a14ca2bb 100644
> --- a/BaseTools/Source/Python/GenFds/FdfParser.py
> +++ b/BaseTools/Source/Python/GenFds/FdfParser.py
> @@ -42,6 +42,7 @@ from .DataSection import DataSection
> from .DepexSection import DepexSection
>
> from .CompressSection import CompressSection
>
> from .GuidSection import GuidSection
>
> +from .SubTypeGuidSection import SubTypeGuidSection
>
> from .Capsule import EFI_CERT_TYPE_PKCS7_GUID,
> EFI_CERT_TYPE_RSA2048_SHA256_GUID, Capsule
>
> from .CapsuleData import CapsuleFfs, CapsulePayload, CapsuleFv,
CapsuleFd,
> CapsuleAnyFile, CapsuleAfile
>
> from .RuleComplexFile import RuleComplexFile
>
> @@ -2892,6 +2893,27 @@ class FdfParser:
> DepexSectionObj.Expression =
> self._SkippedChars.rstrip(T_CHAR_BRACE_R)
>
> Obj.SectionList.append(DepexSectionObj)
>
>
>
> + elif self._IsKeyword("SUBTYPE_GUID"):
>
> + if AlignValue == 'Auto':
>
> + raise Warning("Auto alignment can only be used in PE32
> or TE section ", self.FileName, self.CurrentLineNumber)
>
> + SubTypeGuidValue = None
>
> + if not self._GetNextGuid():
>
> + raise Warning.Expected("GUID", self.FileName,
> self.CurrentLineNumber)
>
> + else:
>
> + SubTypeGuidValue = self._Token
>
> +
>
> + if not self._IsToken(TAB_EQUAL_SPLIT):
>
> + raise Warning.ExpectedEquals(self.FileName,
> self.CurrentLineNumber)
>
> + if not self._GetNextToken():
>
> + raise Warning.Expected("section file path",
> self.FileName, self.CurrentLineNumber)
>
> + FileName = self._Token
>
> +
>
> + SubTypeGuidSectionObj = SubTypeGuidSection()
>
> + SubTypeGuidSectionObj.Alignment = AlignValue
>
> + SubTypeGuidSectionObj.SubTypeGuid = SubTypeGuidValue
>
> + SubTypeGuidSectionObj.SectFileName = FileName
>
> + Obj.SectionList.append(SubTypeGuidSectionObj)
>
> +
>
> else:
>
> if not self._GetNextWord():
>
> raise Warning.Expected("section type", self.FileName,
> self.CurrentLineNumber)
>
> diff --git a/BaseTools/Source/Python/GenFds/SubTypeGuidSection.py
> b/BaseTools/Source/Python/GenFds/SubTypeGuidSection.py
> new file mode 100644
> index 0000000000..d522380117
> --- /dev/null
> +++ b/BaseTools/Source/Python/GenFds/SubTypeGuidSection.py
> @@ -0,0 +1,76 @@
> +## @file
>
> +# process Subtype GUIDed section generation
>
> +#
>
> +# Copyright (c) 2022, Konstantin Aladyshev <aladyshev22 at gmail.com>
>
> +#
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +
>
> +##
>
> +# Import Modules
>
> +#
>
> +from __future__ import absolute_import
>
> +from . import Section
>
> +import subprocess
>
> +from .Ffs import SectionSuffix
>
> +import Common.LongFilePathOs as os
>
> +from .GenFdsGlobalVariable import GenFdsGlobalVariable
>
> +from .GenFdsGlobalVariable import FindExtendTool
>
> +from CommonDataClass.FdfClass import SubTypeGuidSectionClassObject
>
> +import sys
>
> +from Common import EdkLogger
>
> +from Common.BuildToolError import *
>
> +from .FvImageSection import FvImageSection
>
> +from Common.LongFilePathSupport import OpenLongFilePath as open
>
> +from Common.DataType import *
>
> +
>
> +## generate SubType GUIDed section
>
> +#
>
> +#
>
> +class SubTypeGuidSection(SubTypeGuidSectionClassObject) :
>
> +
>
> + ## The constructor
>
> + #
>
> + # @param self The object pointer
>
> + #
>
> + def __init__(self):
>
> + SubTypeGuidSectionClassObject.__init__(self)
>
> +
>
> + ## GenSection() method
>
> + #
>
> + # Generate GUIDed section
>
> + #
>
> + # @param self The object pointer
>
> + # @param OutputPath Where to place output file
>
> + # @param ModuleName Which module this section belongs to
>
> + # @param SecNum Index of section
>
> + # @param KeyStringList Filter for inputs of section generation
>
> + # @param FfsInf FfsInfStatement object that contains this
> section data
>
> + # @param Dict dictionary contains macro and its value
>
> + # @retval tuple (Generated file name, section alignment)
>
> + #
>
> + def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList,
> FfsInf=None, Dict=None, IsMakefile=False):
>
> + #
>
> + # Generate all section
>
> + #
>
> + self.KeyStringList = KeyStringList
>
> + self.CurrentArchList = GenFdsGlobalVariable.ArchList
>
> + if FfsInf is not None:
>
> + self.Alignment = FfsInf.__ExtendMacro__(self.Alignment)
>
> + self.SubTypeGuid =
> FfsInf.__ExtendMacro__(self.SubTypeGuid)
>
> + self.SectionType = FfsInf.__ExtendMacro__(self.SectionType)
>
> + self.CurrentArchList = [FfsInf.CurrentArch]
>
> +
>
> + if Dict is None:
>
> + Dict = {}
>
> +
>
> + self.SectFileName =
> GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.SectFileName)
>
> + self.SectFileName =
> GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)
>
> +
>
> + OutputFile = os.path.join(OutputPath, ModuleName +
> SUP_MODULE_SEC + SecNum + SectionSuffix.get("SUBTYPE_GUID"))
>
> + GenFdsGlobalVariable.GenerateSection(OutputFile,
> [self.SectFileName], 'EFI_SECTION_FREEFORM_SUBTYPE_GUID',
> Guid=self.SubTypeGuid, IsMakefile=IsMakefile)
>
> +
>
> + OutputFileList = []
>
> + OutputFileList.append(OutputFile)
>
> + return OutputFileList, self.Alignment
>
> +
>
> --
> 2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#94381): https://edk2.groups.io/g/devel/message/94381
Mute This Topic: https://groups.io/mt/93942434/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list