当我们按下电源键后,CPU就开始reset vecto执行BIOS程序了吗?

  1. 按下电源键,在CPU执行代码之前,由上电时序工作。
  2. 据了解服务器或者部分台式机的上电时序都是由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.时间开始

我们通过一个古老的例子来了解一下开机的整个过程:

  1. 在G3(未接电源)情况下,RTC电源提供RTC_RST#和VCC_RTC电源给南桥。

  2. 插入电源或者电池。系统进入G2,S5的状态。EC检查电源的可靠性,并发送PM_RSMRST#通知南桥各种SB电压已经准备完毕。南桥复位,部分功能SB功能激活,进入待机状态。

  3. 用户按下电源键,时间开始。

  4. EC收到PWRSW#信号,通过PM_PWRBTN#通知南桥。南桥收到PM_PWRBTN#信号后依次拉高SLP_S5#,SLP_S4#,SLP_S3#信号给EC。

  5. EC发出PCON#给ATX电源。

  6. ATX电源接到低电平的PSON#信号后,开始工作,发出各路基本电压给主板上的各个元件。

  7. 基本电压变换的其他电压也被转换出来。

  8. 电源发出PWROK#给EC,EC转交给南桥和北桥(有的话)

  9. VRM和CPU通讯,根据VID送出Vcore

  10. VRM发生VRMPWRGD#给南桥,表示核心电压OK。

  11. 南桥发送PLT_RST#给北桥。

  12. 南桥发送PWRGOOD#给CPU。

  13. 北桥在收到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》其中一节,讲述第一条指令的位置。

从上面文档内容,我们得知

  1. 第一条指令位置比最高物理地址低16个字节, 也就是 0xFFFFFFF0 ( 4G - 16字节 )这个位置 。
  2. CPU初始应该是实模式,0xFFFFFFF0 地址超出处理器实模式 1M 字节的可寻址范围。是因为访问物理内存的方法都是段寄存器CS中隐藏部分的段基址与EIP相加得到的地址。隐藏寄存器中的段基址被初始化为FFFF0000h,直接和EIP(FFF0h)相加则得到了第一条指令地址0xFFFFFFF0。
  3. 所以说在EPROM代码初始化完成之前,为了确保CS寄存器中的基址不变,代码必须不包含远跳转或远调用或允许中断发生。

知晓了CPU第一条指令,那么后续指令在哪?要怎么读取和执行呢?

注:以下BIOS 指的是UEFI BIOS或者UEFI BIOS Flash

首先了解一个知识,后续的指令都在BIOS里面存储,而现在大部分电脑或服务器的BIOS都存放在一块NOR Flash中,这块Flash通过SPI接口和南桥PCH相连。

  1. NOR Flash是字节寻址,意味着它可以 XIP ( eXecute in place),简单理解就是原地执行代码,不需要加载load到某块内存中使用。
  2. CPU发送此地址(0xFFFFFFF0)到北桥上解码,如果该地址没有被北桥上的设备占用,那么就会通过DMI通道发送到南桥上的设备进行解码,此地址会被南桥的SPI控制器接收,SPI控制器负责翻译地址(Address Decode),最后翻译成SPI指令,CPU就从NOR Flash中得到相应指令和数据。

整个过程如下:

  1. CPU 上电之后,内核Core需要Reset Vector的代码,它改到地址放到地址总线上;
  2. Uncore 的 DMI 控制器缺省 decode 这块空间,它把该请求通过DMI总线发送给南桥;
  3. 南桥的 SPI 控制器缺省 decode 这块空间,它用 SPI 总线问 SPI Flash芯片要该内容;
  4. SPI 芯片响应请求,返回内容;
  5. SPI 控制器响应请求,当二传手返回内容;
  6. DMI 控制器响应请求,当三传手返回内容;
  7. CPU内核收到指令,开始解码执行;

这样一个64B的信息有了,直到运行下一个64B,再循环往复。可以看出,并没有人加载整个BIOS,而是一点点通过地址decode慢慢运行。

三、UEFI阶段

CPU随后开始执行reset vector的代码了,这就进入了我们熟悉的UEFI的世界。这里简单回顾一下:

UEFI主要有三个目的:

  1. 初始化硬件
  2. 安全启动操作系系统
  3. 为操作系统提供统一的硬件抽象

UEFI流程如下:

SEC -> PEI -> DXE -> BDS -> TSL -> RT -> AL

本文主要来源:
按下电源键后发生了什么?电脑是如何优雅地开机的?
《Intel® 64 and IA-32 Architectures Software Developer’s Manual》
《UEFI原理与编程》

