X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FGenFds%2FCapsule.py;h=9013fca41053dcf92494137747f65d80e4f3b2c3;hb=d943b0c339fe3d35ffdf9f580ccb7a55915c6854;hp=e03d78995737eab2ab05fbc66acd9501496755c0;hpb=d4c558e83d8f428393d27816772efc7f4b0e8403;p=mirror_edk2.git diff --git a/BaseTools/Source/Python/GenFds/Capsule.py b/BaseTools/Source/Python/GenFds/Capsule.py index e03d789957..9013fca410 100644 --- a/BaseTools/Source/Python/GenFds/Capsule.py +++ b/BaseTools/Source/Python/GenFds/Capsule.py @@ -1,7 +1,7 @@ ## @file # generate capsule # -# Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License @@ -15,23 +15,19 @@ ## # Import Modules # -from GenFdsGlobalVariable import GenFdsGlobalVariable +from __future__ import absolute_import +from .GenFdsGlobalVariable import GenFdsGlobalVariable, FindExtendTool from CommonDataClass.FdfClass import CapsuleClassObject import Common.LongFilePathOs as os -import subprocess -import StringIO -from Common.Misc import SaveFileOnChange -from GenFds import GenFds -from Common.Misc import PackRegistryFormatGuid +from io import BytesIO +from Common.Misc import SaveFileOnChange, PackGUID import uuid from struct import pack -from GenFds import FindExtendTool from Common import EdkLogger -from Common.BuildToolError import * +from Common.BuildToolError import GENFDS_ERROR +from Common.DataType import TAB_LINE_BREAK - -T_CHAR_LF = '\n' -WIN_CERT_REVISION = 0x0200 +WIN_CERT_REVISION = 0x0200 WIN_CERT_TYPE_EFI_GUID = 0x0EF1 EFI_CERT_TYPE_PKCS7_GUID = uuid.UUID('{4aafd29d-68df-49ee-8aa9-347d375665a7}') EFI_CERT_TYPE_RSA2048_SHA256_GUID = uuid.UUID('{a7717414-c616-4977-9420-844712a735bf}') @@ -39,7 +35,7 @@ EFI_CERT_TYPE_RSA2048_SHA256_GUID = uuid.UUID('{a7717414-c616-4977-9420-844712a7 ## create inf file describes what goes into capsule and call GenFv to generate capsule # # -class Capsule (CapsuleClassObject) : +class Capsule (CapsuleClassObject): ## The constructor # # @param self The object pointer @@ -66,11 +62,11 @@ class Capsule (CapsuleClassObject) : # UINT32 CapsuleImageSize; # } EFI_CAPSULE_HEADER; # - Header = StringIO.StringIO() + Header = BytesIO() # # Use FMP capsule GUID: 6DCBD5ED-E82D-4C44-BDA1-7194199AD92A # - Header.write(PackRegistryFormatGuid('6DCBD5ED-E82D-4C44-BDA1-7194199AD92A')) + Header.write(PackGUID('6DCBD5ED-E82D-4C44-BDA1-7194199AD92A'.split('-'))) HdrSize = 0 if 'CAPSULE_HEADER_SIZE' in self.TokensDict: Header.write(pack('=I', int(self.TokensDict['CAPSULE_HEADER_SIZE'], 16))) @@ -97,7 +93,7 @@ class Capsule (CapsuleClassObject) : # // UINT64 ItemOffsetList[]; # } EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER; # - FwMgrHdr = StringIO.StringIO() + FwMgrHdr = BytesIO() if 'CAPSULE_HEADER_INIT_VERSION' in self.TokensDict: FwMgrHdr.write(pack('=I', int(self.TokensDict['CAPSULE_HEADER_INIT_VERSION'], 16))) else: @@ -132,7 +128,7 @@ class Capsule (CapsuleClassObject) : # PreSize = FwMgrHdrSize - Content = StringIO.StringIO() + Content = BytesIO() for driver in self.CapsuleDataList: FileName = driver.GenCapsuleSubItem() FwMgrHdr.write(pack('=Q', PreSize)) @@ -159,7 +155,7 @@ class Capsule (CapsuleClassObject) : if not os.path.isabs(fmp.ImageFile): CapInputFile = os.path.join(GenFdsGlobalVariable.WorkSpaceDir, fmp.ImageFile) CapOutputTmp = os.path.join(GenFdsGlobalVariable.FvDir, self.UiCapsuleName) + '.tmp' - if ExternalTool == None: + if ExternalTool is None: EdkLogger.error("GenFds", GENFDS_ERROR, "No tool found with GUID %s" % fmp.Certificate_Guid) else: CmdOption += ExternalTool @@ -185,7 +181,7 @@ class Capsule (CapsuleClassObject) : # # The real capsule header structure is 28 bytes # - Header.write('\x00'*(HdrSize-28)) + Header.write(b'\x00'*(HdrSize-28)) Header.write(FwMgrHdr.getvalue()) Header.write(Content.getvalue()) # @@ -201,27 +197,26 @@ class Capsule (CapsuleClassObject) : # @retval string Generated Capsule file path # def GenCapsule(self): - if self.UiCapsuleName.upper() + 'cap' in GenFds.ImageBinDict.keys(): - return GenFds.ImageBinDict[self.UiCapsuleName.upper() + 'cap'] + if self.UiCapsuleName.upper() + 'cap' in GenFdsGlobalVariable.ImageBinDict: + return GenFdsGlobalVariable.ImageBinDict[self.UiCapsuleName.upper() + 'cap'] GenFdsGlobalVariable.InfLogger( "\nGenerate %s Capsule" %self.UiCapsuleName) - if ('CAPSULE_GUID' in self.TokensDict and + if ('CAPSULE_GUID' in self.TokensDict and uuid.UUID(self.TokensDict['CAPSULE_GUID']) == uuid.UUID('6DCBD5ED-E82D-4C44-BDA1-7194199AD92A')): return self.GenFmpCapsule() CapInfFile = self.GenCapInf() - CapInfFile.writelines("[files]" + T_CHAR_LF) + CapInfFile.append("[files]" + TAB_LINE_BREAK) CapFileList = [] - for CapsuleDataObj in self.CapsuleDataList : + for CapsuleDataObj in self.CapsuleDataList: CapsuleDataObj.CapsuleName = self.CapsuleName FileName = CapsuleDataObj.GenCapsuleSubItem() CapsuleDataObj.CapsuleName = None CapFileList.append(FileName) - CapInfFile.writelines("EFI_FILE_NAME = " + \ + CapInfFile.append("EFI_FILE_NAME = " + \ FileName + \ - T_CHAR_LF) - SaveFileOnChange(self.CapInfFileName, CapInfFile.getvalue(), False) - CapInfFile.close() + TAB_LINE_BREAK) + SaveFileOnChange(self.CapInfFileName, ''.join(CapInfFile), False) # # Call GenFv tool to generate capsule # @@ -236,7 +231,7 @@ class Capsule (CapsuleClassObject) : GenFdsGlobalVariable.VerboseLogger( "\nGenerate %s Capsule Successfully" %self.UiCapsuleName) GenFdsGlobalVariable.SharpCounter = 0 - GenFds.ImageBinDict[self.UiCapsuleName.upper() + 'cap'] = CapOutputFile + GenFdsGlobalVariable.ImageBinDict[self.UiCapsuleName.upper() + 'cap'] = CapOutputFile return CapOutputFile ## Generate inf file for capsule @@ -247,15 +242,15 @@ class Capsule (CapsuleClassObject) : def GenCapInf(self): self.CapInfFileName = os.path.join(GenFdsGlobalVariable.FvDir, self.UiCapsuleName + "_Cap" + '.inf') - CapInfFile = StringIO.StringIO() #open (self.CapInfFileName , 'w+') + CapInfFile = [] - CapInfFile.writelines("[options]" + T_CHAR_LF) + CapInfFile.append("[options]" + TAB_LINE_BREAK) - for Item in self.TokensDict.keys(): - CapInfFile.writelines("EFI_" + \ + for Item in self.TokensDict: + CapInfFile.append("EFI_" + \ Item + \ ' = ' + \ - self.TokensDict.get(Item) + \ - T_CHAR_LF) + self.TokensDict[Item] + \ + TAB_LINE_BREAK) return CapInfFile