【BIOS/UEFI】Memory Service(篇目一)PEI内存服务

PEI内存服务

HOB

        HOB是一个临时内存,放在CPU 的catch上,可读可写(使用时是只读的)。PEI阶段,同一模块或者不同模块的function之间用HOB传递信息,可以实现全局信息共享(是Data共享)。根据不同的使用需求,HOB被定义为不同的Type:

【CAR(Cache As RAM)是以CPU的Cache作为RAM为PEI阶段的C提供memory资源,以便EFI尽早进入C语言环境。】

【PPI共享的是Services。】

  • EFI_HOB_TYPE_RESOURCE_DESCRIPTOR

  • PHIT HOB

  • Version:与PHIT HOB定义相关的版本号;
  • Boot Mode:系统启动模式;
  • EfiEndOfHobList:The end of the HOB List。

系统 Memory Type

        下表中,OS不可使用表示该内存空间是BIOS使用的,OS不可回收;其余的,在控制权从BIOS移交到OS后,OS都可以重新回收并使用。

 Services

        PEI阶段提供内存管理的服务,比如申请内存空间。内存初始化前后是都需要内存管理服务的,而有一些服务只可以在内存初始化之后使用。内存管理服务包括:InstallPeiMemory()、AllocatePages()、AllocatePool()、CopyMem()、SetMem()、FreePages()。

PEI Service(EFI_PEI_SERVICES)提供了一组最基本的函数调用以及PPI

  • InstallPeiMemory :安装PEI阶段可用的内存空间;
  • AllocatePages:以页为单位申请,分配PEI管理的内存空间,该服务只有在内存空间安装好以后才能使用;
  • AllocatePool:以字节为单位申请,分配PEI管理的内存空间;
  • CopyMem:从源地址复制数据到目的地址;
  • SetMem:用指定的数据填充内存空间。

InstallPeiMemory()

        该函数用于安装PEI阶段可用的永久内存空间,将找到的内存配置注册到 PEI Foundation 中。该函数使得PEIMs能够注册用 PEI Foundation 初始化过的永久内存配置。结果是创建适当的描述物理内存的HOB。发现永久内存的PEIM(Pre-EFI Initialization Module)将调用此服务。

        该服务最多使用一次,不支持内存的多次安装。在第一次调用返回成功后,对该服务的任何调用都被忽略。

        输入参数:PEI服务指针、永久内存的起始地址和大小

  • PeiServices :PEI Foundation 提供的指向 EFI_PEI_SERVICES 表的二级指针;

AllocatePages()

        该函数以页为单位申请内存空间,通常用于申请大段的内存空间。该服务只有在系统内存被安装好以后才能使用(原因是临时内存没有足够的空间)。

        该函数分配请求的页数,返回一个指针,指向分配的页面的基址。该服务扫描可用的内存空间,找到空闲的页面。当发现一个物理上连续的页面块足够大时,该服务会创建一个用所请求的MemoryType描述的内存分配HOB。在永久内存之前分配的将被迁移到永久内存,并更新HOB。

        不支持Memory Allocate Type

        输入参数:PEI服务指针、内存类型、申请的内存大小

        输出参数:分配到内存的物理地址

  • MemoryType:支持的类型仅有:EfiLoaderCode、EfiLoaderData、EfiRuntimeServicesCode、EfiRuntimeServicesData、EfiBootServicesCode、EfiBootServicesData、EfiACPIReclaimMemory、EfiReservedMemoryType、EfiACPIMemoryNVS。
  • Pages:要分配的连续的页的数目(一个页的大小是4KiB);
  • Memary(OUT):指向已被分配的页的基址的指针。

AllocatePool()

        该函数以字节为单位申请,分配PEI管理的内存空间。通常申请少量的内存空间会用到该服务。该服务在整个PEI阶段都可以使用,包括永久内存安装之前。该服务是通过创建HOB数据来获取可用的内存空间的,所以不支持大数据量的内存空间的申请,不超过64K

        该服务从HOB堆中分配内存。由于HOB可以从临时内存和永久内存中分配,所以,该服务在整个PEI阶段都可用。为了保持与HOB对齐,该服务以8B的倍数分配内存(字节对齐)。

        该服务是轻量级的,不支持Memory Type,是基于HOB的(按照HOB的方式实现的)。该服务没有对应的FreePool Service,申请的内存是不能再释放的。

        输入参数:PEI服务指针、申请内存空间的大小

        输出参数:申请到的内存的地址

  • Size:要从 Pool 中分配的字节数;
  • Buffer:指向已分配缓冲区的指针的指针;

CopyMem()

        该函数用于从源缓冲区复制内容到目的缓冲区。

  • Length:复制的字节数;

FreePages()

        将AllocatePages() 分配的内存返回给固件。

  • Memory:要释放的页的的物理地址的基址;
  • Pages:要释放的连续的页的数量。一个页的大小是4KiB(Ki=1024,K=1000)。

SetMem()

用给定的Value 填充缓冲区。

  1. Buffer:指向要填充的缓冲区的指针;
  2. Size:缓冲区中要填充的字节数;

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
BIOS(Basic Input/Output System)和UEFI(Unified Extensible Firmware Interface)是计算机系统中用于启动和初始化硬件设备的软件接口。HII(Human Interface Infrastructure)是UEFI中的一个基本框架,它提供了一种标准化的方式来创建和管理图形用户界面(GUI)。下面是对BIOS/UEFI和HII的基本概述: 1. BIOSBIOS是一种早期的固件接口,在过去的计算机系统中广泛使用。它负责在计算机启动时初始化硬件设备,并加载操作系统。BIOS通常使用基于文本的用户界面(TUI),通过键盘输入来进行配置和设置。 2. UEFIUEFIBIOS的后继者,它提供了更先进的系统启动和硬件初始化功能。UEFI支持更大的硬盘容量、更快的启动速度和更丰富的扩展性。与BIOS相比,UEFI使用图形用户界面(GUI)来提供更直观和易用的界面。 3. HII:HII是UEFI规范中定义的一个基本框架,它提供了一套标准化的API和工具,用于创建、管理和显示UEFI图形用户界面。HII使得开发人员可以轻松地设计和定制UEFI界面,以满足用户的需求。HII还支持多语言和可扩展的用户界面,提供了更好的用户体验。 总而言之,BIOS/UEFI是计算机系统中用于启动和初始化硬件设备的软件接口,而HII是UEFI中的一个基本框架,用于创建和管理图形用户界面。它们共同为计算机提供了更快、更稳定和更易用的启动和配置功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值