UEFI BIOS —— 开机上电阶段分析相关推荐

  1. UEFI BIOS —— SEC阶段分析

    SEC(Security Phase)- 安全阶段 一.SEC阶段主要功能 SEC阶段是平台初始话的第一个阶段,计算机系统加电后首先进入这个阶段. SEC阶段的功能:UEFI系统开机或重启后首先进入S ...

  2. UEFI BIOS和 传统BIOS 启动模式对比

    传统BIOS开机流程 从你按下主机机壳上的电源键,到进入作业系统的期间,储存於主机板上那颗EEPROM(电气可抹除暨可程式化唯读记忆体)裡的BIOS便会开始执行以下的工作: 1. 初始化: 当电脑打开 ...

  3. 操作系统安装必备基础知识----浅谈电脑系统里的那些UEFI, BIOS, MBR, GPT。

    操作系统安装也是一门简单学问,要想真正搞懂,还是需要一点基础知识做铺垫.前两天耍手机看到了这篇关于装机的这些基础理论知识,总结的还是不错的.所以拿来既是自己收藏也是分享看我博客的人.之后再抽出时间写一 ...

  4. 计算机取消uefi启动项,如何使用老毛桃winpe删除或添加UEFI BIOS启动项?

    说到电脑开机的过程,就不得不提及启动项的概念了.电脑在启动的时候需要通过UEFI BIOS启动项来启动整个电脑.而启动项的设置,一般需要进入BIOS界面操作.而最近有位朋友想要删除电脑的其中一个开机首 ...

  5. 【整理】EFI/UEFI BIOS 入门 : All For Beginners

    EFI/UEFI BIOS 入门 : All For Beginners 写在前面 我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个 ...

  6. 联想ThinkPad E14 如何修改BIOS开机画面LOGO

    环境: 电脑:联想E14 系统:Windows 10 专业版 64位 问题描述: 联想ThinkPad E14修改BIOS开机画面LOGO 解决方案: 一.下载BIOS升级程序 1.打开ThinkPa ...

  7. 华硕uefi不识别linux安装u盘启动,华硕主板uefi bios u盘启动不了怎么办?

    此前UEFI BIOS一直不温不火,如今白菜价的UEFI BIOS的主板确实满大街比比皆是,很多用户对硬件支持和快速启动需求增多了.那么,华硕主板uefi bios u盘启动不了怎么办?针对这个问题, ...

  8. 使用UEFI BIOS Updater(UBU)来更新CPU微代码

    原文地址:http://www.win-raid.com/t154f16-Tool-Guide-News-quot-UEFI-BIOS-Updater-quot-UBU.html 链接: http:/ ...

  9. Intel CPU集成显卡被UEFI BIOS禁用想开启的设置

    台式机处理器为i7-6700k, 带有HD Graphics 5300, 想用来做OpenCL开发,然后下载了intel_sdk_for_opencl_setup_6.3.0.1904.exe, 做了 ...

最新文章

  1. 29个你必须知道的Linux命令
  2. 个人知识管理专著《你的知识需要管理》出版
  3. python-序列化模块
  4. SVD分解及应用的直观理解
  5. 一体化市场谋定国际品牌贸易 对话国际农民丰收节贸易会
  6. 【学术相关】博士新生应该懂得哪些道理?
  7. IO、NIO、AIO 内部原理分析
  8. D - Undoubtedly Lucky Numbers CodeForces - 244B(数论 )
  9. Ags 9.3 文档逐步上线
  10. 面料经纬向、正反面判别方法
  11. iCloud “文稿和数据”功能即将关闭,如何将数据迁移到 iCloud 云盘?
  12. 手机电脑同连一个wf,手机网速比电脑网速快很多,电脑网速很慢
  13. 制作Windows severs 2019启动盘
  14. 开发者百宝箱——DevToys
  15. quickchm乱码问题
  16. window.location与window.open()的区别
  17. 数据增强——对文件夹中的图片进行读取、数据增强,保存操作
  18. 2019年末,来一发基于Hexo自建博客生态指南!
  19. Allegro 小知识总结
  20. 如何维持手机电池寿命_教你如何让自己的手机电池寿命多用两年

热门文章

  1. 正则表达式简介及学习教程下载
  2. python中Mongodb的Objectid 实现
  3. SpringBoot实现Word导出
  4. 机器学习:Kullback-Leibler Divergence (KL 散度)
  5. Robot Localization AMCL原理以及代码
  6. 西门子运动控制卡使用详解
  7. 无神经网络车牌识别(2)--特征提取与特征匹配
  8. P2031 脑力达人之分割字串
  9. hrtf 旋转音效matlab实现
  10. 【STM32+CubeMX+HAL库】摩尔斯译码器开发