茗宸博客网

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

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

2024年6月24日 593点热度 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日

站长

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

点赞
< 上一篇
下一篇 >

文章评论

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

站长

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

最新 热点 随机
最新 热点 随机
Mbps、Kbps、bps 与 MB、KB、B 区别/联系/换算 Linux systemctl 命令 linux的service IPTABLES一文通 网安路线图 DOS相关常用命令了一篇了解大全
IPTABLES一文通linux的serviceLinux systemctl 命令Mbps、Kbps、bps 与 MB、KB、B 区别/联系/换算MYSQL数据库学习记录DOS相关常用命令了一篇了解大全
6000元以内 畅玩黑神话、大型3A 内网隐藏通信隧道技术——FRP隧道 一文双篇(二层广播风暴产生原因、如何判断、解决) 红队命令合集 34 张图详解网络设备知识 交换机三种端口模式Access\Hybrid和Trunk的详解
文章目录
  • POST是什么?
  • Boot Flow
  • Status code
    • Checkpoint
    • Checkpoint 范围
  • 参考

COPYRIGHT © 2023 茗宸bk. ALL RIGHTS RESERVED.

站长微信:printJ7

鲁ICP备2024114188号

鲁公网安备37130202372760号