【EDK II】作为UEFI的实现,EDK II 的架构是什么样的

目录

前言

EDK II 架构

配置文件

结语


前言

基本输入输出系统 (Basic Input Output System, BIOS) 最早由 IBM(International Business Machines Corporation) 公司于1981年提出并开发,后来成为个人计算机(PC)的标准固件接口。但受限于传统BIOS (Legacy BIOS) 的诸多缺点,如支持的硬盘容量不超过2T,安全性和灵活性也不够,Intel 在2005年提出了新一代固件接口标准——统一可扩展固件接口(Unified Extensible Firmware Interface, UEFI),一言不合,便革了Legacy BIOS的老命。

UEFI并非凭空出现,而是在Legacy BIOS的基础上发展而来,提供了更多的功能和灵活性。所以,即使在UEFI中,也有CSM Mode (Compatibel Support Mode),以实现对Legacy BIOS的支持,让某些老机器能通过UEFI来引导。

目前,UEFI 已经逐渐取代了 Legacy BIOS。许多新的计算机和主板上都采用了UEFI作为固件接口。UEFI相对于BIOS具有更强大的功能和更好的兼容性,支持更大的硬盘容量、启动速度更快、图形界面更友好等优点。 UEFI最新的Spec已经更新到了2.10。但UEFI Spec只是对UEFI进行了规范定义,并未给出具体实现,代码实现这部分工作则是由 TianoCore 社区来实现,其源代码维护在 GitHub 网站。

UEFI 最早的实现是EDK I (EFI Development Kit I),现在已经进化到 EDK II。EDK II 是一个UEFI/PI Spec的一个固件开发环境,具有丰富的 features,和跨平台等特点。

作为一个BIOS工程师,要想深入理解UEFI的设计原理和细节,还是得结合UEFI/PI Spec和EDK II 源码进行学习。

本文主要对 EDK II 的架构做一个简单、粗浅的介绍,算是Kick off,后面再慢慢深入了解,学习EDK II 的某个具体 Package。

EDK II 架构

为了更好地实现UEFI的可扩展性(Extendibility),EDK II 引入了 包(Package)、模块(Module) 的概念。整个EDK II 由许多 Packages 和配置文件组成,也即: EDK II = Packages + Configuration Files.

笔者Download 的EDK II 包含以下 Packages:

通常,EDK II 的 Package 具有以下特点:

  • 最小的发布单元(distribution)
  • 包含零个或多个模块(modules)
  • 包含一个包声明文件(.dec),以及可能包含一个平台描述文件(.dsc)
  • 一个包里面的模块可能依赖于其它包

下表对其中一些 Packages 的功能做了简单介绍。

ArmPkg

针对Arm架构的固件开发工具包,提供相关的Protocols。

ArmPlatformPkg

提供了一组适用于Arm架构平台的特定固件和驱动程序。

ArmVirtPkg

用于在Arm架构的虚拟化环境中构建和运行UEFI固件。

BaseTools

提供了一系列用于开发、构建和调试UEFI固件的命令行工具集合,包括编译器、链接器、工具链和脚本等。由于BaseTools是基于Python编写的,所以这些工具与平台无关,可以在不同的操作系统上运行,并且支持多种编译器和构建配置。

CryptoPkg

为UEFI固件提供安全的加密和密码学功能,以支持安全启动,固件验证,密钥管理和数据保护等应用场景。它包含了一些常见的密码学算法和协议的实现,如AES,RSA,SHA和TLS等。

DynamicTablesPkg

提供了一种在UEFI固件中动态生成ACPI表格的机制。

EmbeddedPkg

提供了用于嵌入式系统的UEFI固件的开源平台,它包括了一些常用的嵌入式功能和驱动程序的实现,如GPIO,SPI,I2C,USB和网络等。

EmulatorPkg

UEFI固件模拟器,可用于非硬件环境中运行UEFI固件。EmulatorPkg 提供了一个基于 QEMU 的 UEFI 固件模拟器,可用于在 PC 上模拟 UEFI 固件的运行环境。它包括了一个模拟的 BIOS 和 UEFI 固件环境,支持 UEFI 规范和 ACPI 规范,并提供了常用的 UEFI Shell 和 Shell 库命令等。开发人员可以在 PC 上运行 UEFI 固件,进行Protocol调用、设备初始化和驱动程序调试等操作。

FatPkg

FatPkg 提供了一些库和驱动程序,用于在 UEFI 固件中对 FAT 文件系统进行操作。它包括了一些常用的文件系统操作,如文件读写、目录遍历、簇分配和空间管理等。此外,FatPkg 还提供了支持 FAT12、FAT16 和 FAT32 文件系统的驱动程序和工具,以方便使用和调试。

FmpDevicePkg

