茗宸博客网

  • 首页
  • 数据通信
    • 华为
    • 思科
    • 浪潮科技
    • 锐捷
  • 硬件瞎折腾
    • 电脑折腾
    • 软路由
    • 服务器
    • 私有NAS
    • FPV无人机瞎折腾
  • 网络安全
    • CTF经验
    • 实战环境
    • 渗透实战
    • 蓝队加固
    • 近期赛事
    • 漏洞分享
  • 网络技术
    • 网络基础
    • 网络技术精品
    • linux基础
    • 计算机基础
  • 编程学习
    • python
  • 运行维护
  • 服务器搭建
  • 资源分享
  • 随手笔记
    • 随手笔记之ensp
    • 随手笔记之mysql
  • 日常
    • 拍摄
茗宸博客
随手笔记
  1. 首页
  2. 网络技术
  3. 正文

UEFI是不需要自检还是弱化了自检这个概念

2024年6月24日 583点热度 0人点赞 0条评论
内容目录

先上问题。

  1. 电脑上电后,如何判断UEFI当前运行在哪一个阶段?
  2. 如果发生了错误,系统能告诉工程师发生了何种错误吗?

答案是肯定的,这可以通过状态码 Status code来解决。

POST是什么?

在了解Status code之前,先说说什么是POST。

上电自检(Power On Self Test, POST)是BIOS/UEFI 固件领域的一个行业术语。它表示系统在上电后(接上AC电源,按下PowerButton),BIOS/UEFI对系统进行硬件设备检测和资源初始化的过程。

在POST阶段,BIOS/UEFI通常会检测当前系统有哪些设备,比如内存,硬盘,显示器,散热器,键/鼠等等,并对它们进行初始化,分配内存资源或IO端口。如果BIOS/UEFI检测到系统中某些组件不存在,如内存,硬盘,风扇等,则会发出POST Error code,并将其通过数码管之类的显示设备显示出来。

如果是发生严重错误,则会通过蜂鸣器发出警告声。不同严重错误会对应不同的声音类型,比如两长三短可表示视频显卡未检测到,三短一长可表示内存未检测到,两短可表示一般错误发生。具体哪种类型的声音对应哪种严重错误,得根据厂商的Spec规范来定义。

当然,除了警告,错误,BIOS/UEFI还定义了一些POST Status code。我们知道,POST过程包含很多阶段,用时通常为十几秒到几十秒之间,具体得看系统的配置情况。总的来说,系统的配置越高,POST用时也越长。BIOS/UEFI工程师通过这些POST Status code可以知道当前POST过程具体执行到哪一个阶段了,而这对于BIOS/UEFI程序调试具有非常大的帮助。

Boot Flow

那么,BIOS/UEFI的启动流程是怎么样的呢?

对于Intel平台,BIOS/UEFI的启动流程遵循PI规范。PI规范规定系统固件的启动顺序如下图所示[1]:

img

来源:PI Spec 1.7

  • Security (SEC) : 安全相关的底层初始化,包括调用CPU的Cache作为临时RAM (Cache As RAM) ,初始化栈相关。
  • Pre-EFI Initialization (PEI) : 内存初始化。
  • Driver Execution Environment (DXE) : 大部分硬件初始化都在这个阶段。
  • Boot Device Selection (BDS) : 启动设备选择。
  • TSL\RT\AL

对于BIOS/UEFI而言,主要就是负责前4个阶段的工作,后面的部分则是OS Loader和OS负责。

Status code

A status code is a data value used to indicate progress during [the boot phase](https://www.zhihu.com/search?q=the boot phase&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType"%3A"answer"%2C"sourceId"%3A3431777144}).

状态码(Status Code) 是一种用来表示启动阶段的数据值(两个字节)。对于BIOS/UEFI工程师来说,我们只关注BIOS/UEFI启动过程的常见阶段。因此,我们通常其实使用的是状态码的一个子集——Checkpoint。

Checkpoint

Checkpoint 数据值通常是通过 80h I/O(什么是80h I/O ?)来输出的。Checkpoint 标识了当前系统正在执行的任务,比如正在初始化内存,还是在初始化键盘之类的。Checkpoint 对BIOS/UEFI的早期启动阶段调试非常有帮助。

那我们如何得知系统此时的Checkpoints呢?鉴于目前市面上大部分的BIOS都是采用AMI的Aptio V。对此,AMI早期提供了一种PCI checkpoint card,也常常被叫做POST CARD。它可以通过LED灯显示80h I/O口的值。

img

来源[2]

目前,新的升级版是基于USB的AMI Debug Rx。它可以通过USB口接入系统,调试,查看Checkpoint非常方便。

img

来源 [2]

Checkpoint 范围

知道了怎么获取,显示 Checkpoints,我们还得知道这些Checkpoint具体代表启动过程的什么阶段。对此,AMI给出了Checkpoint的阶段范围,我们可以参考下面这张表。

img

来源[2]

可知,Checkpoint 的范围是两个字节,共16位,标识的范围为:0x00~0xFF。各个范围都对应一个Boot Phase。

举个栗子,如果我们发现此时系统上的Checkpoint是 0x56,那么根据上表,便可得知此时系统处于PEI阶段,且发生了[PEI errors](https://www.zhihu.com/search?q=PEI errors&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType"%3A"answer"%2C"sourceId"%3A3431777144})。

那有人可能要问了,0x56具体标识什么错误呢?关于每个范围内具体的Checkpoint标识什么,则需要去查看某个阶段的具体Checkpoint。这里的0x56则表示系统配置了无效的CPU类型或者速度。

img

来源[2]

关于其它详细的Checkpoint,可以参考AMI的公开文文档:[2]

<完>

参考

  1. ^https://uefi.org/sites/default/files/resources/PI_Spec_1_7_final_Jan_2019.pdf
  2. ^AMI_Aptio_5.x_Status_Codes.pdf https://www.congatec.com/fileadmin/user_upload/Documents/Others/AMI_Aptio_5.x_Status_Codes_PUB_Rev.2.0_20140410.pdf
标签: 暂无
最后更新:2024年6月24日

站长

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

站长

这个人很懒,什么都没留下

最新 热点 随机
最新 热点 随机
Linux systemctl 命令 linux的service IPTABLES一文通 网安路线图 DOS相关常用命令了一篇了解大全 MYSQL数据库学习记录
IPTABLES一文通linux的serviceLinux systemctl 命令搬运 linux最常用的20个命令搬运 浅谈社工搬书Linux操作系统应用与安全项目化实战教程
HFS数据恢复 详解UEFI和Legacy区别分析 SQL注入常用方式 centos7卸载java环境安装 OpenJDK 11 两种方式 linux的service MYSQL数据库学习记录
文章目录
  • POST是什么?
  • Boot Flow
  • Status code
    • Checkpoint
    • Checkpoint 范围
  • 参考

COPYRIGHT © 2023 茗宸bk. ALL RIGHTS RESERVED.

站长微信:printJ7

鲁ICP备2024114188号

鲁公网安备37130202372760号