UEFI 系统变量服务和dsc,dec,inf简单理解

系统变量服务是运行时服务提供的服务,用来操作系统变量。

包括读取系统变量的GetVariable,新建或更改变量的setVariable,遍历系统变量的GetNextVariableName。

要使用自己的系统变量,需要在.h头文件中定义GUID,在dec文件中注册一个相同的GUID,同时需要在inf中包含。

在头文件中的定义:在哪个包下的头文件定义GUID就需要在哪个包的dec中的Guids中写入

#define EFI_RESET_TIMES_ID \
{ \
    0x4ae7e1e8, 0x9dfe, 0x4e3e, { 0x85, 0xb4, 0xa5, 0xf6, 0xab, 0xd4, 0x70, 0xfb }\
}
extern EFI_GUID gEfiResetTimesVariableGuid;

此GUID是在Uefi.h中定义的,所以需要在MdePkg.dec中添加

[Guids]
gEfiResetTimesVariableGuid = { 0x4ae7e1e8, 0x9dfe, 0x4e3e, { 0x85, 0xb4, 0xa5, 0xf6, 0xab, 0xd4, 0x70, 0xfb }}

inf文件下的GUID模块:添加自定义的GUID 同时Packages中需要包含.h所在的包的dec文件

[Guids]
  gEfiFileSystemInfoGuid
  gEfiFileInfoGuid
  gEfiResetTimesVariableGuid

如此便可在程序中使用自定义的Variable。

例:

UINTN changeVariable(){
	EFI_STATUS status=0;
	UINTN size=10,initTimes=2000;
	UINTN oldtimes=0;
	status = gRT->GetVariable((CHAR16 *)L"resetTimes",&gEfiResetTimesVariableGuid,NULL,&size,&oldtimes);//resetTime为自定义的系统变量来设置开机次数,存储在非易失性存储器中
	if(status==EFI_NOT_FOUND){
		status = gRT->SetVariable((CHAR16 *)L"resetTimes",&gEfiResetTimesVariableGuid,EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,size,&initTimes);
	}else{
		oldtimes--;
		status = gRT->SetVariable((CHAR16 *)L"resetTimes",&gEfiResetTimesVariableGuid,EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,size,&oldtimes);
	}
	printf("last times:%d\n",oldtimes);
	return oldtimes;
}

dec文件和dsc文件用来描述和编译包,inf文件用来描述和编译模块。

dec文件定义了公开的数据和接口以便其它模块使用。可进行声明GUID,对外提供库等操作。

dsc文件用来描述模块,库和组件如何编译,可设定编译器参数,提供模块所使用的库入口,指定编译文件等操作。

inf文件是模块的工程文件,描述了模块的属性,比如依赖了什么库,由哪些代码组成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值