genfvimagelib.c
来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C语言 代码 · 共 2,197 行 · 第 1/5 页
C
2,197 行
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_CAP_STRING, "value not specified");
return Status;
}
//
// Read the word alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_2_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_2;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_2_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_2_STRING, "value not specified");
return Status;
}
//
// Read the dword alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_4_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_4;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_4_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_4_STRING, "value not specified");
return Status;
}
//
// Read the word alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_8_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_8;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_8_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_8_STRING, "value not specified");
return Status;
}
//
// Read the qword alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_16_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_16;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_16_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_16_STRING, "value not specified");
return Status;
}
//
// Read the 32 byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_32_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_32;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_32_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_32_STRING, "value not specified");
return Status;
}
//
// Read the 64 byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_64_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_64;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_64_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_64_STRING, "value not specified");
return Status;
}
//
// Read the 128 byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_128_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_128;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_128_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_128_STRING, "value not specified");
return Status;
}
//
// Read the 256 byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_256_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_256;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_256_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_256_STRING, "value not specified");
return Status;
}
//
// Read the 512 byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_512_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_512;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_512_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_512_STRING, "value not specified");
return Status;
}
//
// Read the 1K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_1K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_1K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_1K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_1K_STRING, "value not specified");
return Status;
}
//
// Read the 2K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_2K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_2K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_2K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_2K_STRING, "value not specified");
return Status;
}
//
// Read the 4K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_4K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_4K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_4K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_4K_STRING, "value not specified");
return Status;
}
//
// Read the 8K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_8K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_8K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_8K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_8K_STRING, "value not specified");
return Status;
}
//
// Read the 16K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_16K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_16K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_16K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_16K_STRING, "value not specified");
return Status;
}
//
// Read the 32K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_32K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_32K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_32K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_32K_STRING, "value not specified");
return Status;
}
//
// Read the 64K byte alignment capability attribute
//
Status = FindToken (InfFile, ATTRIBUTES_SECTION_STRING, EFI_FVB_ALIGNMENT_64K_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Update attribute
//
if (strcmp (Value, TRUE_STRING) == 0) {
FvInfo->FvAttributes |= EFI_FVB_ALIGNMENT_64K;
} else if (strcmp (Value, FALSE_STRING) != 0) {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_64K_STRING, "expected %s | %s", TRUE_STRING, FALSE_STRING);
return EFI_ABORTED;
}
} else {
Error (NULL, 0, 0, EFI_FVB_ALIGNMENT_64K_STRING, "value not specified");
return Status;
}
if (!(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_CAP) &&
(
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_2) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_4) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_8) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_16) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_32) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_64) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_128) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_256) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_512) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_1K) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_2K) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_4K) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_8K) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_16K) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_32K) ||
(FvInfo->FvAttributes & EFI_FVB_ALIGNMENT_64K)
)
) {
Error (
NULL,
0,
0,
"illegal combination of alignment attributes",
"if %s is not %s, no individual alignments can be %s",
EFI_FVB_ALIGNMENT_CAP_STRING,
TRUE_STRING,
TRUE_STRING
);
return EFI_ABORTED;
}
//
// Read block maps
//
for (Index = 0; Index < MAX_NUMBER_OF_FV_BLOCKS; Index++) {
//
// Read the number of blocks
//
Status = FindToken (InfFile, OPTIONS_SECTION_STRING, EFI_NUM_BLOCKS_STRING, Index, Value);
if (Status == EFI_SUCCESS) {
//
// Update the number of blocks
//
Status = AsciiStringToUint64 (Value, FALSE, &Value64);
if (EFI_ERROR (Status)) {
Error (NULL, 0, 0, Value, "invalid value for %s", EFI_NUM_BLOCKS_STRING);
return EFI_ABORTED;
}
FvInfo->FvBlocks[Index].NumBlocks = (UINT32) Value64;
} else {
//
// If there is no number of blocks, but there is a size, then we have a mismatched pair
// and should return an error.
//
Status = FindToken (InfFile, OPTIONS_SECTION_STRING, EFI_BLOCK_SIZE_STRING, Index, Value);
if (!EFI_ERROR (Status)) {
Error (NULL, 0, 0, "must specify both", "%s and %s", EFI_NUM_BLOCKS_STRING, EFI_BLOCK_SIZE_STRING);
return EFI_ABORTED;
} else {
//
// We are done
//
break;
}
}
//
// Read the size of blocks
//
Status = FindToken (InfFile, OPTIONS_SECTION_STRING, EFI_BLOCK_SIZE_STRING, Index, Value);
if (Status == EFI_SUCCESS) {
//
// Update the number of blocks
//
Status = AsciiStringToUint64 (Value, FALSE, &Value64);
if (EFI_ERROR (Status)) {
Error (NULL, 0, 0, Value, "invalid value specified for %s", EFI_BLOCK_SIZE_STRING);
return EFI_ABORTED;
}
FvInfo->FvBlocks[Index].BlockLength = (UINT32) Value64;
} else {
//
// There is a number of blocks, but there is no size, so we have a mismatched pair
// and should return an error.
//
Error (NULL, 0, 0, "must specify both", "%s and %s", EFI_NUM_BLOCKS_STRING, EFI_BLOCK_SIZE_STRING);
return EFI_ABORTED;
}
}
//
// Read files
//
for (Index = 0; Index < MAX_NUMBER_OF_FILES_IN_FV; Index++) {
//
// Read the number of blocks
//
Status = FindToken (InfFile, FILES_SECTION_STRING, EFI_FILE_NAME_STRING, Index, Value);
if (Status == EFI_SUCCESS) {
//
// Add the file
//
strcpy (FvInfo->FvFiles[Index], Value);
} else {
break;
}
}
if (FindSection (InfFile, COMPONENT_SECTION_STRING)) {
Index = 0;
//
// Read component FV_VARIABLE
//
Status = FindToken (InfFile, COMPONENT_SECTION_STRING, EFI_NV_VARIABLE_STRING, 0, Value);
if (Status == EFI_SUCCESS) {
//
// Add the component
//
strcpy (FvInfo->FvComponents[Index].ComponentName, EFI_NV_VARIABLE_STRING);
Status = AsciiStringToUint64 (Value, FALSE, &Value64);
if (EFI_ERROR (Status)) {
printf ("ERROR: %s is not a valid integer.\n", EFI_NV_VARIABLE_STRING);
return EFI_ABORTED;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?