- 博客(53)
- 收藏
- 关注
原创 BMC与BIOS通信
Intelligent Platform Management Interface(智能平台管理接口)是一组用于带外管理的计算机接口规范。IPMI在连接到主板或服务器的单独硬件上运行,此单独的硬件是底板管理控制器(BMC)。BMC是IPMI中的一个核心部分,属于IPMI硬件架构。BMC管理平台硬件和系统管理软件之间的接口。BMC从系统内的传感器接收报告,并对这些报告进行操作。与IPMI有关的各个硬件模块如下图所示:MotherBoard主板:包括CPU、PCH等主要部件。
2025-01-13 16:19:39
1214
原创 Linux常用命令
t:指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目录在前,源文件在后。-R:连同子目录的内容一起列出,等于该目录下所有的文件都会显示出来。--s,--sleep-interval=S与-f合用表示在每次反复的间隔休眠S秒。-a:列出全部文件,连同隐藏文件(开头为.的文件)一起列出来。-r:把指定文档或目录的日期时间,统统设定为和参考文档或目录的日期时间相同。-d:仅列出目录本身而不是列出目录的文件数据。-r,-R:指示rm将参数中列出的全部目录和子目录递归删除。
2025-01-13 16:18:20
355
原创 ACPI介绍
Advanced Configuration and Power Interface(ACPI)的开发是为了建立通用工业接口,从而实现针对操作系统OS的主板设备配置和整个系统的电源管理。ACPI是面向操作系统的配置和电源管理(OSPM)中的重要元素。OSPM/ACPI提倡将系统空闲的设备转为低功耗来节约能源。有必要将电源管理移到操作系统中,并在操作系统和硬件设备之间使用抽象接口(ACPI)来实现这个目标,因为ACPI是抽象的,操作系统可以从硬件设备中独立发展,硬件设备也可从操作系统中独立发展。
2025-01-13 11:10:44
1199
原创 Intel AMD Hygon CPU缓存
CPU缓存是位于CPU芯片上的小型高速内存(基于SRAM),主要作用是临时存储CPU可能需要快速访问的预取数据,这样做的目的是避免因为RAM的限制而造成CPU的性能瓶颈。现代CPU通常包含三级缓存:L1、L2和L3.本文主要讲述服务器CPU相应的缓存知识。
2024-12-27 17:32:06
1067
原创 海光处理器介绍
海光处理器基于AMD的Zen架构进行研发,拥有自主知识产权,并在核心布局、缓存容量、端口布局等方面进行了优化和调整。针对不同的市场需求,海光处理器可以划分为700,5000,3000三大产品系列。
2024-12-26 13:40:20
4170
原创 PXE服务器搭建及操作系统安装
严格来说,PXE 并不是一种安装方式,而是一种引导方式。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。在这里我们选择安装CentOS7.9或者是Windows10系统,首先将CentOS或Windows的ISO镜像文件挂载到服务器上,然后将CentOS系统文件拷贝到NWA_PXE文件夹下的子目录中,将Windows10文件拷贝到WIA_WDS文件夹下。
2024-11-20 09:05:55
3624
原创 CentOS 7.9 搭建本地Yum源
yum(Yellow Dog Updater,Modified)是一个在Fedora、Centos、RedHat中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包。在一些情况下,服务器不能访问公网,或者网络情况不好,使用rpm安装包安装一些软件时,经常出现缺少依赖而不能安装的情况,此时就需要配置本地yum源。(使用的是CentOS7.9的镜像)使用mount命令来挂载ISO镜像文件到指定的挂载点。
2024-11-19 13:42:09
1218
原创 AMI BIOS——VFR编程语言
接下来,介绍一种BNF风格的方法。formset & endformset:表单集,有且仅有一个,构成了界面的主体,其它的界面组件在它的内部。grayoutif & suppressif:用于iterm的变灰不可须以及是否隐藏,ideqval:如果变量的值等于某个值,则表示变灰或者隐藏。checkbox & endcheckbox :用于创建一个复选框,让用户选择是或否,需要将其置于表单和结束表单之间。form & endform表单:包含在表单集中,可以将setup的一个页面作为一个表单。
2024-11-08 09:08:45
476
原创 SMBIOS基础
The System Management BIOS(SMBIOS)解决了主板和系统供应商如何通过平台固件以标准格式展现其产品信息,这些信息包括CPU/Memory的serial number、manufacture、speed等资料,也有PCIe Devices、USB Device、Redfish Services等资讯。SMBIOS储存在NVRAM中,其存在物理地址000F0000h到000FFFFFh之间。
2024-11-06 15:04:03
1407
原创 UEFI基础概念3——驱动
audio.h 定义EFI_AUDIO_ROTOCOL相关结构体,定义EFI_AUDIO_PROTOCOL的GUID,定义protocol提供的服务的函数原型,其中包括Reset、Play、Volume在accdriver.c中,定义 用于标识音频播放的上下文的数据结构,一般命名为X_PRIVATE_DATA。在上下文中,要包含一个驱动实例,以及其他的设备相关信息。
2024-10-24 09:19:24
1181
原创 UEFI——Device Path
设备路径Device Path用于定义到设备的编程路径,设备路径的主要目的是让一个应用程序(例如OS加载器)确定接口正在抽象的设备的物理设备。设备路径的集合通常称为名称空间。例如,ACPI基于用ASL (ACPI源语言)编写的名称空间。考虑到EFI不会取代ACPI,而是尽可能遵从ACPI,在EFI中使用ACPI名称空间似乎是合乎逻辑的。然而,ACPI名称空间是为在操作系统运行时使用而设计的,并不适合平台固件或操作系统加载程序。鉴于此,EFI定义了自己的名称空间,称为设备路径。
2024-10-15 08:43:07
885
原创 Intel Xeon(至强) 服务器 CPU
Purley平台:Sky Lake(第一代)、Cascade Lake(第二代)Whitley平台:Cooper Lake、Ice Lake(第三代)Eagle Stream平台:Sapphire Rapids、Emerald Rapids(第四代、第五代)Birch Stream平台: Granite Rapids、Sierra Forest(第六代)
2024-10-10 17:50:19
16450
原创 Shell脚本的编写
原生的bash不支持简单的数学运算,但是可以通过expr命令来实现,能完成表达式的求值操作。环境变量:由操作系统或用户设置的特殊环境变量,用于配置shell的行为和影响其执行环境。新建一个文件test.sh,扩展名为sh,扩展名不影响脚本的执行,见名知意就好。变量的类型有:字符串变量、整数变量、数组变量、环境变量、特殊变量。算术运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。shell脚本内获取参数的格式为$n 表示第n个参数。关系运算符只支持数字,不支持字符串。注意:字符串的索引从0开始。
2024-10-09 17:52:59
511
原创 磁盘分区与固件启动
扇区是磁盘读写的基本单位,是磁头从磁盘中读取数据的最小单位,一般是512B(现代磁盘还有4KB),多个相邻的扇区组合在一起形成一个簇。其中磁盘的第一个扇区特别重要,它存储了磁盘分区表。早期磁盘的第一个扇区里面含有的磁盘分区表我们称为MBR(Master Boot Record)格式,由于磁盘容量不断扩大,大于2TB以上的磁盘分区已经让某些操作系统无法存取,因此后来又多了一个新的磁盘分区格式,称为GPT(GUID Partition table)
2024-09-26 09:32:24
909
原创 UEFI——PEI阶段
Pre-EFI Initialization(PEI)在引导的早期被调用,仅利用CPU资源调用PEIM,这些PEIM负责:(1)初始化一些永久内存(2)在HOBs中描述内存信息(3)将控制权传递给驱动执行环境(DXE)阶段(4)此外,PEI阶段还负责危机恢复和从S3苏醒。PEI提供了一个公共框架,通过这个框架可以独立的设计、开发、更新初始化模块。开发PEI模块是为了满足PI框架中的以下模块:(1)维护信任链,防止未经授权更新PEI阶段或PEIM。
2024-09-14 15:21:16
1188
原创 UEFI——访问PCI/PCIE设备(二)
在使用EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL获取PCI/PCIE设备的时,首先需要获取EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL的所有句柄,获取句柄可以利用gBS->LocateHandleBuffer()函数,当获取到句柄后,利用gBS->HandleProtocol()函数获取到protocol实例,然后就可以调用其中的函数接口了。这三个接口的参数类型是一样的,都是EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS。
2024-09-12 16:37:12
1961
2
原创 UEFI——访问PCI/PCIe设备(一)
PCI(Peripheral Component Interface,PCI)的中文为外围组件互联,所谓的外围组件指的是CPU、内存和芯片组以外的设备,这些设备通常通过各种接口连接到计算机的主板上,以扩展计算机的功能和性能,例如磁盘、网卡、声卡、显卡等。其主要目的是连接周边设备,将低速的设备与高速的处理器结合起来,以解决用户对数据传输速率越来越高的要求。PCIe (PCI Express),PCI扩展是在PCI的基础上发展而来的,最大的区别在于PCI采用并行传输,PCIE采用串行。
2024-09-11 17:50:15
2088
原创 UEFI基础概念2——Handle和Protocol
句柄是动态分配的,即Handle不是启动时预先分配好的,而是需要的时候由UEFI固件动态创建的。LocateProcotol():返回第一个与Protocol匹配的Protocol接口的指针,这个函数会查找第一个支持Protocol的设备句柄,并返回该协议的指针。Handle(句柄)是一个或多个协议的集合,Protocol(协议)是由GUID命名的数据结构。使用协议的GUID名称在句柄数据库中注册协议服务,通过使用与协议关联的GUID名称在句柄数据库中查找协议来发现协议服务,以执行查找操作。
2024-09-11 14:05:34
1044
原创 UEFI基础概念1——EFI SYSTEM TABLE
对UEFI应用程序和驱动程序开发人员来讲,系统表是最重要的数据结构之一,它是用户空间通往内核空间的通道。有了它,UEFI应用程序和驱动才可以访问UEFI内核、硬件资源和输入/输出设备。(1)在应用程序和驱动中如何访问系统表计算机系统进入DXE阶段后系统表被初始化,因而系统表只能用于DXE阶段以及以后的应用程序和驱动中。系统表是UEFI内核的一个全局结构体,其指针作为程序映像(Image)入口函数的参数传递到用户空间。
2024-09-10 16:19:58
637
原创 UEFI——获取UEFI MemoryMap
内存映射(Memory Mapping)是一种将文件内容映射到进程的虚拟地址空间的技术。在这种机制下,文件可以视为内存的一部分,从而允许程序直接对这部分内存进行读写操作,而无需传统的I/O调用。内存映射缓冲区利用虚拟内存机制,让操作系统将一部分磁盘文件映射到进程地址空间的一块连续区域当中。操作系统负责管理内存页的加载和卸载,应用程序只需要访问这块内存区域即可,从而避免了频繁的磁盘I/O操作和多余的系统调用。
2024-09-09 17:51:49
1604
原创 UEFI——Variable的使用
Variable Services是Runtime Services的一部分,提供关于variable的一些服务,Variable被定义为键值对,由标识信息加上属性(键)和任意数据(值)组成。SetVariable接口的作用是设置变量的值,这个接口可用于创建新的变量或修改现有变量的值,函数原型为。配置和数据存储:UEFI变量用于存储固件配置设置、系统状态、以及启动选项等信息。编写INF文件,运行并生成efi文件(在运行efi文件的时候卡住了,原因未知)安全性:UEFI变量可用于存储安全相关的信息。
2024-09-09 15:26:14
769
原创 UEFI——VFR简单使用
VFR(Visual Forms Representation,可视化窗体描述)是一种用户接口组件,在UEFI中,用户接口组件主要有4中:Font(字体)、Image(图像)、Form(窗体)和String(字符串)。在UEFI开发中,FrontPageStrings.uni文件是一个包含字符串资源的文件,用于UEFI界面的本地化。在固件中充当用户界面管理者的角色,它允许用户与UEFI固件的用户界面进行交互。产生一个EFI_IFR_ACTION_OP操作码,是UEFI固件的用户界面框架(IFR)的一部分。
2024-09-09 13:37:53
1554
原创 UEFI——使用标准C库
C标准库是ANSL C标准为C语言定义的标准库。C标准库包含15个头文件:assert.h ctype.h error.h float.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stddef.h stdio.h stdlib.h string.h time.h。使用C标准库开发的应用程序有很强的可移植性,标准库为上层应用程序屏蔽了底层平台的差异,使得这些程序可以在任意平台上通过编译。当我们决定在工程中使用标准库函数的时候,有两种方法。
2024-09-06 08:40:12
674
原创 UEFI——Shell下读取SMBIOS信息
SMBIOS的全称为System Management BIOS,它不是一个BIOS,只是与BIOS相关。它是一个规范,定义了BIOS传递给操作系统的系统管理信息。它也表示了一系列的数据结构,包含了各类信息,由BIOS启动过程中创建并放在特定的内存,之后操作系统可以拿来用。整个结构体定义了 SMBIOS 表中的一个基本单元。每个 SMBIOS 结构都包含一个类型、长度和句柄,后面跟着与该类型相关的特定数据。
2024-09-05 15:35:58
756
原创 ARM架构
Arm架构属于精简指令集架构(RISC),具有精简指令集的特征:(1)一个大的统一的寄存器文件(2)一种加载/存储体系结构,数据处理操作只对寄存器内容进行操作,不直接处理内存(有专门的指令进行读写,其它指令不能访问内存,只能处理CPU寄存器)(3)简单寻址模式,所有的加载和存储地址由寄存器和指令决定。
2024-09-05 13:28:35
989
原创 UEFI——文件操作(FileIO)
文件的读写管理通过文件系统来完成,要支持读写文件,UEFI必须首先能操作ESP上的文件系统。首先可以通过两种方式获取EFI_SHELL_PROTOCOL协议接口,EFI_SHELL_PROTOCOL是UEFI规范中定义的一个协议,这个协议允许UEFI应用或者驱动程序与UEFI Shell交互,执行命令、运行其他应用程序、访问文件系统等。在EFI_SHELL_PROTOCOL中有很多对操作,EFI_SHELL_OPEN_FILE_BY_NAME是其中一种,目的是根据文件名打开一个文件或目录,代码原型为。
2024-09-05 08:41:49
787
原创 UEFI——Event(事件)简单使用
在UEFI中所有的异步操作都要通过事件(Event)来实现。事件通常用于通知某个事件的发生,例如设备插入、硬件错误、系统启动等等。UEFI事件可以被不同组件监听,并根据事件类型执行相应的操作。启动服务为开发者提供了一些函数,用于操作事件、定时器以及TPL(任务优先级),这些函数可以分为三类:事件相关函数、定时器相关函数及TPL相关函数。
2024-09-02 19:47:17
828
原创 UEFI——PCD的简单使用
在UEFI固件接口中,PCD(Platform Configuration Database)是一个用于存储和访问平台特定配置信息的机制。PCD允许UEFI驱动程序和应用程序在运行时获取和设置平台相关的参数,而无需硬编码这些值。PCD变量可以被动态的读取和修改。(类似于C语言中的宏而区别于宏)PCD的种类可以分为两大类:(1)在编译过程中起作用,包含以及;
2024-09-02 15:35:38
1188
原创 UEFI——HOB简单使用
UEFI提供了HOB(Hand-Off-Block)机制,即在PEI阶段将数据打包成数据块存放在一段连续的内存中,数据块的标识为GUID,DXE阶段可以通过该GUID在HOB中找到对应数据块。HOB 是非常重要数据结构,在CAR时期将会初始化好,UEFI的早期的堆栈都基于HOB,
2024-08-30 15:51:09
1422
原创 UEFI——Protocol的使用
1、找到Protocol实例:每个protocol都有一个唯一的GUID,根据这个GUID,利用找到Protocol 实例。2、利用Protocol提供的接口函数实现所需要的功能。3、使用关闭打开的Protocol实例。(这本文中未关闭)
2024-08-29 14:36:48
872
原创 UEFI开发——编写一个简单的PPI
PEI阶段是由一个个的PEIM实现的,而PPI是PEIM之间互相调用的接口。所提供的服务由EFI_PEI_PPI_DESCRIPTOR这个数据结构通过PEIM向PEI foundation进行描述,这个数据结构的原型为。NotifyPpi():PPI里的function不会再派发时就执行,会有一个判定条件,通知系统这个PPI会在某个PPI被安装时才执行。(注意,要想在运行的时候输出以上DEBUG信息,需要在编译包的时候加上DEBUG_ON_SERIAL_PORT)
2024-08-28 16:54:20
854
原创 中断和异常(X86架构)
中断门描述符中的段选择符包含了中断程序段的段描述符,由段描述符可以找到中断程序段的基址,过程入口点偏移值包含中断处理程序的段内偏移值,两者结合得到中断处理程序入口点。中断和异常是强制性的执行流的转移,从当前正在执行的任务或程序转移到一个特殊的称作句柄的例程或任务。当硬件发出信号时,便产生中断,中断的产生是同现在正在执行的任务是异步的,即中断的产生是随机的。异常或中断向量号乘以8即可得到IDT中的描述符的索引。过程入口点偏移值是一个32位的值,它表示中断处理程序的入口点在段描述符定义的段内的偏移量。
2024-08-23 16:12:07
772
原创 汇编语言中常用的寄存器
其中,0-1位是RPL(特权等级,请求特权级),第2位是TI位,3-15位是索引Index位。段选择子不直接指向内存的段,而是指向段定义的段描述符。CS:存放正在运行的程序代码所在段的段基址,表示当前所使用的指令代码可以从该段寄存器指定的存储器中获得,相应的偏移量由IP提供。段寄存器分为可见部分和不可见部分,可见部分是选择子,不可见部分是后来根据段描述符的内容填充的,所以说段寄存器读的是16位,写一个寄存器要96位。DS:指出当前程序使用的数据所存放段的最低地址,即存放数据段的段基址,
2024-08-23 10:07:06
1139
原创 CPU的特权级(CPL)
如果应用程序请求其它特权级下的计算资源,势必会调用其它特权级下的代码段、数据段、栈,将其它特权级下的代码段、数据段、栈段链接进来。例如,CPU如果跑的是应用程序的代码,就会限制访问一些资源,如果CPU跑的是操作系统内核的代码,就不会有限制。内核代码段、数据段、栈段在计算机启动的时候,由内核自己设置为特权级0,其它特权级下计算机资源加载到内存,由操作系统决定它们的特权级。每个计算机资源都被贴上了标签,即计算机资源特权级,只有CPU特权级比这个计算资源特权级高或同等的时候,才能访问这个计算机资源。
2024-08-22 16:18:14
1284
原创 X86架构基础
X86目前的架构有32位和64位两种,不同的架构支持的运行模式也是不一样的,64位的基本能兼容32位。64位是X86架构的主流,本文内容默认以64位位基础。X86平台目前的支持的运行模式有以下几种:1、实模式:这是最早的X86运行模式,用于早期的8086、8088和8080处理器;实模式使用16位地址线,支持最大640KB的内存空间;实模式不支持内存保护、分页和多任务处理等现代操作系统特性。2、保护模式:X86架构的一个重要特性。从80286处理器开始引入;
2024-08-19 18:13:44
1154
原创 浅谈虚拟内存
虚拟内存是一种内存管理技术,它为每一个进程提供了一个私有的、连续的空间。每个进程都感觉自己独享了整个内存空间。实际上,虚拟内存通过把物理内存和硬盘存储空间结合起来,实现了这种错觉。虚拟内存实际上就是根据程序的局部性原理,将一个作业分多次调入内存,不用将所有的作业都调入内存就可以启动,将不常用的数据存储在硬盘上。这样就允许程序在运行过程中访问超出物理内存容量的内存空间。
2024-08-19 13:41:45
191
原创 UEFI开发(三)构建UEFI应用
UEFI的主要目的是为了提供一系列的服务和接口,这些服务在计算机启动时由固件(如BIOS)提供给操作系统和应用程序。UEFI规范了操作系统和固件之间的标准接口,使得操作系统能够有效控制硬件,提高系统的启动速度和安全性。Event(事件)服务:允许程序进行异步操作,这是UEFI程序能够执行并发操作的基础。Timer(定时器)服务:配合Event提供定时器功能。内存管理:提供内存的分配和释放服务,管理系统的内存映射。
2024-08-16 11:09:25
796
Intel VROC 7.6 用户指南概述
2025-04-29
【UEFI固件开发】EDK II UEFI驱动程序开发者指南
2025-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人