UEFI BIOS —— 开机上电阶段分析
当我们按下电源键后,CPU就开始reset vecto执行BIOS程序了吗?
- 按下电源键,在CPU执行代码之前,由上电时序工作。
- 据了解服务器或者部分台式机的上电时序都是由cpld实现,笔电则由EC实现。
以X86平台为例,转载一位大佬写的内容(上电时序)。
按下电源键后发生了什么?电脑是如何优雅地开机的?
一、上电时序
上电时序,也叫做Power-up Sequence,是指电源时序关系。它牵扯到诸多计算机部件,在正式开始时间之旅之前,我们来介绍一下所有参与的小伙伴们。
1.电源
- ATX电源提供+12V、-12V、+5V、-5V、+3V和+5VSB等六种电压。也就是我们图上的两个白色的电源接入口。主板其他的不同电压是主板上的变压线路转换过来的,他们包括+3VSB、+1.5VSB、1.8VDual、2.5VDual、3VDual、VCore、VTDDR等等很多。
- +12V主要是给CPU内核供电,它可以单独给PCIe设备供电,包括显卡等等。
- +5V应用最广,给USB等等外设供电。
- +5VSB等各种带SB的电压,是提供Stand By的供电,即在S3 Sleep时提供电力,保障唤醒和刷新。
主板右边中间那个纽扣电池,它叫做RTC电源,永不掉电。除非电池没电并且没接任何外部电源。 RTC用以保持机器内部时钟的运转和保证CMOS配置信息在断电的情况下不丢失。
2.时钟
- 电脑中的CPU,AGP、PCI插槽、SATA、USB端口和PS/2端口等在通信速度上有很大差异,所以需要提供不同的时钟频率。
- 由ck410、ck505和iCLK等芯片将原先散布在不同地方的晶振和分频电路整合在一起,为CPU、SATA、PCI、USB等等设备提供基础频率。
3.电源时序控制芯片/电路
主板对于上电的要求是很严格的,各种上电的必备 条件都要有着先后的顺序,一项条件满足后才可以转到下一步,如果其中的某一个环节出现了故障,则整个上电过程不能继续下去。谁来控制和协调整个时序过程呢?不同的主板、芯片组、代际之间都有不同的方案,在笔记本上过去经常采用EC的方案、台式机则很多用SIO或者定制芯片。现在很多电源时序控制被整合进了ME中,在面向嵌入式设备的Atom系列主板上则越来越多的引入了在手机等设备上常用的PMIC。
4.时间开始
我们通过一个古老的例子来了解一下开机的整个过程:
在G3(未接电源)情况下,RTC电源提供RTC_RST#和VCC_RTC电源给南桥。
插入电源或者电池。系统进入G2,S5的状态。EC检查电源的可靠性,并发送PM_RSMRST#通知南桥各种SB电压已经准备完毕。南桥复位,部分功能SB功能激活,进入待机状态。
用户按下电源键,时间开始。
EC收到PWRSW#信号,通过PM_PWRBTN#通知南桥。南桥收到PM_PWRBTN#信号后依次拉高SLP_S5#,SLP_S4#,SLP_S3#信号给EC。
EC发出PCON#给ATX电源。
ATX电源接到低电平的PSON#信号后,开始工作,发出各路基本电压给主板上的各个元件。
基本电压变换的其他电压也被转换出来。
电源发出PWROK#给EC,EC转交给南桥和北桥(有的话)
VRM和CPU通讯,根据VID送出Vcore
VRM发生VRMPWRGD#给南桥,表示核心电压OK。
南桥发送PLT_RST#给北桥。
南桥发送PWRGOOD#给CPU。
北桥在收到PLT_RST#信号后,1秒钟后发生CPU_RST#,让CPU复位。
时序图如下:
在CPU复位后,是不是要立刻跳到reset vector开始执行BIOS程序了呢?还没有,opcode、on die rom会在这个阶段执行,TXT、boot guard等安全保障措施也在这里运行。
二、第一条指令
CPU复位之后的第一条指令在哪?
参考Intel提供的软件开发者手册《64-ia-32-architectures-software-developer-manual》其中一节,讲述第一条指令的位置。
从上面文档内容,我们得知
- 第一条指令位置比最高物理地址低16个字节, 也就是 0xFFFFFFF0 ( 4G - 16字节 )这个位置 。
- CPU初始应该是实模式,0xFFFFFFF0 地址超出处理器实模式 1M 字节的可寻址范围。是因为访问物理内存的方法都是段寄存器CS中隐藏部分的段基址与EIP相加得到的地址。隐藏寄存器中的段基址被初始化为FFFF0000h,直接和EIP(FFF0h)相加则得到了第一条指令地址0xFFFFFFF0。
- 所以说在EPROM代码初始化完成之前,为了确保CS寄存器中的基址不变,代码必须不包含远跳转或远调用或允许中断发生。
知晓了CPU第一条指令,那么后续指令在哪?要怎么读取和执行呢?
注:以下BIOS 指的是UEFI BIOS或者UEFI BIOS Flash
首先了解一个知识,后续的指令都在BIOS里面存储,而现在大部分电脑或服务器的BIOS都存放在一块NOR Flash中,这块Flash通过SPI接口和南桥PCH相连。
- NOR Flash是字节寻址,意味着它可以 XIP ( eXecute in place),简单理解就是原地执行代码,不需要加载load到某块内存中使用。
- CPU发送此地址(0xFFFFFFF0)到北桥上解码,如果该地址没有被北桥上的设备占用,那么就会通过DMI通道发送到南桥上的设备进行解码,此地址会被南桥的SPI控制器接收,SPI控制器负责翻译地址(Address Decode),最后翻译成SPI指令,CPU就从NOR Flash中得到相应指令和数据。
整个过程如下:
- CPU 上电之后,内核Core需要Reset Vector的代码,它改到地址放到地址总线上;
- Uncore 的 DMI 控制器缺省 decode 这块空间,它把该请求通过DMI总线发送给南桥;
- 南桥的 SPI 控制器缺省 decode 这块空间,它用 SPI 总线问 SPI Flash芯片要该内容;
- SPI 芯片响应请求,返回内容;
- SPI 控制器响应请求,当二传手返回内容;
- DMI 控制器响应请求,当三传手返回内容;
- CPU内核收到指令,开始解码执行;
这样一个64B的信息有了,直到运行下一个64B,再循环往复。可以看出,并没有人加载整个BIOS,而是一点点通过地址decode慢慢运行。
三、UEFI阶段
CPU随后开始执行reset vector的代码了,这就进入了我们熟悉的UEFI的世界。这里简单回顾一下:
UEFI主要有三个目的:
- 初始化硬件
- 安全启动操作系系统
- 为操作系统提供统一的硬件抽象
UEFI流程如下:
SEC -> PEI -> DXE -> BDS -> TSL -> RT -> AL
本文主要来源:
按下电源键后发生了什么?电脑是如何优雅地开机的?
《Intel® 64 and IA-32 Architectures Software Developer’s Manual》
《UEFI原理与编程》
UEFI BIOS —— 开机上电阶段分析相关推荐
- UEFI BIOS —— SEC阶段分析
SEC(Security Phase)- 安全阶段 一.SEC阶段主要功能 SEC阶段是平台初始话的第一个阶段,计算机系统加电后首先进入这个阶段. SEC阶段的功能:UEFI系统开机或重启后首先进入S ...
- UEFI BIOS和 传统BIOS 启动模式对比
传统BIOS开机流程 从你按下主机机壳上的电源键,到进入作业系统的期间,储存於主机板上那颗EEPROM(电气可抹除暨可程式化唯读记忆体)裡的BIOS便会开始执行以下的工作: 1. 初始化: 当电脑打开 ...
- 操作系统安装必备基础知识----浅谈电脑系统里的那些UEFI, BIOS, MBR, GPT。
操作系统安装也是一门简单学问,要想真正搞懂,还是需要一点基础知识做铺垫.前两天耍手机看到了这篇关于装机的这些基础理论知识,总结的还是不错的.所以拿来既是自己收藏也是分享看我博客的人.之后再抽出时间写一 ...
- 计算机取消uefi启动项,如何使用老毛桃winpe删除或添加UEFI BIOS启动项?
说到电脑开机的过程,就不得不提及启动项的概念了.电脑在启动的时候需要通过UEFI BIOS启动项来启动整个电脑.而启动项的设置,一般需要进入BIOS界面操作.而最近有位朋友想要删除电脑的其中一个开机首 ...
- 【整理】EFI/UEFI BIOS 入门 : All For Beginners
EFI/UEFI BIOS 入门 : All For Beginners 写在前面 我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个 ...
- 联想ThinkPad E14 如何修改BIOS开机画面LOGO
环境: 电脑:联想E14 系统:Windows 10 专业版 64位 问题描述: 联想ThinkPad E14修改BIOS开机画面LOGO 解决方案: 一.下载BIOS升级程序 1.打开ThinkPa ...
- 华硕uefi不识别linux安装u盘启动,华硕主板uefi bios u盘启动不了怎么办?
此前UEFI BIOS一直不温不火,如今白菜价的UEFI BIOS的主板确实满大街比比皆是,很多用户对硬件支持和快速启动需求增多了.那么,华硕主板uefi bios u盘启动不了怎么办?针对这个问题, ...
- 使用UEFI BIOS Updater(UBU)来更新CPU微代码
原文地址:http://www.win-raid.com/t154f16-Tool-Guide-News-quot-UEFI-BIOS-Updater-quot-UBU.html 链接: http:/ ...
- Intel CPU集成显卡被UEFI BIOS禁用想开启的设置
台式机处理器为i7-6700k, 带有HD Graphics 5300, 想用来做OpenCL开发,然后下载了intel_sdk_for_opencl_setup_6.3.0.1904.exe, 做了 ...
最新文章
- 29个你必须知道的Linux命令
- 个人知识管理专著《你的知识需要管理》出版
- python-序列化模块
- SVD分解及应用的直观理解
- 一体化市场谋定国际品牌贸易 对话国际农民丰收节贸易会
- 【学术相关】博士新生应该懂得哪些道理?
- IO、NIO、AIO 内部原理分析
- D - Undoubtedly Lucky Numbers CodeForces - 244B(数论 )
- Ags 9.3 文档逐步上线
- 面料经纬向、正反面判别方法
- iCloud “文稿和数据”功能即将关闭,如何将数据迁移到 iCloud 云盘?
- 手机电脑同连一个wf,手机网速比电脑网速快很多,电脑网速很慢
- 制作Windows severs 2019启动盘
- 开发者百宝箱——DevToys
- quickchm乱码问题
- window.location与window.open()的区别
- 数据增强——对文件夹中的图片进行读取、数据增强,保存操作
- 2019年末,来一发基于Hexo自建博客生态指南!
- Allegro 小知识总结
- 如何维持手机电池寿命_教你如何让自己的手机电池寿命多用两年