x86计算机的启动初期流程 Linux 启动流程

x86计算机的启动初期流程

CPU:

step1,加点开机,cpu自己初始化

step2,cpu 从物理地址 0xFFFFFFF0h 取指令执行;此处存放BIOS代码,这些代码可以是由主板自动从 EEPROM中拷贝至此内存地址处;即下面将执行的 POST 代码

BIOS:

step3,POST:加电自检(Power-On Self-Test, POST):计算机通电后,BIOS会执行自检程序,检查硬件是否正常工作。

step4,测试成功 则继续下面的步骤,否则显示出错信息;

step5,加载 BIOS 的中断向量到物理内存的最低1024字节单元中去;

step6,执行 INT 19h 软中断调用,根据 CMOS 的设置,顺序地从引导盘搜寻引导扇区(以55AA为标志该盘为引导盘),找到第一个引导盘的引导扇区后,继续下一步;

补充:MBR 主引导记录在磁盘的0磁头0柱面1号扇区,BIOS的代码会锁定这个位置查看。

MBR 由三部分构成:

(1)446字节的引导记录,负责检查硬盘分区表、寻找可引导分区、将可引导的活动分区记录DBR装入内存,它位于硬盘的每一分区的第一个扇区;

(2)硬盘分区表16x4=64,每份16字节的4份硬盘分区表,其中记录了每个分区的类型,分区size,和分区开始与结束的位置等;

(3)magic Number 55AAH ,占2个字节,是MBR结束标志

MBR 总共占 446 + 64 + 2 = 512 bytes

step7,执行 INT 13h 软中断调用,从引导扇区取 MBR 值DBR转存到内存00007C00处,并跳转到该处开始执行,即将控制权交给引导扇区的引导程序。

上述3~7步由BIOS完成,开源的BIOS可参考复古8088PC的 8088_bios 和 快跑的 Coreboot:

GitHub - skiselev/8088_bios: BIOS for Intel 8088 based computers

GitHub - coreboot/coreboot: Mirror of https://review.coreboot.org/coreboot.git. We don't handle Pull Requests.

Loader:

step8,执行引导程序:引导扇区中包含引导程序(Boot Loader),比如 grub2,该程序负责加载操作系统的核心部分到内存中,例如 vmlinux,并启动操作系统的运行。

上述由引导程序完成,可参考 grub2:

GNU GRUB - Obtaining GRUB

https://github.com/rhboot/grub2

GNU GRUB Manual 2.12

OS:

step9,启动操作系统:引导程序加载完操作系统核心后,控制权被转移到操作系统内核,操作系统开始初始化并启动系统服务。

Linux。。。

相关推荐
食咗未17 分钟前
Linux USB HOST EXTERNAL STORAGE
linux·驱动开发
食咗未18 分钟前
Linux USB HOST HID
linux·驱动开发·人机交互
Xの哲學18 分钟前
Linux SLAB分配器深度解剖
linux·服务器·网络·算法·边缘计算
齐鲁大虾1 小时前
UOS(统信操作系统)如何更新CUPS(通用Unix打印系统)
linux·服务器·chrome·unix
虾..2 小时前
Linux 简单日志程序
linux·运维·算法
huoxingwen3 小时前
Ubuntu 22.04 上 VMware Workstation 点击虚拟机窗口就消失的解决历程
linux·运维·ubuntu
姚青&4 小时前
Linux 常用命令之基本命令
linux·运维·服务器
一路往蓝-Anbo4 小时前
【第05期】数据的微观世界 (五) —— 浮点数 vs 定点数:MCU的数学课
linux·stm32·单片机·嵌入式硬件·物联网
G_H_S_3_4 小时前
【网络运维】企业级监控平台Zabbix:部署与实践指南
linux·运维·网络·zabbix
小周学学学4 小时前
Vcenter Auto Deploy安装与使用
linux·运维·服务器