无论是千万行的linux ,还是百万行的uefi ,或者百十行的app, 它都有一个主线。应用程序是main() 函数里面全部函数运行完,程序结束。这里main() 做为程序的起点,uefi 能够觉得,就是peimain.c  dxemain.c bds.c 这三个函数运行完,bios 结束。假设进一步的细分。 假设 把pei 和 sec 叫做early initialization, 这一阶段 主要就是在做microcode 更新。跳到保护模式,用cache 去模拟内存以便实现C函数的子过程调用,内存配置,内存(控制器)的配置,就是mrc
的运行,事实上就是依照 JEDEC 定好的初始化顺序,主要是取得这些信息, rank的数量。 地址是8 bit 还是16 bit, 内存容量,内存的电源管理。page 关闭策略, 内存初始化好之后,就是进行memory 測试。最常见的就是ECC.  当这一切做完了,就把bios 代码 shadowing 到内存上面。  剩下来就是完毕 板子上其它设备的初始化了, GPIO, 中断控制器,timer, 串口, 时钟(超频), pci bus 初始化(就是找到它们,并给它们分资源。 事实上就是内存,i/o space,
mmio, irq, 找到option rom ,以及运行option rom). 网卡初始化, usb, sata. 最后就是 装载os, 通过efi 的 load image 或者 int 19h 去调用 os loader.

Application Processor (AP) 初始化

        这年头。即使手机,平板电脑,也配备了多核处理器。BSP + AP 的组合方式。由BSP 负责去初始化系统, 在内存初始化之前,AP 处于未初始化状态。当内存起来之后。内存被初始化,处于等SIPI 状态。 详细是这样玩的:
1 找到microcode ,拷贝到内存中。
2 在SIPI 里面找到cpu code ,拷贝到内存中
3 向全部的处理器发送IPI
4 Disable NEM 
5 对全部处理器进行micro code 更新
6 把全部处理器cache 打开
具体的细节去參考software Developer's Manual,  更具体的过程就要參考bios writer's guide了。


假设从UEFI 的角度看,那么AP 的初始化能够划在PEI 阶段。

CPUID-线程以及core

如今 对一些常见的术语进行解释:
thread. -  线程。 逻辑上的处理器,与其它logical 处理器处于同一个package上面。并与其它逻辑处理器共享资源。

core.  与其它core 处于同一个packge 上面,但不须要与其它core 共享不论什么资源。
package 即我们看得见的芯片,能够包括随意数量的core 和 thread.

Startup Inter-Processor Interrupt (SIPI)

BSP 通过向每个core ,thread 去发送SIPI 去叫醒(wake up) 它们。

详细来说是通过BSP 的LAPIC , LAPIC 标识了SIPI 要发给哪一个AP.


发送IPI JQA是通过写寄存器ICR完毕的, 先来看一下ICR, ICR是64位寄存器。 可分为两个32位寄存器。ICR 的数据结构例如以下图所看到的:



详细过程就是这种:

AP Wakeup State

当AP 接收到SIPI 之后。就開始运行sipi 指向的代码。


Platform 初始化过程:
现行代码分成mem initial 之前的部分和mem initial 之后的部分。即PlatformInitPreMem.c 和PlatformInit.c。

premem 阶段,主要完毕pch 一些主要的初始化(主要是完毕对gpio的定义, LPC IO 的配置), 还有timer 的初始化,
 
 
PCH 初始化入口为:PchInitPreMem.c  它主要也是分两个阶段 :early PEI phase(Memoyr 初始化之前) 和memory is available(memory 能用了)



