app中进行Variable的读写操作 /** @file This sample application bases on HelloWorld PCD setting to print "UEFI Hello World!" to the UEFI Console. Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.BR SPDX-License-Identi
app中进行Variable的读写操作
/** @file This sample application bases on HelloWorld PCD setting to print "UEFI Hello World!" to the UEFI Console. Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent**/#include <Uefi.h>#include <Library/PcdLib.h>#include <Library/UefiLib.h>#include <Library/UefiApplicationEntryPoint.h>#include <Library/UefiRuntimeServicesTableLib.h>#include <Library/MemoryAllocationLib.h>// String token ID of help message text.// Shell supports to find help message in the resource section of an application image if// .MAN file is not found. This global variable is added to make build tool recognizes// that the help string is consumed by user and then build tool will add the string into// the resource section. Thus the application can use '-?' option to show help message in// Shell.//GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_HELLO_WORLD_HELP_INFORMATION);/** The user Entry Point for Application. The user code starts with this function as the real entry point for the application. @param[in] ImageHandle The firmware allocated handle for the EFI image. @param[in] SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The entry point is executed successfully. @retval other Some error occurs when executing this entry point.**/EFI_STATUSEFIAPIUefiMain ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ){ UINT32 Index; EFI_STATUS Status; EFI_GUID Guid; //UINTN NameBufferSize; //UINTN NameSize; CHAR16 *Name; UINTN DataSize; UINT32 Data; Index = 0; Data = 0x1234abcd; Name = L"testParam";//AllocateZeroPool (NameBufferSize); DataSize = sizeof (Data); Status = gRT->SetVariable ( Name, &Guid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, DataSize, &Data ); Print (L" [testParam] : Setvariable Data 0x%x. GUID %g ,status:%d\n",Data,&Guid,Status); Data = 0; Status = gRT->GetVariable (Name, &Guid, NULL, &DataSize, &Data); Print (L" [testParam] : GetVariable Data 0x%x. status:%d\n",Data,Status); // // Three PCD type (FeatureFlag, UINT32 and String) are used as the sample. // if (FeaturePcdGet (PcdHelloWorldPrintEnable)) { for (Index = 0; Index < PcdGet32 (PcdHelloWorldPrintTimes); Index++) { // // Use UefiLib Print API to print string to UEFI console // Print ((CHAR16 *)PcdGetPtr (PcdHelloWorldPrintString)); } } return EFI_SUCCESS;}UEFI_DRIVER中进行Variable的写操作,app中进行Variable的读操作
CHAR16 *Name; UINTN DataSize; UINT32 Data; Data = 0x1234abc0; Name = L"testParam";//AllocateZeroPool (NameBufferSize); DataSize = sizeof (Data); Status = gRT->SetVariable ( Name, &Guid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, DataSize, &Data ); // Print (L" [testParam] : Setvariable Data 0x%x. GUID %g ,status:%d\n",Data,&Guid,Status); DEBUG((EFI_D_ERROR, "[testParam] : Setvariable Data 0x%x. GUID %g ,status:%d\n",Data,&Guid,Status)); DEBUG((EFI_D_ERROR, "lfmq:this is lfmq testing!!!\n"));/* DataSize = sizeof (Data); Status = gRT->SetVariable ( Name, &Guid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, DataSize, &Data ); Print (L" [testParam] : Setvariable Data 0x%x. GUID %g ,status:%d\n",Data,&Guid,Status);*/ Data = 0; Status = gRT->GetVariable (Name, &Guid, NULL, &DataSize, &Data); Print (L" [testParam] : GetVariable Data 0x%x. GUID %g , status:%d\n",Data,&Guid,Status);