Skip to content

ASSERT String.c(37): String != ((void *) 0) #98

@zhangjun2636808827

Description

@zhangjun2636808827

我尝试在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;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions