自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 PCIE Spec ---Software Initialization and Configuration(二)

在支持 ECAM(Enhanced Configuration Access Mechanism)机制的系统中,PCIe Host Bridge 负责将主处理器发出的内存映射的 PCIe 配置空间访问请求转换为 PCIe 配置事务。内存映射访问配置空间的大小和基地址由 host bridge 和固件设计决定,若是支持 N bit 的 BUS,则说明该平台的 Bus 最多可以由 2 n -1 个,而内存映射地址对齐则是需要是 2(n+20)字节的内存地址边界。

2025-03-19 15:32:17 766

原创 UEFI Spec 学习笔记---6 - Block Translation Table (BTT) Layout

BTT的layout 取决于namespace的大小以及在初始化Layout时确认的三个管理选择:•••NFree为了减小BTT元数据的大小并增加并发更新的可能性,将名称空间中的BTT布局划分为多个arena。竞技场容量不能大于512gb或小于16 mib。一个命名空间被划分为尽可能多的512GiB arena,从偏移量零开始,不加填充地打包在一起,如果剩余空间至少为16MiB,则后面是一个小于512GiB的arena。如果需要,较小的区域大小将四舍五入为EFI_BTT_ALIGNMENT的倍数。

2025-02-20 11:05:39 718

原创 UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image

本节定义EFI_LOADED_IMAGE_PROTOCOL和 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL。这些描述包括 load image 的源、映像在内存中的当前位置、为image分配的内存类型、 以及在调用image时传递给image的参数。Loaded Image Device Path Protocol 必须安装到EFI引导服务loadimage()加载的PE/COFF映像的映像句柄上。被 image handle 使用,用于获取加载的 Image 的信息。

2025-02-20 11:01:05 274

原创 UEFI Spec 学习笔记---11 - Protocols — UEFI Driver Model(1)

本节提供EFI_DRIVER_BINDING_PROTOCOL的详细描述。该协议是由遵循UEFI驱动程序模型的每个驱动程序产生的,它是允许 驱动程序和控制器被管理的中心组件。它提供了一个服务来测试一个特定的控制器是否被驱动程序支持,一个服务来开始管理一个控制器,一个服务来停止管理一个控制器。这些服务同样适用于总线控制器和设备控制器的驱动程序。

2025-02-18 10:23:05 755

原创 UEFI Spec 学习笔记---7 - Services — Boot Services(1)

Boot Services是由可能在 UEFI 环境中运行的接口函数的代码定义的。这些代码包括设备管理和扩展性的 protocol, 以及在预启动环境中运行的应用和 OS loader。UEFI application 必须通过 boot service 来访问设备以及内存管理,使用 boot service 时通过一个全局指针(gBS etc)。

2025-01-16 15:01:17 870

原创 UEFI Spec 学习笔记---34 - HII Protocols(1)

本节提供了与uefi相关的协议、函数和类型定义的代码定义,它们 是符合uefi的系统管理用户输入所需的体系结构机制。主要提供用于检索字体信息函数。StringToImage-----根据传入的字符串将字符串转换成 image 或者屏幕上显示。StringIdToImage----根据传入的字符串 Id 查找字符串然后将字符串转换成 image 用于屏幕上显示。GetGlyph----将字符串和字符信息转化成位图显示。

2025-01-10 16:20:52 850

原创 UEFI Spec 学习笔记---4 - EFI System Table(1)

服务表包含固件中的入口点,用于访问核心EFI系统功能。它包括每个表类型的唯一签名,table 的修订版,可以在向EFI表类型添加扩展时更新,以及一个32位的CRC,以便EFI表类型的使用者可以验证EFI表的内容,确认 table 是否被修改。ImageHandle 可以看作是一个 driver 的标识符,每个 driver 的 handle 是唯一的,我们可以通过 EFI_INSTALL_PROTOCOL_INTERFACE 在 handle 上安装多个该 driver 需要调用的 protocol .

2024-12-27 16:31:31 986

原创 UEFI Spec 学习笔记---3 - Boot Manager(3)

映像直接从支持EFI_LOAD_FILE_PROTOCOL的设备加载。当通过EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 加载引导时,FilePath将以指向实现EFI_SIMPLE_FILE_SYSTEM_PROTOCOL或EFI_BLOCK_IO_PROTOCOL的设备路径开始。虽然固件必须产生一个理解UEFI文件系统的EFI_SIMPLE_FILE_SYSTEM_PROTOCOL,但任何文件系统都可以用EFI_SIMPLE_FILE_SYSTEM_PROTOCOL接口抽象出来。

2024-12-03 18:11:24 778

原创 UEFI Spec 学习笔记---3 - Boot Manager(2)

boot manager 通过 BootOptionSupport 这个variable来控制支持从什么类型的 bootoption 来进行 boot,在 BDS 阶段或者其他需要设置启动项的时候,可以先获取到这个 variable 然后和对应的 bit 位来确认是否支持所需要类型的 boot option。EFI_BOOT_OPTION_SUPPORT_KEY 对应的就是 可以通过按键来创建 key option 然后进行 boot;

2024-11-20 10:48:30 670

原创 UEFI Spec 学习笔记---3 - Boot Manager(1)

(可以理解为系统 bootx64.efi 在执行的时候,会去创建一个 Bootoption,名字就是系统的名字)。UEFI Boot Manager 是一个固件政策引擎,它会去通过读取 NVRAM 中的全局变量(也就是 Boot Option 对应的 BootXXXX)来获取可以 boot 的启动项,然后根据中间的信息来加载 UEFI driver 或者 UEFI Image.同时在这个加载过程中若是遇到异常情况,也可也实现其他异常处理机制(比如启动完所有的启动项,都失败则进入 setup 界面)。

2024-10-29 18:21:19 931

原创 UEFI Spec 学习笔记---17 - Protocols — USB Support

USB Host Controller Protocol 也就是代码中的EFI_USB_HC_PROTOCOL 或者 EFI_USB2_HC_PROTOCOL,EFI_USB2_HC_PROTOCOL 可以看作是更新的协议用于支持 USB1.1 和 USB 2.0.可以和 EHCI、UHCI、OHCI 标准一起配合使用,通过使用这个 protocol USB bus driver 不需要知道底层的 USB 控制器是否满足 EHCI、UHCI、OHCI 中的哪一种。同时提供信息用于创建。

2024-09-27 16:02:45 751 1

原创 UEFI Spec 学习笔记 章节一

简单介绍UEFI 的内容和由来

2024-09-23 15:33:36 746

原创 PCIE Spec --Software Initialization and Configuration(一)

也就是都是由Root Complex 管理。PCIE switch 的概念可以看作是由多个将 PCI 链路连接到内部总线的 PCI-to-PCI bridge 组成。这个 Switch 的上游端口是一个PCI-to-PCI bridge,而对应的 bridge 的二级总线可以看作是 Switch 的内部逻辑路由;PCIE 链路对应的其实就是从 PCI to PCI bridge 引出的二级总线,而 Root port 对应概念的 PCI-to-PCI bridge 用于管理 PCIE 链路。

2024-07-10 16:31:26 323

原创 PCIE Spec ---Power management

简单介绍电源管理

2024-05-17 09:13:27 1584

原创 Linux下安装IPMI tool

详细介绍如何在linux下安装IPMI tool

2024-04-25 08:49:59 3478 3

原创 PCIE Spec ---PCI Express Layering Introduction

扩展的信息在传输过程中被不同的层级进行处理,但是在两个数据链路层(连接到同一个数据链路层)之间支持一种更简单的包通信形式链接),用于链接管理。如之前所说的,数据链路层也是分为两部分处理,传输方的数据链路层通过解析事务层的 TLPs 计算 Package 的数据校验码和队列号,并且通过链路传输给物理层。同时接受方的数据链路层负责对收到的数据进行完整性的检差,同时通过链路传输给事务层进行进一步的处理。传输方的数据链路层主要是作为事务层和物理层的中间层,主要是负责通信链路的管理、数据完整性检查、错误检测与修正。

2024-04-20 16:42:43 2063

原创 PCIE Spec ---Introduction

简单介绍一下PCIE的主要结构以及构成

2024-04-19 17:09:24 1767 1

原创 AHCI---System Memory Structures

每个 HBA port 有自己对应的 Command List 以及 FISes 结构,HBA 最多可以支持 32 个 Port.对应 Port 位于 内存寄存器的位置我们也叫对应 port 的 entry.软件和 SATA device 的大部分交互都是通过系统内存进行的,通过系统内存可以进行 FIS 的接收和发送,同时也可以进行数据传输。当HBA期望从设备接收数据FIS时,或者当HBA根据正在使用的命令协议将数据FIS传输到设备时,HBA不需要接收未知的FIS.

2024-04-11 10:39:45 998 1

原创 AHCI ---HBA Memory Registers

通过读取这个寄存器,可以获取当前 Port 连接到的设备的具体状态,是否连接建立,以及接口速度等等。前者用于控制整个 HBA 的功能支持信息,后者是对于 HBA 的 port 的状态与功能信息。用于获取需要传输的 FIS 数据块的物理地址,这个地址是位于系统内存中的。HBA 最重要的寄存器部分,直接控制 Port 与 ATA device 的交互。每个 Port 的长度是固定的 80 h.具体的寄存器的值的含义需要查看对应的章节。主要用于控制Port Multiplier 的交换状态,以及获取状态信息。

2024-04-09 11:07:23 2143

原创 AHCI ---HBA Configuration Registers---PCI Power Management Capabilities

主要介绍控制 HBA device 的电源状态,以及对SATA的支持的寄存器

2024-04-09 10:08:22 602

原创 AHCI ---HBA Configuration Registers---PCI Header

下面表格是截取自 AHCI Spec,主要是介绍 PCI header 的每个字段的具体含义,根据获取这个 header 的数据可以来解析这个 HBA 的具体的配置。用来指示 HBA 在系统内存的内存类型,以及基地址,后面会介绍的HBA memory registers 就是在这个基地址的基础上加上 offset 来获取寄存器的值的。这是一个可选的功能,用于指示 HBA 是否支持 BIST 的功能以及 BIST 的状态。若是 HBA 有自己的扩展 ROM 的话,需要这个字段来获取扩展 ROM 的基地址。

2024-04-08 18:27:04 512

原创 AHCI 介绍

简单介绍一下AHCI的基本架构

2024-04-08 15:03:09 1381 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除