BaseTools: Supported FMP capsule image.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yingke Liu <yingke.d.liu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17678 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -18,6 +18,9 @@
|
||||
import Ffs
|
||||
from GenFdsGlobalVariable import GenFdsGlobalVariable
|
||||
import StringIO
|
||||
from struct import pack
|
||||
import os
|
||||
from Common.Misc import SaveFileOnChange
|
||||
|
||||
## base class for capsule data
|
||||
#
|
||||
@ -154,4 +157,71 @@ class CapsuleAfile (CapsuleData):
|
||||
# @retval string Generated file name
|
||||
#
|
||||
def GenCapsuleSubItem(self):
|
||||
return self.FileName
|
||||
return self.FileName
|
||||
|
||||
class CapsulePayload(CapsuleData):
|
||||
'''Generate payload file, the header is defined below:
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
UINT32 Version;
|
||||
EFI_GUID UpdateImageTypeId;
|
||||
UINT8 UpdateImageIndex;
|
||||
UINT8 reserved_bytes[3];
|
||||
UINT32 UpdateImageSize;
|
||||
UINT32 UpdateVendorCodeSize;
|
||||
UINT64 UpdateHardwareInstance; //Introduced in v2
|
||||
} EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER;
|
||||
'''
|
||||
def __init__(self):
|
||||
self.UiName = None
|
||||
self.Version = None
|
||||
self.ImageTypeId = None
|
||||
self.ImageIndex = None
|
||||
self.HardwareInstance = None
|
||||
self.ImageFile = None
|
||||
self.VendorCodeFile = None
|
||||
|
||||
def GenCapsuleSubItem(self):
|
||||
if not self.Version:
|
||||
self.Version = 0x00000002
|
||||
ImageFileSize = os.path.getsize(self.ImageFile)
|
||||
VendorFileSize = 0
|
||||
if self.VendorCodeFile:
|
||||
VendorFileSize = os.path.getsize(self.VendorCodeFile)
|
||||
|
||||
#
|
||||
# Fill structure
|
||||
#
|
||||
Guid = self.ImageTypeId.split('-')
|
||||
Buffer = pack('=ILHHBBBBBBBBBBBBIIQ',
|
||||
int(self.Version,16),
|
||||
int(Guid[0], 16),
|
||||
int(Guid[1], 16),
|
||||
int(Guid[2], 16),
|
||||
int(Guid[3][-4:-2], 16),
|
||||
int(Guid[3][-2:], 16),
|
||||
int(Guid[4][-12:-10], 16),
|
||||
int(Guid[4][-10:-8], 16),
|
||||
int(Guid[4][-8:-6], 16),
|
||||
int(Guid[4][-6:-4], 16),
|
||||
int(Guid[4][-4:-2], 16),
|
||||
int(Guid[4][-2:], 16),
|
||||
int(self.ImageIndex, 16),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
ImageFileSize,
|
||||
VendorFileSize,
|
||||
int(self.HardwareInstance, 16)
|
||||
)
|
||||
#
|
||||
# Append file content to the structure
|
||||
#
|
||||
ImageFile = open(self.ImageFile, 'rb')
|
||||
Buffer += ImageFile.read()
|
||||
ImageFile.close()
|
||||
if self.VendorCodeFile:
|
||||
VendorFile = open(self.VendorCodeFile, 'rb')
|
||||
Buffer += VendorFile.read()
|
||||
VendorFile.close()
|
||||
return Buffer
|
||||
|
Reference in New Issue
Block a user