Firmware Management Protocol,FmpDevicePkg 提供了用于开发和支持 FMP 设备的库和驱动程序。它包括了 FMP 协议的实现和相关的功能接口,以及用于固件更新管理的驱动程序和工具。开发人员可以使用 FmpDevicePkg 来构建支持 FMP 协议的设备或固件功能,并实现固件更新和管理的功能。

IntelFsp2Pkg

 Firmware Support Package 2(FSP 2),通过使用 IntelFsp2Pkg,开发人员能够快速搭建基于 Intel 平台的 UEFI 固件,并根据硬件特性和要求进行定制和配置。IntelFsp2Pkg 还提供了一些工具和示例代码,用于帮助开发人员进行 FSP 2 的集成和调试。

MdeModulePkg

MdeModulePkg 中包含了若干模块,如文件系统、网络、媒体、安全等,以及 UEFI 标准规范定义的模块,如 UEFI Boot 和 UEFI Runtime Services。这些模块提供了 UEFI 固件开发中常用的功能和服务,如文件读写、网络传输、音视频播放、加密解密等。

MdePkg

MdePkg 包含了 UEFI 规范定义的各种模块,如 UEFI Core、UEFI Boot、UEFI Runtime Services 等。这些模块实现了 UEFI 规范中定义的接口和功能,包括启动引导、运行时服务、协议和驱动程序框架等。MdePkg 是 EDK II 的核心部分,其他的 Pkg(Package)也可以依赖和扩展 MdePkg 中的模块和功能。

NetworkPkg

NetworkPkg 中包含了若干模块,如 TCP/IP 协议栈、DHCP 客户端、SNMP 代理、网卡驱动程序等,以及与网络相关的应用程序和工具,如 TFTP 客户端和服务器、FTP 客户端、HTTP 客户端和服务器等。

OvmfPkg

OVMF(Open Virtual Machine Firmware)是一个开源项目,旨在为虚拟机提供符合 UEFI 规范的 BIOS 替代方案。OVMFPkg 中的代码可以用于构建支持 UEFI 的虚拟机环境,以便在虚拟机中运行基于 UEFI 的操作系统(如 Windows、Linux 等)

PcAtChipsetPkg

PcAtChipsetPkg 中包含了各种针对传统 PC 架构芯片组的 UEFI 驱动程序,如 Intel H55、P55 和 Z68 芯片组、AMD 970 和 990FX 芯片组等。这些驱动程序实现了 UEFI 规范定义的接口和功能,以支持 UEFI 引导启动、硬件访问和系统配置等操作。

PrmPkg

PrmPkg(Platform ROM Manifest Package)为 UEFI 固件中的平台固化设置(Platform ROM Manifest)提供了支持。平台固化设置是一组包含在 UEFI 固件中的配置数据,用于指定特定平台的默认配置和行为。

RedfishPkg

RedfishPkg 中的驱动程序和应用程序实现了 UEFI 固件中与 Redfish 标准兼容的功能和接口。它们可以将服务器硬件资源的信息发布为 Redfish API,让管理者可以通过使用标准的 HTTP 请求和响应来访问和控制服务器。

SecurityPkg

SecurityPkg 中包含了一系列用于增强 UEFI 固件安全性的组件,包括 Secure Boot 驱动程序、认证和授权模块、数字签名工具、加密算法库等。

ShellPkg

ShellPkg 中的驱动程序和应用程序可以在 UEFI 固件中或操作系统环境中实现 Shell 环境及其相关命令和脚本的功能。它们可以加载、执行和管理 Shell 命令和脚本,并提供标准 I/O 控制和文件系统访问等功能。

SignedCapsulePkg

SignedCapsulePkg 添加了一个包含数字签名的验证步骤,以增强 Capsule 包的安全性。它使用数字证书来验证 Capsule 包的完整性和适用性,并防止未经授权的 Capsule 包加载和运行。

SourceLevelDebugPkg

SourceLevelDebugPkg 中包含了一些调试驱动程序和工具,用于与调试器交互并实现源代码级别的调试功能。这些驱动程序和工具可以与支持源代码级别调试的调试器一起使用,例如 EDK II Debug Agent 或其他兼容的调试器。

StandaloneMmPkg

StandaloneMmPkg 旨在为开发人员提供一种在 UEFI 固件中实现内存管理的解决方案。它提供了一个独立的内存管理器模块(Standalone Memory Manager,SMM),该模块可以在 UEFI 固件的 SMM 环境中运行。

UefiCpuPkg

UefiCpuPkg 提供了一些 CPU 相关的驱动程序和库,用于控制和管理 CPU 行为,如电源管理、多核处理、浮点运算、高级定时器等。它也提供了一些基本的 CPU 功能接口和协议,如 EFI CPU 协议、EFI MP 服务等。

