UEFI原理与编程实践--UEFI系统的启动过程_uefi 开源代码启动流程分析-程序员宅基地

技术标签: UEFI  启动流程  

看图粗略说一下:

SEC:

安全验证阶段,这个阶段,需要用Assembly做一些 C 无法处理的工作,C语言无法处理CPU的特殊寄存器。让CPU进入Protected Mode(Flat Mode)的环境,会使用到CPU内部的临时ram,其实也就是缓存,这个阶段主要还是使用的汇编,也就是说为后面的阶段建立一个C语言和硬件通信的编译环境,最后将控制权交给PEI Phase。

PEI:

很基本的Chipset 初始化、 Memory Sizing、 BIOS Recovery、 ACPI S3 Resume 、切换Stack to Memory、启动DxeIpl。这个阶段就是开始一些CPU、主板、芯片的初始化了,也就是EFI前期初始化,这个阶段后期才是内存的初始化,知道内存初始化的地方可以便于debug。PEI阶段对系统的初始化主要是PEIM完成的,PEIM之间的通信又是通过PPI完成,进入DXE阶段需要HOB列表。

HOB : Hand off Block

有些 information 要从 PEI Phase 传到 DXE Phase 组成 ,每一个Block有自己的GUID & Structure 。HOB的Block List是动态的,没有顺序要求。

DXE:

遍历固件中的所有的DXE driver,也就是驱动执行环境,当然了,DXE阶段也有DXE派遣器,通信通过protocol,也就是协议。当所有的 dxe driver加载完成后,系统完成初始化,DXE通过EFI_BDS_ARCH_PROTOCOL找到BDS并调用BDS的入口函数,从而进入BDS阶段,从本质上讲,BDS是一种特殊的DXE阶段的应用程序。

BDS:

BDS:Boot Device Selection,启动必要的驱动程序,启动设备选择。BDS策略通过全局NVRAM变量配置,通过修改变量值修改启动顺序(bootorder),这个修改启动顺序在工厂需要经常用到的,工厂都是批量生产,因此需要写个工具给产线TE,批量修改启动顺序。

TSL:

操作系统加载器执行的第一阶段,在这一阶段OS Loader作为一个UEFI应用程序运行,系统资源仍然由UEFI内核控制。

RT:

Run Time,系统控制权从UEFI内核转交到OS Loader手中。

上述是很久之前写的,直接copy了,现在回过头来看,其实这样写是很笼统的,这次,咱们就追踪一下代码,看它到底是怎么跑的吧:

代码追踪

由于目前手上使用的是made in china cpu(ARM)的,所以仅针对这个平台做一下代码追踪,

首先SEC,这里面的汇编代码就不细说了,就说一下SEC跑完了,会进入C,汇编load的就是这个c入口的地址,进入PEI阶段后,这里有个前期和后期的区分,看下代码:

