uefi bios pei 阶段最重要的一个数据结构(结构体)_uefi_artisan的博客-程序员秘密

在PEI阶段,全局变量大概有这么几个: gPs  PEI Service 结构的实现,包括所有的PEI 服务的函数指针。比如学见的PeiInstallPPi, PeiCreateHob, PeiSetSystem. 

其次就是PrivateData, 这个是今天我们要讨论的问题,其类型为 PEI_CORE_INSTANCE.

具体就是长这个样子:

 struct _PEI_CORE_INSTANCE {
  184   UINTN                              Signature;
  185   
  189   EFI_PEI_SERVICES                   *Ps;
  190   PEI_PPI_DATABASE                   PpiData;
  191   
  195   UINTN                              FvCount;
  196   
  201   PEI_CORE_FV_HANDLE                 *Fv;
  202 
  207   PEI_CORE_UNKNOW_FORMAT_FV_INFO     *UnknownFvInfo;
  208   UINTN                              UnknownFvInfoCount;
  209   
  213   EFI_PEI_FILE_HANDLE                *CurrentFvFileHandles;
  214   UINTN                              AprioriCount;
  215   UINTN                              CurrentPeimFvCount;
  216   UINTN                              CurrentPeimCount;
  217   EFI_PEI_FILE_HANDLE                CurrentFileHandle;
  218   BOOLEAN                            PeimNeedingDispatch;
  219   BOOLEAN                            PeimDispatchOnThisPass;
  220   BOOLEAN                            PeimDispatcherReenter;
  221   EFI_PEI_HOB_POINTERS               HobList;
  222   BOOLEAN                            SwitchStackSignal;
  223   BOOLEAN                            PeiMemoryInstalled;
  224   VOID                               *CpuIo;
  225   EFI_PEI_SECURITY2_PPI              *PrivateSecurityPpi;
  226   EFI_PEI_SERVICES                   ServiceTableShadow;
  227   EFI_PEI_PPI_DESCRIPTOR             *XipLoadFile;
  228   EFI_PHYSICAL_ADDRESS               PhysicalMemoryBegin;
  229   UINT64                             PhysicalMemoryLength;
  230   EFI_PHYSICAL_ADDRESS               FreePhysicalMemoryTop;
  231   UINTN                              HeapOffset;
  232   BOOLEAN                            HeapOffsetPositive;
  233   UINTN                              StackOffset;
  234   BOOLEAN                            StackOffsetPositive;
  235   PEICORE_FUNCTION_POINTER           ShadowedPeiCore;
  236   CACHE_SECTION_DATA                 CacheSection;
  237   //
  238   // For Loading modules at fixed address feature to cache the top address below which the 
  239   // Runtime code, boot time code and PEI memory will be placed. Please note that the offset between this field 
  240   // and  Ps should not be changed since maybe user could get this top address by using the offet to Ps. 
  241   //
  242   EFI_PHYSICAL_ADDRESS               LoadModuleAtFixAddressTopAddress;
  243   //
  244   // The field is define for Loading modules at fixed address feature to tracker the PEI code
  245   // memory range usage. It is a bit mapped array in which every bit indicates the correspoding memory page
  246   // available or not. 
  247   //
  248   UINT64                            *PeiCodeMemoryRangeUsageBitMap;
  249   //
  250   // This field points to the shadowed image read function
  251   //
  252   PE_COFF_LOADER_READ_FILE          ShadowedImageRead;
  253 
  254   //
  255   // Pointer to the temp buffer with the PcdPeiCoreMaxPeimPerFv + 1 number of entries.
  256   //
  257   EFI_PEI_FILE_HANDLE               *FileHandles;
  258   //
  259   // Pointer to the temp buffer with the PcdPeiCoreMaxPeimPerFv number of entries.
  260   //
  261   EFI_GUID                          *FileGuid;
  262 
  263   //
  264   // Temp Memory Range is not covered by PeiTempMem and Stack.
  265   // Those Memory Range will be migrated into phisical memory. 
  266   //
  267   HOLE_MEMORY_DATA                  HoleData[HOLE_MAX_NUMBER];
  268 };

PrivateData 我们通常叫做PeiMain的内部数据结构,维护运行PEI阶段所有需要的数据信息,包括PEI 服务, FV 数据空间,PEI 模块的dispatch 状态, 可使用的内存空间等等,由于pei 早期没有内存可用,PeiMain定义了一个该数据的局部变量,把其存储在PeiMain入口函数的栈上,而PeiMain 的入口函数在整个PEI 阶段并不会退出,所以栈上的数据可作为全局数据使用,但是全局变量的地址需要函数参数在不同的函数之间传递。



PEI_CORE_FV_HANDLE 数据结构

此数据结构用来记录一个PeiMain 识别的FV空间的数据信息,包括其起始位置,数据格式解析的PPI, 自己的句柄以及所包含的每个PEI模块的派遣状态和每个文件的句柄,


它的真实样子是这样的:

 typedef struct {
  110   EFI_FIRMWARE_VOLUME_HEADER          *FvHeader;
  111   EFI_PEI_FIRMWARE_VOLUME_PPI         *FvPpi;
  112   EFI_PEI_FV_HANDLE                   FvHandle;
  113   //
  114   // Ponter to the buffer with the PcdPeiCoreMaxPeimPerFv number of Entries.
  115   //
  116   UINT8                               *PeimState;
  117   //
  118   // Ponter to the buffer with the PcdPeiCoreMaxPeimPerFv number of Entries.
  119   //
  120   EFI_PEI_FILE_HANDLE                 *FvFileHandles;
  121   BOOLEAN                             ScanFv;
  122   UINT32                              AuthenticationStatus;
  123 } PEI_CORE_FV_HANDLE;


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/robinsongsog/article/details/76795283

