UEFI--03.ReadCmos

1.cmos.c

#include <Uefi.h>  
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>  
#include <Library/IoLib.h> 
 
#define CMOS_INDEX    0x70
#define CMOS_DATA     0x71
 
INTN
EFIAPI
ShellAppMain (
  IN UINTN Argc,
  IN CHAR16 **Argv
  ) 
{ 
  UINT8 Value = 0;
  UINT8 Index = 0xFF;
  
  while (Index) {
    IoWrite8 (CMOS_INDEX, 0xFF - Index);
    Value = IoRead8 (CMOS_DATA);
    Print (L"%02x ", Value);
    if ((0xFF - Index + 1) % 0x10 == 0)
      Print (L"\n");
    Index--;
  }
  IoWrite8 (CMOS_INDEX, 0xFF);
  Print (L"%02x\n", IoRead8 (CMOS_DATA));
  
  return EFI_SUCCESS;
} 

2.cmos.inf

[Defines]
    INF_VERSION = 0x00010005
    BASE_NAME = 02_cmos
    FILE_GUID = dc72d2c7-a48a-42fd-80b6-9d234d9017c8
    MODULE_TYPE = UEFI_APPLICATION
    VERSION_STRING = 1.0
    ENTRY_POINT = ShellCEntryLib  #不同于HelloWorld,入口函数变了

[Sources]
    cmos.c

[Packages]
    MdePkg/MdePkg.dec
    ShellPkg/ShellPkg.dec

[LibraryClasses]
    UefiLib
    ShellCEntryLib
    IoLib

3.EDK2包路径修改

3.1 新建工程文件

新建或者拷贝,同HelloWorld
MdeModulePkg\Application
在这里插入图片描述

3.2 EDK2包路径修改

修改MdeModulePkg\MdeModule.dsc文件
在Components加入cmos.inf的路径:MdeModulePkg/cmos/cmos.inf
在这里插入图片描述
PS:可以不用修改EmulatorPkg\EmulatorPkg.dsc文件,不用在里面添加cmos.inf的路径,会在edk2\Build下生成MdeModule文件夹,里面会生成02_cmos.efi文件
原因:生成的cmos.efi文件在模拟器Winhost.exe里运行会闪退,应该是因为模拟器的问题,无法读取实际机器的CMOS(RTC)的值,需要拷贝cmos.efi到实际机器上面去运行读取
要修改EmulatorPkg\EmulatorPkg.dsc的话需要加cmos.inf的路径在components,build完会报错,需要加上Libraryclasses
在这里插入图片描述
这些库可以在edk2\ShellPkg\ShellPkg.dsc里面找
在这里插入图片描述

4.编译运行

输入 edksteup.bat rebuild,编译后输入build即可,build完会在edk2\Build\MdeModule\DEBUG_VS2019\X64下生成02_cmos.efi
在这里插入图片描述
拷贝efi文件到实际机器上运行即可

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值