經同事建議後,使用 EFI_CPU_IO_PROTOCOL 來讀取它
由於完全不懂 BIOS 概念
網路上也找不到相關資料
在翻遍了 UDK2014 code base 後
搞了 2 個小時才搞定
希望寫出來的東西不會誤導大眾
xxx.inf
[Protocols]
gEfiCpuIoProtocolGuid
xxx.c
#include <Protocol/CpuIo.h>
#include <Library/UefiBootServicesTableLib.h>
#include <stdio.h>
EFI_CPU_IO_PROTOCOL *mCpuIo = NULL;
void testReadCMOS()
{
EFI_STATUS Status;
UINT8 addr;
UINT8 data;
Status = gBS->LocateProtocol(&gEfiCpuIoProtocolGuid, NULL, (VOID **)&mCpuIo);
if (Status != EFI_SUCCESS) {
return;
}
addr = 0x30;
Status = mCpuIo->Io.Write(
mCpuIo,
EfiCpuIoWidthUint8,
0x70,
1,
&addr
);
if (Status != EFI_SUCCESS) {
return;
}
Status = mCpuIo->Io.Read(
mCpuIo,
EfiCpuIoWidthUint8,
0x71,
1,
&data
);
if (Status != EFI_SUCCESS) {
return;
}
printf("CMOS 0x30=%X", data);
}
沒有留言:
張貼留言