UEFI基础知识
文章平均质量分 55
UEFI基础知识
Alix_sz
这个作者很懒,什么都没留下…
展开
-
UEFI(1) - Hello Word 入口函数
EDK2:模块(Module)和包(Package)包:是一组模块及工程描述文件(.dsc文件)模块:动态加载到UEFI内核中,工程模块由元数据文件和源文件组成。UEFI 模块翻译 2023-04-27 11:27:53 · 501 阅读 · 1 评论 -
UEFI下windows启动过程
WINDOWS 启动转载 2022-08-26 17:03:44 · 2491 阅读 · 0 评论 -
UEFI系统的启动过程
启动过程转载 2022-08-26 16:33:44 · 3901 阅读 · 0 评论 -
[UEFI] Hob
UEFI原创 2022-08-26 13:58:38 · 590 阅读 · 0 评论 -
【UEFI基础】第一条指令
Reset Vector本文讲述Intel x86系统启动后执行的最初的指令。在Intel提供的软件开发者手册《64 ia 32 architectures softerware developer manual》中,有一个小节”First Instruction Executed“专门讲述系统中第一条指令的位置。上面的文字简单来说阐明了以下的几点:第一条指令在的位置是0xFFFFFFF0(这个地址有个专有的名称Reset Vector);解释了CPU起来后是实地址模式为什么能够访问到这么高的位原创 2021-11-26 11:45:57 · 1739 阅读 · 0 评论 -
【UEFI基础】Event(三)
Event和Timer在UEFI当中是怎么实现的以及原理,我们先从Timer开始,然后细细的拨开隐藏在底层的实现。先说Timer,那什么是Timer呢?其实在中文里面我们把它叫做定时/计数器,但是我的理解它不仅仅是一个定时/计数器硬件而是一个被程序设计者设定为工作在特殊模式下的 做定时/计数器 ,仅仅是一个硬件的定时器还不能算是Timer。定时/计数器在几乎所有的数字处理器系统当中都是一个必备的设备,没有它我们的各种运行在cpu上的系统软件都会瘫痪,他们就会变成生活在桃花源当中的世外人一样,完全没有时间参转载 2021-11-12 09:32:01 · 1121 阅读 · 0 评论 -
【UEFI基础】Event(二)
事件每一个事件都是一个IEvent类型/** /Dxe/Event/Event.h **/ 45 #define EVENT_SIGNATURE SIGNATURE_32('e','v','n','t') 46 typedef struct { 47 UINTN Signature; 48 UINT转载 2021-11-08 19:13:39 · 1174 阅读 · 0 评论 -
【UEFI基础】Event(四)
粗糙的了解了下事件的基本使用之后,我们来看看事件的具体实现。在CoreInitializeEventServices函数中会初始化一个队列来维护事件。InitializeListHead (&gEventQueue[Index]);原创 2021-11-05 18:13:51 · 832 阅读 · 0 评论 -
【UEFI基础】Event(一)
从头梳理一下UEFI Event原创 2021-11-05 17:24:18 · 1327 阅读 · 0 评论 -
【UEFI基础】UEFI BDS阶段介绍
占坑原创 2021-11-05 09:23:56 · 1350 阅读 · 2 评论 -
【UEFI基础】UEFI DXE阶段介绍
占坑原创 2021-11-05 09:23:22 · 1117 阅读 · 0 评论 -
【UEFI基础】UEFI PEI阶段介绍
占坑原创 2021-11-05 09:22:46 · 656 阅读 · 1 评论 -
【UEFI基础】UEFI SEC阶段介绍
占坑原创 2021-11-05 09:21:42 · 481 阅读 · 0 评论 -
【UEFI实战】RSA算法
RSA算法简述RSA算法中的RSA并不是什么专业术语的缩写,它们是三个名字的头一个字母,这三个人是Rivest、Shamir 和 Adleman,他们提出了这个算法。RSA算法是一个加密算法,用处当然是对数据进行加解密。RSA算是是一种非对称的加密算法,有非对称当然就有对称算法。对称算法的意思是,加密和解密用的密钥是同一个;而非对称算法有一对密钥,称为公钥和私钥,公钥加密的数据用私钥来解密,私钥加密的数据用公钥来解密。非对称算法的好处在于双方可以各自持有公私钥,我用私钥加密之后的数据可以直接给你,转载 2021-11-04 14:32:17 · 414 阅读 · 0 评论 -
【UEFI基础】UEFI Device Path (三): Device Path的产生
UEFI SPEC只要求为系统中的Physical Device创建Device Path,而Virtual Device是无需创建Device Path的。每个Physical Device都会对应1个Controller Handle,在该Handle下会安装其对应的Device Path。Controller Handle与Device Path的创建都与UEFI Driver紧密相关,因此有必须先了解UEFI Driver及其行为。UEFI Driver与Controller的关系UEFI SP转载 2021-11-04 10:47:16 · 3089 阅读 · 0 评论 -
【UEFI基础】Shell下的命令(一)
什么是UEFI ShellUEFI Shell是一种特殊对待UEFI_APPLICATION。提供用户和UEFI系统之间的一个接口。它有很强大的功能,但是正常启动计算机系统时,不会用到UEFI Shell,只有当系统启动出现问题,或者用户就是喜欢UEFI Shell(就像博主我一样,深深的爱着UEFI),主动进入UEFI Shell来对计算机系统进行配置,那么就到了UEFI Shell 大显身手,炫酷吊炸天的时候来了。玩儿转UEFI ShellShell提供了丰富的内部命令。可以分为几大类:调试(De转载 2021-11-03 14:50:30 · 11852 阅读 · 1 评论 -
【UEFI基础】System Table(二)
参考WWW.LAB-Z.COM大神的操作来寻找一下System Table.以OVMF 代码为例, 在 \MdeModulePkg\Core\Dxe\DxeMain\DxeMain.c 中可以查到。为了验证,我修改代码,在整个 Table 的最后面加上一个标记。 MemoryProfileInit (HobStart); // // Allocate the EFI System Table and EFI Runtime Service Table from EfiRuntimeServic原创 2021-11-03 14:16:11 · 561 阅读 · 0 评论 -
【UEFI基础】System Table(一)
System TableSystem Table是UEFI软件架构中最重要的一个部分,基本的代码都离不开它。下面是一个基本的UEFI模块中会包含的Entry Point,它就有一个参数是System Table:typedefEFI_STATUS(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable );以8254Timer这个模块为例,它的inf模块中转载 2021-11-03 09:56:09 · 3149 阅读 · 0 评论 -
【UEFI基础】Device Path(二)
UEFI中通过Device Path来描述设备的路径,一个完整的路径由多个Device Path Nodes组成。下面通过输入设备的路径作为例子:PNP0A03 – PCI Host BridgePNP0303 – PC Keyboard ControllerConIn: The device path of the default input console.下图是在系统不接任何外设的情况下:系统中只有一个输入设备:PS2 KB下图在上图的基础上外接了一个USB的键盘:可以看到,除了一个PS转载 2021-11-02 17:18:09 · 876 阅读 · 0 评论 -
【UEFI基础】Device Path(一)
【UEFI基础】Device Path什么是Device Path Device Path ProtocolUEFI为什么要提出Device Path的设计关于Device Path,UEFI SPEC中有如下的描述不同类型的Device Path DevicePath的组织结构如何解读UEFI Shell下Mapping Table中的Device PathDevice Path操作接口Device Path的实际使用什么是Device Path Device Path ProtocolUEFI为什么转载 2021-11-02 13:57:17 · 3344 阅读 · 0 评论 -
【UEFI基础】UEFI网络调试(一)
UEFI网络调试根据你使用的虚拟环境和是否使用虚拟系统的不同可以有不同的方法。如果使用VirtualBox或者QEMU的话要看具体虚拟的网卡设备,要加载相应的驱动。如果是在另外的虚拟机系统里面搭建的环境,访问网卡需要使用桥接的方法。由于我的目的只是为了研究一下UEFI 网络。所以选取了系统下NT32模拟器下面调试网络的方式。这其中参考了luobing的文章。https://blog.csdn.net/luobing4365/article/details/105036585?spm=1001.20原创 2021-08-18 22:29:55 · 1777 阅读 · 0 评论 -
【UEFI基础】UEFI环境搭建(二)
前提概要:上次搭建环境的时候使用的UDK2018和VS2017虽然编译过了,但是我的两台家用电脑,一台无法进入模拟界面(shell)。一台可以进入,但是键盘鼠标无法输入。最近机缘巧合发现之前有台电脑装的VS2015可以正常进入Nt32模拟界面且OVMF也可以正常使用。尝试之后发现确实VS2015+UDK2018运行妥妥的。至此,环境搭建告一段落。开始继续探索UEFI的世界。...原创 2021-08-18 10:35:11 · 214 阅读 · 0 评论 -
【UEFI基础】OVMF设置默认启动项为UEFI Shell
前言:之前由于NT32编译的虚拟环境一直卡在中途,无法进入Shell,一直使用的是OVMF. OVMF确实挺好用的,只是进入shell环境时网络启动一直优先,太费时间了,正好看到CSDN里面的博主有改了这块。感谢万能的CSDN.一 编写源代码OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.cUINTNBootOptionPriority ( CONST EFI_BOOT_MANAGER_LOAD_OPTION *BootOption )转载 2021-08-11 16:03:51 · 1403 阅读 · 0 评论 -
【UEFI基础】网络基础知识
TCP/IP分层基本说明:不同层使用的协议和传输的数据格式:下面的L2、L3中的L表示Layer,即分层。对应的硬件设备:转载 2021-08-11 10:09:54 · 102 阅读 · 0 评论 -
【UEFI基础】用Windbg建立UEFI调试环境
1 经验教训我参考的文档主要来自UDK Debugger Tool的说明书,以及网上有位同行分享的博客。网址分别为:https://firmware.intel.com/develop/intel-uefi-tools-and-utilities/intel-uefi-development-kit-debugger-toolhttps://www.cnblogs.com/zhongts/p/5789686.html另外,Ovmf的编译,在EDK的github上也能找到,网址就不再贴出了。转载 2021-07-28 13:53:51 · 825 阅读 · 0 评论 -
PCI 总结
PCIe设备的配置空间很多PCI设备仅仅支持者64字节的配置空间。PCI和PCIe配置空间的区别如下文。此外PCI/PCI-X和PCIe设备还扩展了0x40和0xFF这段配置空间,这段空间主要存放一些与MSI或者MSI-X 中断机制相关的Capability结构。其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X 中断机制相关的Capability结构。PCIe设备还支持0x100 -0xFFF这段扩展配置空间。PCIe设备的扩展配置空间最大为4KB,在PCIe总线的扩展配置空间中.原创 2021-07-21 09:02:19 · 388 阅读 · 0 评论 -
【UEFI基础】VS2017 编译 EDK2 Stdlib
需要编译一个UEFI下的应用程序,需要用到StdLib, 但使用VS2017 + edk2201905 或edk2-vUDK2018都编译不通过, 一直提示:LibGdtoa.lib(ldtoa.obj) : error LNK2001: 无法解析的外部符号 ___fpclassifyd。查看发现是ldtoa.c调用math.h, 在math.h中有声明:/*Library implementation*/int __fpclassifyf(float);int __fpclassifyd(d转载 2021-07-13 19:13:45 · 576 阅读 · 0 评论 -
【UEFI基础】Windows 下QEMU启动虚拟环境(一)
前言上回提到,我的UEFI环境搭建完成后,发现无法打开模拟器。无奈之下使用QEMU来进入模拟环境。这一篇就来讲我怎么搭建QEMU的。之前用过MVWARE装装虚拟机。也玩过Linux下QEMU启动嵌入式精简系统。这次来用QEMU启动虚拟环境,以备以后调试程序用。Windows下QEMU启动虚拟环境1.安装qemu-w64-setup-20170113.exe可以在官网下载,最好选择这个版本,其他版本可能会有问题。另外也不要使用QemuManager,这种图像化的貌似不可以使用标准串口。原创 2021-06-24 18:48:50 · 11811 阅读 · 5 评论 -
【UEFI基础】Variable Service in UEFI(一)
1. Variable Service是由谁提供的?Variable Service 是由Runtime Service Table所提供。2. Variable的功能?在UEFI架构下,Variable取代了Legacy下的CMOS的功能,用来存放UUID、Setup等的数据。3. Variable都被储存在哪里?储存在NVRAM(flash part)或是Memory里,可在Variable的Attribute里设定。若在Attribute里设定存放到NV里,则flash par转载 2021-06-23 19:33:21 · 861 阅读 · 0 评论 -
【UEFI基础】UEFI环境搭建(一)
最近又开始搭建UEFI环境了.之前有基于VS2010搭建过,貌似还挺简单。由于现在又是git又是VS2020, UDK的持续更新,想基于git上最新的UDK搭配最新的VS2020搭建一个环境。奈何碰了一鼻子灰。最终也只是在UDK2018的基础上搭配VS2017勉强编译过。 具体的过程就不多做累赘了,分享过程中遇到的问题。观友们如果遇到类似的问题,不妨尝试一下列出的解决方法。编译NT32 报错 build -p Nt32Pkg/Nt32Pkg.dsc -a IA32看起来是genFW...原创 2021-06-23 19:29:23 · 748 阅读 · 1 评论 -
【UEFI实战】SD/MMC相关寄存器的介绍
熟悉SD/MMC的相关寄存器对协议的理解有一定的辅助作用,所以这篇文章来介绍一下SD/MMC相关的寄存器有哪些呢?1.SD卡内部架构在熟悉SD/MMC相关寄存器之前,我们先来看看SD卡的内部架构是怎么样的,如下图所示:2.SD/MMC相关寄存器的介绍从上图中总结出:SD卡内部有7个寄存器.一、OCR,CID,CSD和SCR寄存器保存卡的配置信息;二、RCA寄转载 2017-02-16 11:21:19 · 3258 阅读 · 1 评论 -
访问PCI配置空间方法一(通过I/O端口直接读取)
#include #include //使用CTL_CODE必须加入winioctl.h#include #include "..\NT_Driver\Ioctls.h"DWORD In_32(HANDLE hDevice,USHORT port){DWORD dwOutput ;DWORD inputBuffer[2] ={port,//转载 2014-04-23 22:49:45 · 6014 阅读 · 1 评论 -
【UEFI基础】UEFI中的Protocol使用方法
UEFI中的Protocol使用方法前言 启动服务提供了丰富的服务供开发者操作Protocol,我们可以使用Protocol也可以开发Protocol。本文主要介绍如何使用Protocol。 使用Protocol一般分为下面三个步骤: 1. 通过启动服务找出Protocol对象; 2. 使用这个Protocol提供的服务; 3. 关闭打开的Protocol ...转载 2018-09-27 14:22:25 · 5053 阅读 · 1 评论 -
【我所認知的BIOS】—>PCI option rom
【我所認知的BIOS】—>PCI option romBy LightSeed2009-5-22在這裡添加一句,畢竟什麽東東都是有相應的組織來定義了spec的,那麼不管做什麽動作我們都必須嚴格按照spec規定的動作來,否則你做出來的信號就只有你自己知道了,或者起碼說不適用於業界,所以處在我現在的這個初級階段我還是想把spec都理解透徹,也鑒於此可能很多我的總結也都是會提到spec裏的...转载 2019-07-24 15:39:02 · 1450 阅读 · 0 评论 -
BIOS/UEFI基础——FDF文件
综述FDF的全称是Flash Description File。它是构成BIOS二进制的描述符,即FDF文件描述了BIOS二进制的组成结构。本文的目的就是介绍FDF文件内部的组成以及它们是如何完成对BIOS二进制的描述。下面首先来看下BIOS二进制的大致结构:上述的结构中有几个需要说明关键字,一个是FD(Flash Device binary image),它就是上述的整...转载 2019-07-12 10:59:06 · 3653 阅读 · 0 评论 -
UEFI小结-Handle的来龙去脉
转自:BIOSREN网站作者:HurmonyHu引言:感谢作者为我带来了一篇好文章,我初读此文时,便被作者折服。我一直以为,作为BIOS工程师,调试能力是安身立命之本,架构能力只要学习便可获取,而CODE能力决定了职业瓶颈。很显然,HurmonyHu就是一位CODE能力出众的工程师。本文说明:本人刚学习UEFI不久,写该文一是为了将学到的东西做一个规范化的总结,二是为了给初学UE...转载 2018-09-27 14:20:10 · 467 阅读 · 0 评论 -
06_DXE_InstallProtocolInterface
转自:http://blog.yam.com/wttmama/article/33768917這是一個本來看不懂的東東後來去追了裡面的 code 。m,真的很特別,但~我要強調,它不能讓你瞭解BIOS但可以讓你對 程式更有 sense 。要看懂 InstallProtocolInterface 這個 function ,說真的,順便讓我學會了幾樣東西。在這之前必須先知道 link...转载 2018-09-27 14:19:19 · 1097 阅读 · 0 评论 -
UEFI SHELL ENV BUILD
本文说明:关于UEFI Application编写及测试,论坛里的很多帖子及其回复都有说过,过程并不复杂,但是如果不知道的话可能也会像我一样折腾很久很久的时间。自然很多弟兄都已经轻车熟路了,写本文希望对不知道的弟兄做一个引导作用。我觉得先了解Application,再来学习UEFI是很有帮助的,可以写写小程序来亲身体会像Service或者Protocol的运作。小弟我还是一如既往的唠唠叨叨的写的很转载 2014-06-26 21:52:20 · 1512 阅读 · 0 评论 -
关于BIOS的入口地址0xFFFF0
一直都说开机加电之后,将CS设置为0xFFFF,IP设置为0x0000,这样组成的地址就是0xFFFF0,而这个就是BIOS的入口地址,之后CPU读取这个地址的代码,然后就巴拉巴拉的开始执行下去了。现在想知道这个地址0xFFFF0是在主板上呢,还是在内存上。想着如果是统一编址的话,就可能是去读取主板上的ROM,但是看书上的图,有像是在RAM中,如果是在 内存 中,那是什么时候,由哪段程序将RO转载 2016-12-23 21:53:17 · 744 阅读 · 0 评论 -
BIOS 和 EC的关系
原文链接:http://blog.csdn.net/jackywu1010/article/details/6875515 最近在看BIOS的相关内容,冒出了一个EC的概念。上网搜索了相关内容,整理了下,BIOS与EC的关系 BIOS(基本输入输出系统)在整个系统中的地位是非常重要的,它实现=了底层硬件和上层操作系统的桥梁。比如你现在从光盘拷贝一个文件到硬盘,您...转载 2019-07-11 15:07:02 · 12239 阅读 · 0 评论