【UEFI】---BIOS中对Guid的使用以及Lib函数的使用总结

时间:2019-09-29 19:27:15   收藏:0   阅读:384

---恢复内容开始---

  BIOS发展至今传统的汇编实现早已被抛弃,UEFI作为目前一套主流的标准定义接口,被广泛使用。之前被一些有关GUID和一些Lib函数的使用以及跨Pkg调用给折腾的不行,每次改代码都要build好多次,才能build过。趁着这次的一个Bug,针对GUID和Lib的跨Pkg使用做下小结。     

/*GUID*/

  顾名思义--globally unique identifier,全局唯一标识符。GUID是一个由128bit=16Byte的二进制数据组成,此数据的生成一般由专门的GUID生成器(千万别自己乱写哦),而且每次生成的GUID基本是不能重复的。BIOS中使用GUID的地方很多,大部分的全局变量以及Protocol等都需要通过GUID来locate或install。今天通过之前解的问题来介绍GUID的1. 格式   2. 用法。 (问题背景: InsydeMoudlePkg中的Moudle1中的某个程序要设置Variable1,Moudle2中的某个程序要去读取Variable1)

  (看之前,请先对UEFI的Pkg Moudle等概念以及dec/inf/dsc文档由个基本的掌握)

 1. 格式--同样我们从最终的需求处入手,一步步来。

  最终需求:在Password.c中需要将一个功能,将变量EncryptedHashData保存并挂载到gInspurUserPassWordFlagGuid的下面(如下图左一)。

  技术分享图片         技术分享图片

         技术分享图片

       技术分享图片 技术分享图片

 

 

           技术分享图片

 

 

   梳理至此,大家对GUID的使用格式应该有个大概的掌握,总结如下:

  1.1在dec中定义该GUID,其一是为了让该Pkg下所有moudle都能看到该GUID且直接调用,其二是为跨Pkg使用该GUID时提供一个声明接口。其他Pkg的程序若要使用该GUID只需要在INF文档中添加DEC文件和GUID的声明即可

  1.2 INF文档添加GUID是表明该GUID对本Moudle所有程序可见且可用

 2. 用法

  GUID作为全球唯一标识符,那么UEFI中GUID到底是如何使用的呢?常说的某个某个变量或者某个Protocol挂载在某个GUID下面又是什么意思呢? 

 /*以gRT->GetVariable()函数为例*/
1
typedef 2 EFI_RUNTIMESERVICE 3 EFI_STATUS 4 (EFIAPI *EFI_GET_VARIABLE) ( 5 IN CHAR16 *VariableName, 6 IN EFI_GUID * VendorGuid, 7 OUT UINT32 *Attributes OPTIONAL, 8 IN OUT UINTN *DataSize, 9 OUT VOID *Data 10 );

       技术分享图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文:https://www.cnblogs.com/szhb-5251/p/11609483.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!