UefiPayloadPkg

UefiPayloadPkg 的目标是将 UEFI (统一的可扩展固件接口)引入嵌入式系统中,以提供更多的功能和灵活性。它提供了一个 UEFI 负载模块,可以与主引导加载程序(如 Coreboot 或 U-Boot)一起使用,从而构建出支持 UEFI 标准的完整系统。

UnitTestFrameworkPkg

UnitTestFrameworkPkg 旨在帮助开发人员编写和运行单元测试,以验证 UEFI 驱动程序、应用程序或其他模块的正确性和稳定性。它提供了一套功能丰富的工具和库,可用于构建测试用例、执行测试、收集和分析测试结果。

配置文件

配置好 EDK II 的环境后,执行Build指令,会在EDK II 目录下生成一个Build文件夹,该文件夹里保存了Build生成后的Image和其它文件。

关于 EDK II 的硬件平台配置,则是通过 Conf 文件夹下面的相关文件来实现,主要有配置三个文件:

  • build_rule.txt: 编译规则配置,保持默认就好,基本无需改动。
  • tools_def.txt : 定义了一些编译相关的工具。
  • target.txt : 目标硬件平台配置。
ACTIVE_PLATFORM       = EmulatorPkg/EmulatorPkg.dsc   ## 配置当前编译的有效平台,通过指定*.dsc文件实现(.dsc描述了具体某个平台的内容)
TARGET                = DEBUG                         ## 模式,DEBUG/RELEASE
TARGET_ARCH           = X64                           ## 目标平台的架构,比如IA32,X64
TOOL_CHAIN_CONF       = Conf/tools_def.txt            ## 指的编译时的工具配置文件
TOOL_CHAIN_TAG        = VS2019                        ## 指定编译用到的编译器,比如VS2019
MAX_CONCURRENT_THREAD_NUMBER = 15                     ## 设置编译时最大的并行线程数量
BUILD_RULE_CONF = Conf/build_rule.txt                 ## 指定编译规则文件

结语

好,本文的内容就到这里,后面将会针对EDK II 的 Package、Module进行详细介绍。最后,欢迎关注笔者的知乎账号(@月初),第一时间获取最新,最全的文章内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/455645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣串题:字符串中的第一个唯一字母

映射做法&#xff1a;将字母转为数字之类的转化必须在运算中实现如-a int firstUniqChar(char * s){int a[26] {0};int len strlen(s);int i;for (i 0; i < len; i)a[s[i] - a];for (i 0; i < len; i) {if (a[s[i] - a] 1)return i;}return -1; }

聚观早报 | 比亚迪e2荣耀版上市;华为享界S9正式亮相

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月14日消息 比亚迪e2荣耀版上市 华为享界S9正式亮相 理想汽车L系列改名 极氪全新纯电MPV车型曝光 vivo X100S外…

一键导入Figma,让团队文件管理更加便捷安全!

如何将Figma引入国内软件已成为人们关注的话题。本文将分享两种Figma导入方法&#xff0c;使您的设计文件更加安全。 两种方法&#xff0c;一键导入Figma文件 即时设计是一种基于云的设计工具&#xff0c;在功能和特性上与Figma非常相似。如果你熟悉Figma的界面&#xff0c;即…

Day31:安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

目录 打包器-WebPack-使用&安全 第三方库-JQuery-使用&安全 思维导图 JS知识点&#xff1a; 功能&#xff1a;登录验证&#xff0c;文件操作&#xff0c;SQL操作&#xff0c;云应用接入&#xff0c;框架开发&#xff0c;打包器使用等 技术&#xff1a;原生开发&…

RAG一文读懂!概念、场景、优势、对比微调与项目代码示例

本文结合“基于 ERNIE SDKLangChain 搭建个人知识库”的代码示例&#xff0c;为您讲解 RAG 的相关概念。 01 概念 在2020年 Facebook AI Research(FAIR)团队发表一篇名为《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》的论文。这篇论文首次提出了 RA…

Midjourney绘图欣赏系列(九)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

行业认可 | 海云安上榜《2024年网络与信息安全行业全景图》多个领域

近日&#xff0c;深圳市网络与信息安全行业协会正式发布《2024年网络与信息安全行业全景图》。海云安凭借过硬的技术实力及成熟的网络与信息安全产品及服务获得行业认可&#xff0c;入围6大类目共计17项细分领域。包括&#xff1a; 业务安全&#xff08;软硬件开发安全、人工智…

《vtk9 book》 官方web版 第3章 - 计算机图形基础 (5 / 5)