智能推荐

.htaccess设置技巧_WordPress的12个最有用的.htaccess技巧_cumyupx7788305的博客-程序员秘密

.htaccess设置技巧Are you looking for some useful .htaccess tricks for your WordPress site. The .htaccess file is a powerful configuration file which allows you to do a lot of neat things on your website. ...

国内外深度学习开放数据集下载集合(值得收藏,不断更新)_haoji007的博客-程序员秘密

一、Image processing data set1、MNIST ,是最流行的深度学习数据集之一。这是一个手写数字数据集,包含一个有着 60000 样本的训练集和一个有着 10000 样本的测试集。对于在现实世界数据上尝试学习技术和深度识别模式而言,这是一个非常好的数据库,且无需花费过多时间和精力进行数据预处理。大小:约 50 MB数量:70000 张图像,共分为 10 个类别。...

分享Kali Linux 2016.2第50周镜像文件_ciqihui0949的博客-程序员秘密

分享KaliLinux2016.2第50周镜像文件KaliLinux官方于12月11日发布KaliLinux2016.2的第50周镜像。这次保持以往规律,仍然是11个镜像文件。默认的Gnome桌面的4个镜像,...

安装Deepin V20.2双系统后优化的一些事项_deepin卸载自带浏览器_杼蛘的博客-程序员秘密

一、卸载系统自带3款软件卸载①卸载自带的office,待卸载完成。②卸载自带的浏览器,待卸载完成。③卸载自带的输入法(sunpinyin),待卸载完成。安装①去应用商城安装WPS,待安装完成。②去应用商城安装谷歌浏览器,待安装完成。③去应用商城安装搜狗输入法,待安装完成。④去应用商城安装QQ,待安装完成。最好一步一步来,免得出现问题卡Bug,最后重启。二、屏蔽Windows分区查询分区UUID:lsblk -f新建:90-hide_parts.rules

seata1.4.2 配置Apollo错误_seata apollo_风顶的博客-程序员秘密

Caused by: java.lang.NullPointerException: nullorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'globalTransactionScanner' defined in class path resource [io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.cl

mysql中join查询效率问题_mysql where和 join on 哪个效率高_钱建民的博客-程序员秘密

展开全部关于 “A LEFT JOIN B ON 条件636f707962616964757a686964616f31333363373666表达式” 的一点提醒ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行,即使on中包含有A表中的列的限制条件,也不会过滤A的任何数据(A的数据只会通过where过滤)。如果 B 表中没有任何一行数据匹配 ...

随便推点

Git/GitHub学习_文杰_prise的博客-程序员秘密

GitHub介绍 众所周知,GitHub是一个代码托管平台,可以依据现在目前最流行的版本管理方式Git进行管理,可以说,GitHub就是程序员的FaceBook,它让我领略到了开源的魅力。Git介绍 Git是目前最流行的版本管理方式,其他的版本管理方式,我也有所了解,比如说SVN。和svn相比,git有太多的有点,比如,我在本地管理仓库的时候是不需要联网的,而svn不行,不联网它就不干

【图像识别】基于k-means聚类的手势识别matlab 源码_Matlab科研辅导帮的博客-程序员秘密

一、简介提取手部轮廓特征,k-means聚类算法,训练得到手势识别模型,然后用测试数据测试。1 K-means算法原理K-means算法是最常用的一种聚类算法。算法的输入为一个样本集(或者称为点集),通过该算法可以将样本进行聚类,具有相似特征的样本聚为一类。针对每个点,计算这个点距离所有中心点最近的那个中心点,然后将这个点归为这个中心点代表的簇。一次迭代结束之后,针对每个簇类,重新计算中心点,然后针对每个点,重新寻找距离自己最近的中心点。如此循环,直到前后两次迭代的簇类没有变化。下面通过一个

Hadoop3.2.0运行wordcount程序报错Please check whether your etc/hadoop/mapred-site.xml contains the below_QYHuiiQ的博客-程序员秘密

将修改后的文件同步到集群中的其他节点上,不需要重启集群,重新运行原来自己要执行的程序即可正常执行。

帧间预测--merge模式理论部分_失去的都是人生的博客-程序员秘密

作者:66在开始帧间预测代码分析之前,先把理论部分再理一遍。这部分涉及到的知识点较之前多些,相关的资料与代码不容易找出匹配的部分,造成作为新手的我阅读源代码反复好几次才搞清楚(还没体验过上手就明了的感觉)。我把理论部分修改尽力趋同于后面对代码的解析。相关的名词:ME(运动估计)、MC(运动补偿)、MV(运动向量,其实就是运动距离加方向,代码中用Dir表示方向,MV表示距离)、SAD(绝

sta与mta_mta sta_苒止的博客-程序员秘密

STA: Single-Thread Apartment, 中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败。 MTA: Mutil-Thread Apartment,中文叫多线程套间。COM库在进程中创建一

localStorage 和 sessionStorage 的使用_weixin_45368324的博客-程序员秘密

本地缓存Storage localStorage及sessionStorage使用(没有过期时间,不清空就一直在) 在审查台Application-Storage里查看设置setItem(key, value) 添加或更新(如果数据项中已存在该key)数据项中指定key的value获取getItem(key) 获取数据项中指定key对应的value移出指...

推荐文章

热门文章

相关标签