UEFI原理与编程实践--Variable的使用

基础知识

在书中本章主要说明了系统表,启动服务,运行时服务。

挑简单明了的:系统表(gST)的使用方法:

SystemTable->BootServes指向系统的启动服务表,ConIn/ConOut

启动服务(gBS),在上一节中protocol的安装与使用就使用了gBS,启动服务主要运用在事件管理,内存管理,protocol有关的服务,驱动管理服务,image管理服务,以及ExitBootServes。

启动服务的生存周期在DxeMain到ExitBootServes期间。

运行时服务(gRT)主要运用在:

读取设定系统时间以及唤醒设定:

  SystemTable->RuntimeServices->GetTime       = GetTime;
  SystemTable->RuntimeServices->SetTime       = SetTime;
  SystemTable->RuntimeServices->GetWakeupTime = GetWakeupTime;
  SystemTable->RuntimeServices->SetWakeupTime = SetWakeupTime;

其他服务:

gRT->ResetSystem (EfiResetWarm, EFI_SUCCESS, 0, NULL);

现在主要说一下这个读写变量:

Variable

其实这个Variable的使用和protocol的使用是类似的,只是不需要再进行安装了,既然是variable,那就是变量,顾名思义,实质和protocol还是有很多差别的

创建GUID与.h文件

同样的,咱们把这个创建的GUID与.h文件放在自己的pkg里面,需要用的时候调用就行

在dec文件中注册一个同样的GUID

gEfiPmFvolumeVariableGuid = { 0x4ae7e1e8, 0x9dfe, 0x4e3e, { 0x85, 0xb4, 0xa5, 0xf6, 0xab, 0xd4, 0x70, 0xfb }}

.h文件

#ifndef __PM_FV_VARIABLE___H__
#define ____PM_FV_VARIABLE___H__


#define PM_FV_GUID \
  { \
     0x4ae7e1e8, 0x9dfe, 0x4e3e, { 0x85, 0xb4, 0xa5, 0xf6, 0xab, 0xd4, 0x70, 0xfb }\
  }

extern EFI_GUID gEfiPmFvolumeVariableGuid;

#define PM_FV_NAME   L"PMFV"

#pragma pack(1)

typedef struct _PM_FV_DATA{
  UINTN    BaseAddress;
} PM_FV_DATA;

#pragma pack()

#endif

创建好直接就可以使用啦,只要相应的inf包含就行,然后C文件include这个.h文件:

variable的使用

SetVariable:

PM_FV_DATA  PmFvData;
        UINTN      VariableSize;

        VariableSize = sizeof(PM_FV_DATA);
        PmFvData.BaseAddress = 1;
        Status = gRT->SetVariable (
                  PM_FV_NAME,
                  &gEfiPmFvolumeVariableGuid,
                  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
                  VariableSize,
                  &PmFvData
                  );
                  
        ASSERT_EFI_ERROR (Status);

GetVariable:

 PM_FV_DATA  PmFvData;
  UINTN      VariableSize;

  VariableSize = sizeof(PM_FV_DATA);
  Status = gRT->GetVariable (
                  PM_FV_NAME,
                  &gEfiPmFvolumeVariableGuid,
                  NULL,
                  &VariableSize,
                  &PmFvData
                  );
  
  ASSERT_EFI_ERROR(Status);

代码的前后顺序(什么时候用,用在哪)就看自己代码怎么使用了,原理是一样的。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UEFI(Unified Extensible Firmware Interface)是一种固件接口标准,用于用于替换传统的BIOS(Basic Input/Output System)固件,旨在提高系统启动速度、安全性和可靠性。 UEFI原理编程完整版PDF是一份详细的技术指南,提供了UEFI开发所需的全部信息,包括如何设计UEFI驱动程序、应用程序和固件,以及如何使用UEFI的各种功能。 这份PDF文件将UEFI划分为四个主要模块:启动服务、管理服务、硬件抽象层和UEFI Shell。每个模块都有详细的描述和示例代码,此外还包含了UEFI的系统架构、数据结构、驱动程序与应用程序的开发方法等内容。 此外,UEFI原理编程完整版PDF还介绍了UEFI与安全性、多核技术、嵌入式系统等方面的关系,并为读者提供了关键的UefiSpec和UefiDebugTools库文档。 总之,UEFI原理编程完整版PDF是一份权威的技术指南,涵盖了UEFI方方面面的内容,非常适合开发人员和工程师学习和参考。 ### 回答2: UEFI(Unified Extensible Firmware Interface)是一种新型的启动编程接口,它替代了旧版的BIOS(基本输入输出系统)。UEFI原理编程可以帮助开发人员理解UEFI的工作原理编程技巧。 UEFI拥有完善的安全性和可靠性,其编程方式也十分灵活。与BIOS相比,UEFI可以支持更多的硬件平台和更大的硬盘容量,同时也可以优化启动速度和程序的执行效率。 UEFI原理编程pdf完整版可以帮助开发人员更好地了解UEFI的概念和架构,并提供丰富的代码示例,帮助开发人员快速掌握UEFI编程技能。除此之外,该书还介绍了UEFI的启动流程、安全策略、UEFI应用的开发和调试等内容,对于想要深入学习UEFI编程的开发人员来说是一本很有价值的参考书。 总之,UEFI原理编程pdf完整版是一本优秀的技术参考书,其内容涵盖了UEFI的方方面面,对于想要深入了解和运用UEFI的开发人员来说具有很高的参考价值。 ### 回答3: UEFI(Unified Extensible Firmware Interface)是一种新型的系统固件接口,它为操作系统与硬件之间提供了一种标准的接口。相比传统的BIOS,UEFI可以支持更多的硬件功能,同时也更加安全和灵活。 UEFI原理主要包括以下几个方面:1、UEFI接口包括了启动管理器,硬件抽象层,运行环境和应用层等模块;2、UEFI支持模块化设计和驱动加载,可以动态地加载和卸载硬件驱动,提高了系统灵活性和安全性;3、UEFI使用GUID Partition Table(GPT)替代MBR分区表,支持更大的硬盘容量和更稳定的系统启动;4、UEFI还支持Secure Boot功能,可以防止恶意程序篡改启动软件和系统文件,提高了系统安全性。 关于UEFI编程,需要掌握以下几个核心内容:1、UEFI开发环境的搭建,需要熟悉UEFI规范以及系统固件接口的程序编写;2、UEFI应用程序的设计和开发,可以利用UEFI提供的应用程序接口(API)或者开发自定义的应用程序;3、UEFI驱动程序的编写,需要掌握UEFI驱动程序的架构和编程模型;4、UEFI启动管理器的开发,需要熟悉UEFI启动管理器的设计和实现。 总之,UEFI是一种新型的系统固件接口,可以为操作系统和硬件提供一个标准的接口,提高系统的安全性和灵活性。对于UEFI编程的学习和掌握,则需要对UEFI规范和程序设计有深入的了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值