UEFI应用与编程--WriteCmos
2018-03-09 14:05
597 查看
CmosWrite.c
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
#include <Library/ShellLib.h>
#include <Library/IoLib.h>
#include <Library/UefiBootServicesTableLib.h>
#define CMOS_INDEX 0x70
#define CMOS_DATA 0x71
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
{NULL, TypeMax}
};
INTN
EFIAPI
ShellAppMain (
IN UINTN Argc,
IN CHAR16 **Argv
)
{
LIST_ENTRY *Package;
CHAR16 *ProblemParam;
EFI_STATUS Status;
CONST CHAR16 *Temp;
UINT64 Address;
UINT64 Value;
Value = 0;
Address = 0;
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
if (EFI_ERROR (Status)) {
Print(L"Get ShellCommandLineParse fail.\r\n");
gBS->FreePool (ProblemParam);
goto Exit;
} else {
if (ShellCommandLineGetCount (Package) < 3) {
Print(L"Too few arguments.\r\n");
goto Exit;
} else {
if(ShellCommandLineGetCount (Package) > 3) {
Print(L"Too many arguments.\r\n");
goto Exit;
}
}
Temp = ShellCommandLineGetRawValue(Package, 1);
Status = ShellConvertStringToUint64(Temp, (UINT64*)&Address, TRUE, FALSE);
if (EFI_ERROR (Status)) {
Print(L"Invalid parameter.\r\n");
goto Exit;
}
Temp = ShellCommandLineGetRawValue(Package, 2);
Status = ShellConvertStringToUint64(Temp, (UINT64*)&Value, TRUE, FALSE);
if (EFI_ERROR (Status)) {
Print(L"Invalid parameter.\r\n");
goto Exit;
}
IoWrite8(CMOS_INDEX, (UINT8)Address);
IoWrite8(CMOS_DATA,(UINT8)Value);
}
Exit:
if (Package != NULL) {
ShellCommandLineFreeVarList (Package);
}
return EFI_SUCCESS;
}
CmosWrite.inf
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = CmosWrite
FILE_GUID = dc72d2c7-a48a-42fd-80b6-9d229d9943c8
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = ShellCEntryLib
[Sources]
CmosWrite.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
MdeModulePkg/MdeModulePkg.dec
StdLib/StdLib.dec
[LibraryClasses]
UefiLib
IoLib
ShellCEntryLib
ShellLib
UefiBootServicesTableLib
[Protocols]
[Ppis]
[Guids]
[BuildOptions]
[Pcd]
[PcdEx]
[FixedPcd]
[FeaturePcd]
[PatchPcd]
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
#include <Library/ShellLib.h>
#include <Library/IoLib.h>
#include <Library/UefiBootServicesTableLib.h>
#define CMOS_INDEX 0x70
#define CMOS_DATA 0x71
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
{NULL, TypeMax}
};
INTN
EFIAPI
ShellAppMain (
IN UINTN Argc,
IN CHAR16 **Argv
)
{
LIST_ENTRY *Package;
CHAR16 *ProblemParam;
EFI_STATUS Status;
CONST CHAR16 *Temp;
UINT64 Address;
UINT64 Value;
Value = 0;
Address = 0;
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
if (EFI_ERROR (Status)) {
Print(L"Get ShellCommandLineParse fail.\r\n");
gBS->FreePool (ProblemParam);
goto Exit;
} else {
if (ShellCommandLineGetCount (Package) < 3) {
Print(L"Too few arguments.\r\n");
goto Exit;
} else {
if(ShellCommandLineGetCount (Package) > 3) {
Print(L"Too many arguments.\r\n");
goto Exit;
}
}
Temp = ShellCommandLineGetRawValue(Package, 1);
Status = ShellConvertStringToUint64(Temp, (UINT64*)&Address, TRUE, FALSE);
if (EFI_ERROR (Status)) {
Print(L"Invalid parameter.\r\n");
goto Exit;
}
Temp = ShellCommandLineGetRawValue(Package, 2);
Status = ShellConvertStringToUint64(Temp, (UINT64*)&Value, TRUE, FALSE);
if (EFI_ERROR (Status)) {
Print(L"Invalid parameter.\r\n");
goto Exit;
}
IoWrite8(CMOS_INDEX, (UINT8)Address);
IoWrite8(CMOS_DATA,(UINT8)Value);
}
Exit:
if (Package != NULL) {
ShellCommandLineFreeVarList (Package);
}
return EFI_SUCCESS;
}
CmosWrite.inf
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = CmosWrite
FILE_GUID = dc72d2c7-a48a-42fd-80b6-9d229d9943c8
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = ShellCEntryLib
[Sources]
CmosWrite.c
[Packages]
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
MdeModulePkg/MdeModulePkg.dec
StdLib/StdLib.dec
[LibraryClasses]
UefiLib
IoLib
ShellCEntryLib
ShellLib
UefiBootServicesTableLib
[Protocols]
[Ppis]
[Guids]
[BuildOptions]
[Pcd]
[PcdEx]
[FixedPcd]
[FeaturePcd]
[PatchPcd]
相关文章推荐
- UEFI应用与编程--ReadCmos
- UEFI应用与编程--SmBios
- UEFI应用与编程--HelloWorld(02)
- UEFI应用与编程--Handle&EFI_DEVICE_PATH_TO_TEXT_PROTOCOL
- UEFI应用与编程--显示文件信息
- UEFI应用与编程--HelloWorld(01)
- UEFI应用与编程--ShowBootDevice
- UEFI应用与编程--HelloWorld(03)
- UEFI应用与编程--AcpiTable
- UEFI应用与编程--BootOrder
- UEFI应用与编程--EFI_SMBUS_HC_PROTOCOL
- UEFI应用与编程--IndexIo
- UEFI应用与编程--GetNextVariableName
- UEFI应用与编程--EFI_DISK_INFO_PROTOCOL
- UEFI应用与编程--8042 Kbc
- UEFI应用与编程--EFI_USB2_HC_PROTOCOL
- 1.Linux应用编程---文件I/O(open、read、write、lseek、close)
- UEFI应用与编程--读写Pci配置空间
- UEFI应用与编程--解析命令行参数
- UEFI应用与编程--ReadSpd