
UEFI源码剖析
文章平均质量分 63
uefi_artisan
这个作者很懒,什么都没留下…
展开
-
服务器RAS
MCA 机制可以上报并尽可能地修复系统总线,ECC, 奇偶校验,缓存和TLB 等等错误,识别故障。AER 机制负责侦测,记录并发送各种IIO 模块的了模块的错误信号,作用域包括iio 模块下的。源并将故障信息记录在mc bank中,通过mac 机制,cpu内部的可纠正错误和不可纠正错误。所有了模块, 如pcie 接口, dmi, iio 的核心逻辑和intel vt -d等。的作用域包括处理器的所有模块,core, uncore, 和iio。RAS 技术主要是通过MCA机制,AER 机制实现的。原创 2022-09-24 23:26:01 · 2053 阅读 · 0 评论 -
失业了就去做网管 利用iscsi 搭建无盘启动服务器搭建以及关键代码的分析
iscsi服务器搭建bios端的设置常见的debug手段关键代码情景分析原创 2021-09-18 19:49:34 · 3017 阅读 · 1 评论 -
iscsi
iscsi (internet small computer system interface)协议由IETF组织制定,旨在基于TCP支持的标准的SCSI (small computer system interface)架构。 SCSI架构包括一个通用的架构模型、基础命令集、适用于不同设备的标准命令集、以及各种SCSI协议。SCSI主要定义系统和IO设备通信的协议,尤其侧重于存储设备。当传统的BUS架构系统发展到网络架构,SCSI需要提供网络支持,iscsi由此应运而生。 SCSI是...原创 2021-09-15 10:05:01 · 1446 阅读 · 0 评论 -
ctl+alt+del三键重启情景分析
在bios的setup界面,按下cll alt del会由相应的handler函数处理,也就是:/** Function which is called when the Ctrl-Alt-Delete key sequence is detected. This function will cause the system to reset by calling the runtime services table's ResetSystem. @param KeyData P...原创 2021-08-21 19:52:12 · 3456 阅读 · 2 评论 -
一句话说清楚capsuleupdate 工作流程
updateCapsule函数updateCapule用来将capsule传递给系统固件,包含虚拟地址和物理地址的对应关系。系统根据Capsule的炻会采取不同的处理方式,如立即处理capsule,或者系统重启后再对capsule进行处理。EFI_STATUSEFIAPIUpdateCapsule ( in efi_capsule_header **CapsuleHeaderArray, in uintn ...原创 2021-03-29 00:11:09 · 5759 阅读 · 3 评论 -
从dxe 是如何切换到bds 的
在函数 DxeMain (位于MdeModulePkg\Core\Dxe\DxeMain\DxeMain.c )最后一句是gBds->Entry (gBds); 此时由DXE阶段切到BDS.在同一个文件的开始,我们有看到gBds的定义,并赋值为NULL,EFI_BDS_ARCH_PROTOCOL *gBds = NULL;接下来,就会跑到gBds->Entry (gBds), 但我们并没有显式的看到 gBds...原创 2020-10-10 20:45:12 · 4556 阅读 · 0 评论 -
variable Architecture protocol 的安装
variablearchitecture protocol是pi规范中定义的架构协议。安装此协议的驱动是运行时驱动。它负责注册variable的运行时服务(variable Runtime Service). UEFI规范定义了4个variable运行时服务:GetVariable,GetNextVariableName, SetVariable和QueryVariableInfo. SystemTable->RuntimeServices->GetVari...原创 2020-09-27 15:26:19 · 2364 阅读 · 0 评论 -
event 情景分析
在进biossetup之前,我们可以在屏幕上显示“Entering BIOS SetupBIOS以一秒为步长周期性的打印到屏幕上。这个就是用event来实现的。相关代码如下: // // Create a timer to indicate "Entering Setup". // IndicatorMessage = NULL; IndicatorMessage = HiiGetString (mStringHiiHandle, STRING...原创 2020-06-02 10:25:35 · 3356 阅读 · 1 评论 -
HII 小节
HII 对大部分工程师可能比较陌生,因为是纯软件的概念。先解释一下package 是什么HII 数据库协议 是以包列表(package list) 为单位管理HII相关的数据结构。目前支持的包类型有://// A package list can contain only one or less than one device path package.// This r...原创 2020-02-27 23:24:25 · 1117 阅读 · 0 评论 -
uefi shell cd 实现过程
/** Function for 'cd' command. @param[in] ImageHandle Handle to the Image (NULL if Internal). @param[in] SystemTable Pointer to the System Table (NULL if Internal).**/SHELL_STATUSEFIAPISh原创 2018-02-02 16:26:03 · 2440 阅读 · 0 评论 -
uefi里面device path 是什么 ? 长什么样
在EDK II 代码里面,DEVICE PATH 长这个样子/** This protocol can be used on any device handle to obtain generic path/location information concerning the physical device or logical device. If the handle does原创 2018-01-24 23:52:27 · 4442 阅读 · 0 评论 -
uefi mv a.txt b.txt 是如何做到的? 即同一个文件系统内如何实现重命名
uefi 下面没有单独的rename, 只有mv一句话总结,同一个文件系统里面,改文件info 就行了。见代码中汉字注释部分/** function to take a list of files to move and a destination location and do the verification and moving of those files to tha原创 2018-01-30 20:23:02 · 999 阅读 · 0 评论 -
pci option rom 加载过程
在PCI 配置空间的0X30处有这么一个寄存器,叫Expansion ROM Base Address.如图所示:我们经常说的option rom 就放在这个位置, 注意前面有个option, 那就是说,并不是每个设备都带有 expansion rom.原则上讲,一般比较高级的卡(add-in ) 都会有option rom. 从30h 这个位置开始,定义了option rom原创 2016-06-29 19:39:00 · 11424 阅读 · 6 评论 -
uefi bios代码中如何找到函数的实现?
写在最前,摘自 K&R The only legal operations on a structure are copying it or assigning to it as a unit, taking its address with & (读作ampersand), and accessing its members, 翻译成中文是这样的,对于一个结构体而言,唯一合原创 2015-01-04 20:25:36 · 4882 阅读 · 0 评论 -
event close 两遍
占个坑原创 2017-09-06 11:29:45 · 504 阅读 · 0 评论 -
uefi bios debug 终级方案 反汇编
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64>dumpbin.exe /disasm D:\Project\Build\MdeModulePkg_DEBUG_LOG\DEBUG_VS2013x86\X64\VariableSmm.efiC:\Program Files (x86)\Microsoft原创 2017-08-14 18:03:04 · 5195 阅读 · 0 评论 -
已知dsc 和fdf ,编译bios fd
build -p k\FirmwareImage.dsc -f k\FirmwareImage.fdf -a IA32 -a X64外加basetooledksetup原创 2017-07-03 18:43:35 · 866 阅读 · 0 评论 -
uefi 如何读写磁盘
////// This protocol is used to abstract Block I/O interfaces.///struct _EFI_DISK_IO_PROTOCOL { /// /// The revision to which the disk I/O interface adheres. All future /// revisions must be原创 2017-06-12 11:29:01 · 2451 阅读 · 0 评论 -
locate ppi 详解
废话少说,先上代码** Locate a given named PPI. @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation. @param Guid Pointer to GUID原创 2015-01-01 17:15:42 · 2750 阅读 · 0 评论 -
DXE Core GCD 服务
简介Global Coherency Domain(简称GCD 全局一致域)是把运行启动代码的CPU所能发现的系统资源(由Hand off Block 从PEI 传递过来信息)进行统一管理的一种视图。这个视图由两类GCD服务来管理,一类存储空间资源(GCD Memory Space)管理服务,另一类是输入/输出资源(GCD IP Space)管理服务。通过调用这两类服务,系统资源(...原创 2019-08-30 23:43:26 · 1699 阅读 · 1 评论 -
uefi 编译错误解决方案
没有include 是 undefinedunresolved 是 没有link , 对应的define 没有真正的实现举例:/Id:\project\edk2\CryptoPkg\Include /Id:\project\edk2\CryptoPkg\Library\Include /Id:\project\edk2\CryptoPkg\Library\OpensslLib\ope...原创 2018-12-18 10:19:47 · 2997 阅读 · 0 评论 -
PXE 驱动模型支持
判断ControllerHandler 是否已经安装gEfiPxeBaseCodeProtocolGuid. 如果已经安装,返回EFI_ALREADY_STARTED.如果没有安装,则继续判断该句柄上是否同时安装了gEfiDhcp4ServiceBindingProtocolGuid 和gEfiMtftp4ServiceBindingProtocolGuid , 如果都安装了,则返回成...原创 2018-12-03 20:05:58 · 996 阅读 · 1 评论 -
uefi setvariable 过程
gRT->SetVariable 用来增加,更新,删除变量,其实现在:\MdeModulePkg\Universal\Variable\RuntimeDxe\Variable.c VariableServiceSetVariableEFI_STATUSEFIAPIVariableServiceSetVariable ( IN CHAR16 ...原创 2018-11-06 11:09:09 · 5050 阅读 · 2 评论 -
UEFI 设计精髓
大到一个国家,小到一个家庭,如果要有序发展,其中最重要的事情,就是个体之相相互沟通。人与人之间,可以通过发微信,skype , 沟通,那个数百万行的UEFI BIOS 是如何沟通的呢?在UEFI 里面,最重要两个阶段,就是pei 和dxe, 其中PEIM之间信息沟通,主要是通过PPI, DXE Driver 之间信息沟通主要是通过protocol.具体来说,对于DXE阶段, 一个Hand...原创 2018-08-15 20:57:12 · 2692 阅读 · 0 评论 -
在uefi shell 环境读取bios rom 内容
/** @file A simple, basic, EDK II native, "hello" application to verify that we can build applications without LibC. Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<...原创 2018-07-20 16:34:45 · 3711 阅读 · 0 评论 -
Nt32 控制窗口个数的pcd
gEfiNt32PkgTokenSpaceGuid.PcdWinNtGop|L"UGA Window 1"|VOID*|52 这个状态下是一个窗口 gEfiNt32PkgTokenSpaceGuid.PcdWinNtGop|L"UGA Window 1!UGA Window 2"|VOID*|52 这个状态下是两个窗口...原创 2018-05-04 15:17:59 · 265 阅读 · 0 评论 -
SecCore关键数据结构
SEC_IDT_TABLE 数据结构typedef struct _SEC_IDT_TABLE { // // Reserved 8 bytes preceding IDT to store EFI_PEI_SERVICES**, since IDT base // address should be 8-byte alignment. // Note: For IA32, o转载 2017-05-20 17:52:05 · 1034 阅读 · 0 评论 -
uefi 编译一个package , 以shell 为例
build -p ShellPkg\ShellPkg.dscbuild 完成之后将生成的shell.efi 放到 build\NT32IA32\DEBUG_VS2015x86原创 2016-08-02 16:43:06 · 2157 阅读 · 0 评论 -
UEFI里面的PCI驱动
还是顺着代码讲,首先找到入口函数在Core\EM\PCI\PciBus.c里面。// Procedure: PciBusEntryPoint()//// Description: This function is the entry point for PCI BUS Driver.// Since PCI BUS Driver follows EFI 1.1 driver model原创 2015-02-27 14:16:36 · 6449 阅读 · 0 评论 -
EFI Framework概述
如果有下载Intel EFI SPec 的人就知道每次提到EFI的时候就会有一个很大的绿色H,这个就是EFI的framework.什么是Framework呢? 这边就简单说一下整个EFI Framework架构。我个人猜想,当初Intel开发EFI其实只是为了扩充BIOS的功能,因为在Legacy BIOS的年代,很多的东西都没有模组化,因此硬件或者是platform有较大变化的时候,原创 2014-02-27 18:29:30 · 2235 阅读 · 0 评论 -
UEFI ConnectController() 解读
ConnectController() Summary 为一个controller 连接一个或多个driver prototype typedef EFI_STATUS ConnectController ( IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE *DriverImageHandle OPTI...原创 2015-01-19 22:11:33 · 4571 阅读 · 1 评论 -
中断和异常
中断 就是你在做某件事情的时候,接到一个通知,某个事件发生了,打个比方,你现在正在用youtube上看某个视频,突然小孩子说肚子饿了(中断发生),这时候,就得把视频暂停(suspend),去给小娃娃做饭,淘米,洗菜,放锅里炒(中断handler)。 计算机里面也是这样,你正在执行某个程序,然后某个外围设备告诉你,他有一些需求,必须满足他,系统硬件一般使用中断去处理外围设备我请求,当然系统软件也可以原创 2015-02-07 13:42:58 · 1108 阅读 · 0 评论 -
BIOS 的 recovery 机制
Recovery 就是BIOS挂掉的时候(不是完全挂掉,PEI 部分还是完整的)去重新构建里面的内容,有很多种情况可能导致BIOS 挂掉,FV(firmware volume)是以block 为单位存储在非挥发性(nonvolatile)的存储介质上,当更新某个block的时候,突然掉电,那么这个固件就变为非法(invalid)的。另一方面,一个恶意的程序或者硬件上面也可能导致存储介质原创 2014-12-31 11:51:23 · 16735 阅读 · 0 评论 -
英特尔cpu 系统结构简要介绍
IA 32 架构(从386 开始)为操作系统和系统软件提供了非常给力的支持,这个支持,是指提供了多种操作模式,包括:实模式,保护模式, 虚拟8086模式,以及系统管理模式,有些时候,也把这些模式叫做legacy模式。系统级的架构包括了一系列的寄存器,数据结构,还有为类似内存管理,中断和异常处理,任务管理,多核控制而设计的指令。翻译 2014-12-30 23:47:49 · 1463 阅读 · 0 评论 -
pci 配置空间详解之Base Addresses
为了使pci 设备有更强的功能,更方便的使用方法,pci 可以在在址空间去重定向pci devices.在system 开机的时候,与具体设备无关的软件必须去检测到这是一个什么设备,构建一个一致(consistent)的地址映射,还要检测这个设备有没有扩展rom. 下面的章节将会包括这些内容。1. Address MapsPower-up 软件(应该就是bios) 将系统翻译 2015-01-15 19:45:09 · 3953 阅读 · 0 评论 -
DXE Q&A
1.DXE阶段做哪些事?(1)几乎甩的硬件的初始化都在这做完(2)产生efi system table, 来提供各种service供所面阶段使用。(3)把控制权交给bds来boot os. 2.DXE 有哪些元件? 各有什么功能?(1)DXE Core,可视为dxe的核心,用来dispatch dxe driver 和产生efi system table,以提供boot翻译 2013-08-14 17:16:17 · 3128 阅读 · 0 评论 -
reset后的第一条指令
问题提出: 开机后第一条指令是在实模式,real address mode. 可是第一条指令是在FFFFFFF0处抓到的。那么问题来了,实模式可访问的地址窨是1M 。FFFFFFF0 是远远大于1M的,那Intel 是怎么做到的呢?首先把ia 32 architectures software developer manual翻开到 9.1.4The first instructi翻译 2015-01-11 22:15:05 · 1801 阅读 · 0 评论 -
Intel 82489DX EXTERNAL APIC ,THE APIC, THE XAPIC, AND THE X2APIC
THE LOCAL APIC INTHE P6 FAMILY AND PENTIUM翻译 2014-09-06 13:01:30 · 2507 阅读 · 0 评论 -
SYSTEM BUS 与APIC BUS 的比较
对于P6 familhy 和Pentium 处理器,I/O APIC与l翻译 2014-09-05 11:05:51 · 1748 阅读 · 0 评论 -
细说BIOS 之SEC
顺着这个流程图讲,原创 2014-07-25 10:02:30 · 6305 阅读 · 0 评论