[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