UEFI Common:UEFI 中的Runtime Services

    EFI System Table 里面有两个Services:Runtime Services和Boot Services,其中Runtime Services 是在UEFI 兼容系统上面几乎全时可用的Services,区别于Boot Services只能在EFI_BOOT_SERVICES.ExitBootServices()之前可用的特性。Runtime Services提供了几组有限的Services:Variable Services;Time Services;Virtual Memory Services;Miscellaneous Runtime Services。

    Variable Services提供了用于读写Variable的函数,具体用法比较简单,所以就不再提了。我们只看一下这些Services是怎么运作的好了。在VariableServiceInitialize这个函数里面有下面的定义:

  SystemTable->RuntimeServices->GetVariable         = VariableServiceGetVariable;
  SystemTable->RuntimeServices->GetNextVariableName = VariableServiceGetNextVariableName;
  SystemTable->RuntimeServices->SetVariable         = VariableServiceSetVariable;
  SystemTable->RuntimeServices->QueryVariableInfo   = VariableServiceQueryVariableInfo;

    可以看出来GetVariable和SetVariable的instance是在函数VariableServiceInitialize里面定义的。EDK默认是从0: Volatile, 1: HOB, 2: Non-Volatile.这几个区域里面搜索。当然,根据平台或者其他原因的要求,也可以在后面用自己的instance去override VariableServiceInitialize里面的定义。

    Time Services的功能就比较单一,提供了GetTime()/SetTime()/GetWakeupTime()/SetWakeupTime()这四个Services。它们的Instance如下:

  gRT->GetTime       = PcRtcEfiGetTime;
  gRT->SetTime       = PcRtcEfiSetTime;
  gRT->GetWakeupTime = PcRtcEfiGetWakeupTime;
  gRT->SetWakeupTime = PcRtcEfiSetWakeupTime;

    看一下Code就知道,这几个函数只是在操作CMOS的几个RTC 寄存器而已,所以实际中用处不是太大。或许我们可以自己加一个外部定时器,可以取代CMOS的RTC,这样或者这四个Services更加有意义一点。

    Virtual Memory Services这个提供下面两个Service,可以看出是给OS loader使用的,具体用法我们稍后研究:


    Miscellaneous Runtime Services里面是一些其他Services,后面用到的话再一一介绍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值