-
Notifications
You must be signed in to change notification settings - Fork 350
Description
我尝试在Setup上添加一个界面,我需要使用varstore,但是当我添加
varstore SETUP_TEST_DATA,
varid = SETUP_TEST_VARSTORE_ID,
name = MyTestData,
guid = SETUP_TEST_FORMSET_GUID;
到vrf文件时,编译通过了,但是在进入界面时出现了:
ASSERT String.c(37): String != ((void *) 0),请问我应该怎么去修改我的代码?
以下是我的代码:
vrf:
#include "SetupTest.h"
#define SetupTestDataStruct "sss"
#define STR_VARSTORE_HELP 0x2001
formset
guid = SETUP_TEST_FORMSET_GUID,
title = STRING_TOKEN(STR_FORMSET_TITLE),
help = STRING_TOKEN(STR_FORMSET_HELP),
classguid = gEfiIfrFrontPageGuid,
varstore SETUP_TEST_DATA,
varid = SETUP_TEST_VARSTORE_ID,
name = MyTestData,
guid = SETUP_TEST_FORMSET_GUID;
form formid = TARGET_MANAGER_FORM_ID,
title = STRING_TOKEN(STR_MAIN_TITLE);
subtitle text = STRING_TOKEN(STR_SUB_TITLE);
text
help = STRING_TOKEN(STR_TEXT_BUTTON_TEXT),
text = STRING_TOKEN(STR_TEXT_BUTTON_HELP);
subtitle text = STRING_TOKEN(STR_EMPTY_STRING);
subtitle text = STRING_TOKEN(STR_HELP_FOOTER);
endform;
endformset;
SetupTest.h:
#ifndef SETUP_TEST_H
#define SETUP_TEST_H
#define SETUP_TEST_FORMSET_GUID
{
0x12345678, 0x1234, 0x5678, {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xAA, 0xEF}
}
#define FORM_MAIN_ID 0x2000
#define TARGET_MANAGER_FORM_ID 0x2001
#define SETUP_TEST_VARSTORE_ID 0x2002
#define VARIABLE_CLEANUP_VARSTORE_ID 0x8000
#define CONFIG_VARSTORE_ID 0x1100
extern UINT8 SetupTestVfrBin[];
extern UINT8 SetupTestStrings[];
typedef struct {
UINT8 TestOption; // 需要定义 STR_TEST_OPTION_PROMPT 和 STR_TEST_OPTION_HELP
UINT32 TestValue; // 需要定义 STR_TEST_VALUE_PROMPT 和 STR_TEST_VALUE_HELP
} SETUP_TEST_DATA;
// typedef struct {
// UINT16 BootTimeOut;
// UINT8 BootTestData;
// } SETUP_TEST_DATA;
#define SETUP_TEST_DATA_SIZE sizeof(SETUP_TEST_DATA)
#endif // SETUP_TEST_H
SetupTest.c:
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DebugLib.h>
#include "SetupTest.h"
#include <Library/HiiLib.h>
// 全局变量
EFI_HII_HANDLE mSetupTestHiiHandle = NULL;
EFI_GUID mBootTestGuid = SETUP_TEST_FORMSET_GUID;
CHAR16 mVarStoreName[] = L"MyTestData";
/**
构造函数:注册 HII 表单
@param[in] ImageHandle 驱动镜像句柄
@param[in] SystemTable UEFI 系统表指针
@RetVal EFI_SUCCESS 构造成功
@RetVal EFI_OUT_OF_RESOURCES 内存不足
@RetVal EFI_DEVICE_ERROR 注册失败
**/
EFI_STATUS
EFIAPI
SetupTestConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
// 注册 HII 表单
mSetupTestHiiHandle = HiiAddPackages (
&mBootTestGuid,
ImageHandle,
SetupTestVfrBin,
SetupTestStrings,
NULL
);
if (mSetupTestHiiHandle == NULL) {
DEBUG ((DEBUG_LOAD, "[SetupTest][%d] ====Failed to add HII packages \n", LINE));
return EFI_DEVICE_ERROR;
}
DEBUG ((DEBUG_LOAD, "[SetupTest][%d] ====Completed successfully \n", LINE));
return EFI_SUCCESS;
}
/**
析构函数:注销 HII 表单
@param[in] ImageHandle 驱动镜像句柄
@param[in] SystemTable UEFI 系统表指针
@RetVal EFI_SUCCESS 析构成功
**/
EFI_STATUS
EFIAPI
SetupTestDestructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
DEBUG ((DEBUG_LOAD, "[SetupTest][%d] ====Starting... \n", LINE));
// 注销 HII 表单
if (mSetupTestHiiHandle != NULL) {
HiiRemovePackages (mSetupTestHiiHandle);
mSetupTestHiiHandle = NULL;
}
DEBUG ((DEBUG_LOAD, "[SetupTest][%d] ====Completed successfully \n", LINE));
return EFI_SUCCESS;
}