Hello, Khalil,
I encounter the similar problem: my UEFI firmware support Fmp ImageHeader Version 2. when I use the utility of GenerateCapsule under BaseTools/BinWrappers/PosixLike/ to Generate a Capsule file, the utility inserts a Version 3 Fmp ImageHeader. Then, when CapsuleApp.efi updates the Capsule file with a Version 3 Fmp ImageHeader, The FMP can't even find the correct FV signature, the update fails. How can I generate a Capsule file with a Version 2 Fmp ImageHeader? Thanks.
BOOLEAN
GetFfsByName (
IN VOID *FdStart,
IN UINTN FdSize,
IN EFI_GUID *FileName,
IN EFI_FV_FILETYPE Type,
OUT VOID **OutFfsBuffer,
OUT UINTN *OutFfsBufferSize
)
{
UINTN FvSize;
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader;
EFI_FFS_FILE_HEADER *FfsHeader;
UINT32 FfsSize;
UINTN TestLength;
BOOLEAN FvFound;
DEBUG ((DEBUG_INFO, "GetFfsByName - FV: 0x%08x - 0x%08x\n", (UINTN)FdStart, (UINTN)FdSize));
FvFound = FALSE;
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)FdStart;
DEBUG ((EFI_D_ERROR, "Libo: FvHeadGuid is %g.\n", &(FvHeader->FileSystemGuid)));
DEBUG ((EFI_D_ERROR, "Libo: FvHeadSignature is %x.\n", FvHeader->Signature));
while ((UINTN)FvHeader < (UINTN)FdStart + FdSize - 1) {
FvSize = (UINTN)FdStart + FdSize - (UINTN)FvHeader;
if (FvHeader->Signature != EFI_FVH_SIGNATURE) { ////////////////////Can't find the Signature./////////////////////////////
FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)((UINTN)FvHeader + SIZE_4KB);
continue;
}
Best Regards
Feng Libo