]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/GenFds/Capsule.py
MdeModulePkg:
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / Capsule.py
CommitLineData
30fdf114
LG
1## @file\r
2# generate capsule\r
3#\r
4# Copyright (c) 2007, Intel Corporation\r
5#\r
6# All rights reserved. This program and the accompanying materials\r
7# are licensed and made available under the terms and conditions of the BSD License\r
8# which accompanies this distribution. The full text of the license may be found at\r
9# http://opensource.org/licenses/bsd-license.php\r
10#\r
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13#\r
14\r
15##\r
16# Import Modules\r
17#\r
18from GenFdsGlobalVariable import GenFdsGlobalVariable\r
19from CommonDataClass.FdfClass import CapsuleClassObject\r
20import os\r
21import subprocess\r
22import StringIO\r
23from Common.Misc import SaveFileOnChange\r
fd171542 24from GenFds import GenFds\r
30fdf114
LG
25\r
26\r
27T_CHAR_LF = '\n'\r
28\r
29## create inf file describes what goes into capsule and call GenFv to generate capsule\r
30#\r
31#\r
32class Capsule (CapsuleClassObject) :\r
33 ## The constructor\r
34 #\r
35 # @param self The object pointer\r
36 #\r
37 def __init__(self):\r
38 CapsuleClassObject.__init__(self)\r
39 # For GenFv\r
40 self.BlockSize = None\r
41 # For GenFv\r
42 self.BlockNum = None\r
fd171542 43 self.CapsuleName = None\r
30fdf114
LG
44\r
45 ## Generate capsule\r
46 #\r
47 # @param self The object pointer\r
fd171542 48 # @retval string Generated Capsule file path\r
30fdf114
LG
49 #\r
50 def GenCapsule(self):\r
fd171542 51 if self.UiCapsuleName.upper() + 'cap' in GenFds.ImageBinDict.keys():\r
52 return GenFds.ImageBinDict[self.UiCapsuleName.upper() + 'cap']\r
53\r
54 GenFdsGlobalVariable.InfLogger( "\nGenerate %s Capsule" %self.UiCapsuleName)\r
30fdf114
LG
55 CapInfFile = self.GenCapInf()\r
56 CapInfFile.writelines("[files]" + T_CHAR_LF)\r
fd171542 57 CapFileList = []\r
30fdf114 58 for CapsuleDataObj in self.CapsuleDataList :\r
fd171542 59 CapsuleDataObj.CapsuleName = self.CapsuleName\r
30fdf114 60 FileName = CapsuleDataObj.GenCapsuleSubItem()\r
fd171542 61 CapsuleDataObj.CapsuleName = None\r
62 CapFileList.append(FileName)\r
30fdf114
LG
63 CapInfFile.writelines("EFI_FILE_NAME = " + \\r
64 FileName + \\r
65 T_CHAR_LF)\r
66 SaveFileOnChange(self.CapInfFileName, CapInfFile.getvalue(), False)\r
67 CapInfFile.close()\r
68 #\r
69 # Call GenFv tool to generate capsule\r
70 #\r
71 CapOutputFile = os.path.join(GenFdsGlobalVariable.FvDir, self.UiCapsuleName)\r
72 CapOutputFile = CapOutputFile + '.Cap'\r
73 GenFdsGlobalVariable.GenerateFirmwareVolume(\r
74 CapOutputFile,\r
75 [self.CapInfFileName],\r
fd171542 76 Capsule=True,\r
77 FfsList=CapFileList\r
30fdf114 78 )\r
fd171542 79\r
80 GenFdsGlobalVariable.VerboseLogger( "\nGenerate %s Capsule Successfully" %self.UiCapsuleName)\r
30fdf114 81 GenFdsGlobalVariable.SharpCounter = 0\r
fd171542 82 GenFds.ImageBinDict[self.UiCapsuleName.upper() + 'cap'] = CapOutputFile\r
83 return CapOutputFile\r
30fdf114
LG
84\r
85 ## Generate inf file for capsule\r
86 #\r
87 # @param self The object pointer\r
88 # @retval file inf file object\r
89 #\r
90 def GenCapInf(self):\r
91 self.CapInfFileName = os.path.join(GenFdsGlobalVariable.FvDir,\r
92 self.UiCapsuleName + "_Cap" + '.inf')\r
93 CapInfFile = StringIO.StringIO() #open (self.CapInfFileName , 'w+')\r
94\r
95 CapInfFile.writelines("[options]" + T_CHAR_LF)\r
96\r
97 for Item in self.TokensDict.keys():\r
98 CapInfFile.writelines("EFI_" + \\r
99 Item + \\r
100 ' = ' + \\r
101 self.TokensDict.get(Item) + \\r
102 T_CHAR_LF)\r
103\r
104 return CapInfFile\r