vtkProp的组件和其他类型 通常希望将演员收集到一个依赖于变换的层次结构中。例如&#xff0c;一个机器人手臂可以由刚性连接的链接表示&#xff0c;这些链接在肩关节、上臂、肘部、下臂、腕关节和手部等关节处连接在一起。在这种配置中&#xff0c;当肩关节旋转时&#xff0c;…

[C++]20.实现红黑树。

实现红黑树 一.基本概念&#xff1a;1.红黑树的概念&#xff1a;2.红黑树的性质&#xff1a; 二.实现红黑树&#xff1a;1.基本结构&#xff1a;2.插入节点的多种情况&#xff1a;1.叔叔存在且为红&#xff1a;2.叔叔不存在/存在且为黑(单旋变色)3.叔叔不存在/存在且为黑(多旋&…

Wi-Fi 6E简介:扩展Wi-Fi的频谱资源

一、Wi-Fi 6E是什么&#xff1f; Wi-Fi 6E是Wi-Fi 6的一个增强版本&#xff0c;其中的“E”代表“Extended”。它采用了相同的技术标准&#xff0c;但使用了更高的频段。Wi-Fi 6E在5 GHz频段之外引入了新的6 GHz频段&#xff0c;为用户提供了更多的可用频谱&#xff0c;以便提…

滑动窗口算法(1)

目录 基本概念 209.长度最小的子数组 一、题目描述 二、思路解析 三、代码 3.无重复字符的最长子串 一、题目描述 二、思路解析 三、代码 1004.最大连续1的个数 一、题目描述 二、思路解析 三、代码 1658.将x减到0的最小操作数 一、题目描述 二、思路解析 三、…

JSP-内置对象

Out对象 作用&#xff1a;用来给页面输出数据。 主要方法&#xff1a; Print(string) </br>换行 Println(string) 方法同上 <%page language"java" contentType"text/html;charsetUTF-8"%> <html><head><title>test.…

基于深度学习的图像去雨去雾

基于深度学习的图像去雨去雾 文末附有源码下载地址 b站视频地址&#xff1a; https://www.bilibili.com/video/BV1Jr421p7cT/ 基于深度学习的图像去雨去雾&#xff0c;使用的网络为unet&#xff0c; 网络代码&#xff1a; import torch import torch.nn as nn from torchsumm…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了&#xff0c;我们知道Prompt工程是指人们向生成性人工智能&#xff08;AI&#xff09;服务输入提示以生成文本或图像的过程中&#xff0c;对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

【Python】使用plt库绘制动态曲线图,并导出为GIF或MP4

一、绘制初始图像 正常使用plt进行绘图&#xff0c;这里举例一个正弦函数&#xff1a; 二、绘制动态图的每一帧 思路&#xff1a; 根据横坐标点数绘制每一帧画面每次在当前坐标处&#xff0c;绘制一个点和垂直的线&#xff0c;来表示当前点可以在点上加个坐标等样式来增加…

Gut Microbes | 新生儿微生物组研究的方法学挑战

摘要 新生儿出生后&#xff0c;肠道菌群的定植对新生儿的健康发育起着至关重要的作用&#xff0c;并影响其日后的健康和疾病。了解新生儿肠道菌群的发育以及其与新生儿宿主的相互作用是一个重要的研究领域。然而&#xff0c;该领域的研究必须解决影响研究方法设计和实施的一系…

【Java系列】OOM 时,JVM 堆栈信息保存和分析

一、前言 在日常开发中&#xff0c;即使代码写得再谨慎&#xff0c;免不了还是会发生各种意外的事件&#xff0c;比如服务器内存突然飙高&#xff0c;又或者发生内存溢出(OOM)。当发生这种情况时&#xff0c;我们怎么去排查&#xff0c;怎么去分析原因呢&#xff1f; 一般遇到…

展厅设计中灯光的要点都是什么

1、白炽灯 白炽灯也就是普通普通白炽灯泡白炽灯有显色性强&#xff0c;开灯即亮&#xff0c;明暗可调&#xff0c;结构简单&#xff0c;造价低等优点&#xff0c;但缺点是使用寿命短&#xff0c;光效较低展厅设计中常使用于走道和其他部位。 2、卤钨灯 充气白炽灯填充气体中含有…

代码随想录day20(1)二叉树:二叉树的最小深度(leetcode111)

题目要求&#xff1a;求出一棵二叉树的最小深度 思路&#xff1a;最小深度指的是从根节点到最近叶子节点的最短路径上的节点数量&#xff08;左右孩子必须都为空&#xff01;&#xff09;。思路类似于求二叉树的最大深度&#xff0c;仍然采用后序遍历&#xff0c;增加判断只有…

Docker启动安装nacos(踩过坑版)

1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ 3、启动nacos并复制文件到宿主机&#xff0c;关闭容器 启动容器 docker run -p 8848:8848 --name nacos -d nacos/nacos-se…
最新文章