x86 处理器开机顺序的更多相关文章

  1. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

  2. 6.3 x86处理器如何处理MSI-X中断请求

    PCIe设备发出MSI-X中断请求的方法与发出MSI中断请求的方法类似,都是向Message Address所在的地址写Message Data字段包含的数据.只是MSI-X中断机制为了支持更多的中断 ...

  3. 分配粒度和内存页面大小(x86处理器平台的分配粒度是64K,内存页是4K,所以section都是0x1000对齐,硬盘扇区大小是512字节,所以PE文件默认文件对齐是0x200)

    分配粒度和内存页面大小 x86处理器平台的分配粒度是64K,32位CPU的内存页面大小是4K,64位是8K,保留内存地址空间总是要和分配粒度对齐.一个分配粒度里包含16个内存页面. 这是个概念,具体不 ...

  4. 中国自主X86处理器工艺跃进:国产28nm升级16nm(上海兆芯)

    提到X86处理器,世人皆知Intel.AMD,殊不知还有个VIA(威盛),在Intel反垄断世纪大战中VIA公司作为Intel霸权的受害者也最终确认了X86授权,不过VIA与前面两家的实力相差太远,X ...

  5. windows和linux的开机顺序

    windows的开机顺序: 启动自检阶段---初始化启动阶段---Boot加载阶段---检测和配置硬件阶段---内核加载阶段---屏幕显示. linux的开机启动顺序: 加载Bios---读取MBR- ...

  6. [转帖]年经贴: ARM将为苹果开发高性能CPU核心 取代笔记本x86处理器?

    ARM将为苹果开发高性能CPU核心 取代笔记本x86处理器? https://www.cnbeta.com/articles/tech/899421.htm . 之前苹果的哥们说过 谁特别在意自己的软 ...

  7. [转帖]兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍

    兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍 2019-06-20 09:56:38作者:linux人稿源:快科技 https://ywnz.com/linu ...

  8. 【转帖】国产x86处理器KX-6000发布

    国产最先进x86处理器KX-6000发布:8核3.0GHz 力压酷睿i5处理器 https://www.cnbeta.com/articles/tech/858981.htm 全网所有的网页都写错了 ...

  9. [转帖]又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控

    又一国产x86处理器可大规模上市:Intel至强核心 安全监测管控 https://www.cnbeta.com/articles/tech/850525.htm 不知道是不是有一起汉芯事件 国产CP ...

随机推荐

  1. Nginx实现负载均衡&Nginx缓存功能

    一.Nginx是什么 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl ...

  2. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  3. Rsync服务

    第1章 Rsync开篇介绍 1.1 rsync的定义 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于unix/linux/windo ...

  4. [转载] 使用HTML5的十大原因

    转载自http://www.williamlong.info/archives/3024.html 你难道还没有考虑使用HTML5? 当然我猜想你可能有自己的原因:它现在还没有被广泛的支持,在IE中不 ...

  5. [转]Oracle 创建 DBLink 的方法

    http://blog.csdn.net/davidhsing/article/details/6408770 1.如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: 如果 ...

  6. 最小化安装linux CentOS_7操作系统

    实验环境为VMware虚拟机安装操作系统. 1.打开VMware Workstation 虚拟机,选择创建新的虚拟机: 2.选择linux-CentOS 64位操作系统: 3.为虚拟机命名,并选择安装 ...

  7. swizzle method 和消息转发机制的实际使用

    我的工程结构,如图 1-0 图  1-0 在看具体实现以前,先捋以下 实现思路. ViewController 中有一个-(void)Amethod;A方法. -(void)Amethod{ NSLo ...

  8. Win32API起始处的mov edi, edi与用户空间InlineHook

    在x86平台上,无论是在调试器中跟到系统DLL中时,还是反汇编某个系统DLL时,经常会发现很多API的第一条汇编指令都是mov edi, edi.根据经验来讲,C函数的汇编形式,应该是首先push e ...

  9. SimpleMarkdown - 一款简单的Markdown编辑器

    源码地址: https://github.com/zhuangZhou/SimpleMarkdown 预览地址: http://hawkzz.com:8000 作者网站:http://hawkzz.c ...

  10. python利用for..in遍历,while循环嵌套编译九九乘法表的几种模式

    运用for....in...遍历的四种方向的九九乘法表: 左下角: import sysfor i in range(1,10): for j in range(1,i+1): sys.stdout. ...