VOID
CEntryPoint (
  IN  UINTN                     MpId,
  IN  EFI_PEI_CORE_ENTRY_POINT  PeiCoreEntryPoint
  )
{
  CHAR8 Char;
  // Data Cache enabled on Primary core when MMU is enabled.
  //ArmDisableDataCache ();
  // Invalidate Data cache
  //ArmInvalidateDataCache ();
  // Invalidate instruction cache
  //ArmInvalidateInstructionCache ();
  // Enable Instruction Caches on all cores.
  Char = 'A';
  SerialPortWrite ((UINT8 *)&Char, 1);
  ArmEnableInstructionCache ();
  Char = 'B';
  SerialPortWrite ((UINT8 *)&Char, 1);

该代码在ArmPlatformPkg/PrePeiCore/PrePeiCore.c,跑啊跑,最后跑到

 // Goto primary Main.
    PrimaryMain (PeiCoreEntryPoint);

// Jump to PEI core entry point
  DEBUG((EFI_D_INFO, "%a() Line=%d \n", __FUNCTION__, __LINE__));
  (PeiCoreEntryPoint)(&SecCoreData, PpiList);

这个PeiCoreEntryPoint不就是_ModuleEntryPoint,PEI image的入口函数,_ModuleEntryPoint最终又调用MdeModulePkg\Core\Pei\PeiMain.c中的函数PeiCore,进入PeiCore后,先根据SEC传入的信息设置PEI CORE services

 //
  // Initialize PEI Core Services
  //
  InitializeMemoryServices   (&PrivateData, SecCoreData, OldCoreData);

然后调用PeiDispatcher执行系统中的PEIM,这个过程需要用到PPI协议,调度系统中的PEIM的过程中就有提供CPU相关功能,例如Cache设置、主频设置,有内存初始化、IO控制器,内存控制器等等,这一部分在PlatformPei.efi中实现,通过拉取PBF中的内容,拉取后再运行MemoryInit.efi,当内存初始化后,系统会重新发生栈切换并第二次进入PeiCore,重新进入后使用的内存就是我们熟悉的内存,然后再运行CpuPei.efi,最终准备HOB列表,利用DXE IPL PPI找到DXE image的入口函数,执行入口函数并将hob列表传递给DXE,这里主要在DxeIpl.efi中运行,运行完了,就进入DxeCore.efi里面并最终通过gBds->Entry (gBds)进入BdsDxe。

之所以写这么多,主要是因为本人想自己重新做一个postcode,写在这里也是笔记,特别是在启动界面挂了,还能发现问题,我觉得这个idea非常不错

UINT32
EFIAPI
PostCode (
  IN UINT32  Value
  )
{
  Value &= 0xFFF;
  //Get the StatusCode set using GetPhaseStatusCode
  Value |= GetPhaseStatusCode();
  IoWrite32 (0x80, Value);
  DEBUG ((DEBUG_INFO, "POSTCODE=<%08x>\n", Value));

  return Value;
}

ok,启动流程就先写到这里。。。。

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

智能推荐

Java多线程系列--sun.misc.Unsafe的理解-程序员宅基地

文章浏览阅读682次。前言Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Hadoop、Kafka等。使用Unsafe可用来直接访问系统内存资源并进行自主管理,Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。Unsafe可认为是Java中留下的后门,提供..._sun.misc.unsafe

Linux统计文件夹下的文件数目_统计linux文件夹下文件夹数目-程序员宅基地

文章浏览阅读178次。(转载:https://blog.csdn.net/quincuntial/article/details/54943351)Linux下有三个命令:ls、grep、wc。通过这三个命令的组合可以统计目录下文件及文件夹的个数1、统计当前目录下的文件的个数(不包括目录)$ls -l | grep "^-" | wc -l2、统计当前目录下文件的个数(包括子目录)$ls -lR| ..._统计linux文件夹下文件夹数目

“Gm”选项已否决,并将在将来的版本中移除,“/ZI”和“/Gy-”命令行选项不兼容_“gm”选项已否决,并将在将来的版本中移除-程序员宅基地

文章浏览阅读5.3k次,点赞2次,收藏11次。VS2019下列报错解决方法:2>cl : 命令行 warning D9035: “Gm”选项已否决,并将在将来的版本中移除2>cl : 命令行 error D8016: “/ZI”和“/Gy-”命令行选项不兼容_“gm”选项已否决,并将在将来的版本中移除

小米汽车供应链一览!-程序员宅基地

文章浏览阅读101次。关注+星标公众号,不错过精彩内容来源 | 电子发烧友网/新材料在线(以上图源:新材料在线)电子发烧友统计发现,自2021年小米宣布造车以来,小米投资的汽车产业链相关企业超过30多家,涉及电池、模拟芯片、MCU、激光雷达、功率器件、MLCC等领域。在底盘方面,小米SU7汽车的供应商有博世、采埃孚、布雷博、拓普集团、森萨塔、保隆科技、奥联电子、海斯坦普、米其林、倍耐力、万向钱潮等。在动力系统方面,小米...

C++学习笔记-程序员宅基地

文章浏览阅读650次。C++学习笔记,主要供自己参考。如有错误,欢迎指正。知识点比较零散,而且很多用不到。(有些不是C++的笔记也塞进来了)_c++学习笔记

postgresql数据库扩展之fdw_fdw pgsql-程序员宅基地

文章浏览阅读678次,点赞9次,收藏27次。PostgreSQL中的Foreign Data Wrapper(FDW)是一个强大的功能,它允许你访问和操作存储在外部源中的数据,就好像它是PostgreSQL数据库内的一个表一样。这意味着你可以直接从PostgreSQL查询和联接不同数据库和系统中的数据。FDW可以用于多种数据源,包括其他SQL数据库、NoSQL数据库,甚至是CSV或JSON这样的文件格式。:首先,你需要为想要连接的特定类型的数据源安装FDW扩展。PostgreSQL内置了一个用于其他PostgreSQL服务器的FDW(_fdw pgsql

随便推点

【光流法实现目标追踪:Python实战指南】_光流追踪-程序员宅基地

文章浏览阅读990次。在计算机视觉领域,视频是一种非常重要的数据形式,它由一系列有序的图像帧组成。这些图像帧按照一定的逻辑顺序组成视频的不同层次,包括帧(Frame)、镜头(Shot)、场景(Scene)和视频(Video)。帧(Frame): 帧是视频的基本单元,实际上就是一幅图像。在视频中,每一帧呈现了一个瞬间的静态画面。其中,关键帧(Key Frame)是具有代表性的帧,通常用来代表整个视频内容。镜头(Shot): 镜头由一系列相邻的帧组成,这些帧捕捉了同一个事件或者摄像机的一组连续运动。_光流追踪

开源流程引擎三巨头:activiti、flowable、camunda,最推荐使用哪个?-程序员宅基地

文章浏览阅读188次。全新前后端微商城项目,手把手教学!全新前后端微商城项目,手把手教学!全新前后端微商城项目,手把手教学!市场上比较有名的开源流程引擎有osworkflow、jbpm、activiti、flowable、camunda。其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。低代码平台、办公自动化(OA..._activiti和flowable哪个好

anaconda+pycharm配置tensorflow-GPU环境最简单方法_pycharm如何用显卡运行-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏6次。2018年开始学习tensorflow框架。买了块显卡1060 6G。装上了原生的ubuntu16.04。从安装显卡驱动到cuda和cudnn。无奈配置tensorflow环境一直报错。之后转回windows系统。试着继续用网上说的命令行配置,还查了tensorflow的官方文档。还是报错。最后用最简单的anaconda navigator配置成功。前后不到2个小时。下面说下步骤。首先..._pycharm如何用显卡运行

在ASP.NET应用启动的时候初始化的几种方法_.net页面初始化函数是哪个-程序员宅基地

文章浏览阅读1.2k次。ASP.NET 4.0 之前,有两种方法:通过Global.asax 中的 Application_Start 事件启动,或者通过定义在 App_Code 文件夹中任意类中的AppInitialize 静态方法。方法的原型定义如下:public static void AppInitialize() AppInitialize 方法是 ASP.NET 中一个特殊的方法,在网站应用程序启动之_.net页面初始化函数是哪个

底层进阶 | 移动端 GPU 架构 -- TBR 模型-程序员宅基地

文章浏览阅读1.3k次。在知乎上关注了好多图形学大佬,感觉现在知乎的技术氛围要比掘金推荐旧文好多了,经常会推送感兴趣的领域内容,而且还可以和作者私信交流。这段时间看到有大佬分享 GPU 架构相关的内容,做图像渲染..._tbr

WIN10 控制台cmd乱码及永久修改编码的解决办法_win10控制台乱码-程序员宅基地

文章浏览阅读1.8w次,点赞14次,收藏40次。WIN10 cmd控制台本来的编码是ANSI的,所以要求执行的批处理脚本编码格式也是ANSI才行,要不就两边统一都改成UTF-8处理(作为一个程序员,一般我都会统一成UTF-8编码格式),下面就介绍如何统一改成UTF-8编码格式一、修改控制台CMD编码格式为UTF-8我本机的系统环境:OS Name: Microsoft Windows 10 企业版OS Version: 1..._win10控制台乱码

推荐文章

热门文章

相关标签