Minimal Intel Architecture Boot Loader

本文详细介绍了Intel平台的系统启动过程,包括从reset状态开始的初始化步骤,不同模式下的处理器工作方式,以及如何通过更新微码和配置处理器来准备内存初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看了一篇intel的白皮书感觉受益匪浅所以在网络上把他记录总结一下,白皮书的docment number is 323246

文章的写作意图是想写一篇总结性文章来描述intel 平台的系统启动的顺序,步骤以及要想自己写一个在intel平台上的BIOS所需要的一些技术性文章。

当一个新平台要开发的时候可能会有2种开发状况

1 开发一款BIOS

2 开发一款定制化的boot loader

2者的区别在于BIOS包含了所以的功能和配置,而boot loader只是为特别的主板和特别的硬件使用

 

从reset开始初始化intel构架的平台

    当IA bootstrap processor (BSP)  开机是它的执行的第一条地址是0xFFFFFFF0,也就是4G-16的位置,在这16 byte的位置通常放的是一条jump指令,让cpu跳到其他地方去执行。

 

BY the way:CPU开机时处于Real Mode下,只能访问1M的地址,地址FFFFFFF0h超过了1 MB的物理地址范围。那么CPU是如何访问到的呢?要解释这个问题我们就要从寻址开始说起,CPU要执行的指令地址都是放在base address:IP中,base address包含在CS中,CS寄存器被分为两部分:可见的“Segment Selector”部分和隐藏的"Base Address"部分,且base address = segment selector *16.

当CPU reset之后CPU的 segment selector 被初始化为F000H,而Base Address则没有按照上面的计算计算公式,而是直接被初始化为了FFFF0000,所以CPU的第一条指令为Base address +EIP=FFFF0000H + FFF0H =FFFFFFF0H了,

影射在地址FFFFFFF0h的代码为一条"far jump"或者"far call"指令或者产生一个中断,执行了jump 之后,CS的"Segment Selector"的值将会被改变,从而"Base Address"部分的值也将按照上述原则进行计算。

模式选择

处理器必须处于以下的模式中:

实模式

保护模式

段保护模式

Refer to the Intel® 64 and IA-32 Architectures Software Developer’s Manual
Volume 3A section titled “Mode Switching” for more details.

(1)实模式

实模式是运行在16bit模式中,寄存器和代码都是16bit。cpu执行的物理地址是通过SS<<4 + IP计算的,实模式只能访问到1M的内存空间。

在实模式中,中断处理是通过中断向量表来处理的。

为了支持传统的操作系统,某些类型的实模式代码必须在run-time提供来处理操作系统的需求,当然这个不在本文的讨论范围之内。

(2)保护模式

保护模式是运行在32位模式下的

Interrupt Descriptor Table (IDT)用于处理中断。For more
information on the IDT, refer to the Intel® 64 and IA-32 Architectures
Software Developer’s Manual.

对Firmware来说这是被推荐的一种模式

(3)段保护模式

段保护模式的典型应用是和操作系统的分页模式。

(4)处理器开始模式

当处理器刚开机时是处于一种特殊的模式类似于实模式,它的定端12位地址线被置为高,所以就直接从FFFxxxxx的nvram位置开始访问。Upon execution of the first long jump, these 12 address lines will be driven according to instructions by firmware. If one of the Protected Modes is not entered before the first long jump,处理器将进入实模式,有1M的方面空间。In order for Real Mode to work without memory, the chipset needs to be able to alias memory below 1MB to just below 4GB, to continue to access NVRAM. Some chipsets do not have this aliasing and a forcible switch to a normal operating mode will be required before performing the first long jump.

准备内存初始化

由于当前内存还没有准备好,所以一下的代码都是在rom上面执行,应为rom比较慢所以这期间的代码越少越好。

一下步骤执行让系统准备好初始化内存:

 Processor Microcode Update
 Processor Initialization
 Chipset Initialization

(1)Processor Microcode Update
Refer to the Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A section titled “Microcode Update Facilities” for details on applying a processor microcode update.

(2)处理器初始化

 

...

(未完待续...)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值