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。。。

相关推荐
水饺编程几秒前
第2章:Linux 基础,重启命令
linux·c语言·汇编
金色熊族14 分钟前
在Qt中使用asan检测内存泄漏(一)
linux·qt·asan
第404号工位23 分钟前
“已彻底删除”的照片与文件到底去哪了?我用底层扇区扫描,扒出手机和电脑的幽灵数据
linux·python·架构
硅基手札1 小时前
SPI技术系列 12 · SPI 设备驱动实战
linux·驱动开发·单片机·嵌入式硬件·mcu·性能优化·系统架构
不悔哥2 小时前
ESP32上跑 Linux: 乐鑫给 ESP32-S31开放了官方 BSP
linux·嵌入式硬件·开源
syagain_zsx2 小时前
WebSocket 教程:websocketpp 写 echo 服务端
linux·网络·c++·websocket·网络协议·工具库
无足鸟ICT2 小时前
【RHCA+】_etc_yum.repos.d_文件名.repo
linux·运维·centos
骑着蜗牛撵大象3272 小时前
字节序、TLV 到 netlink:Linux 网络消息的编解码全链路
linux·网络·php·etl·序列化·字节序·tlv
tianyuanwo2 小时前
RPM Spec中Name: %{?scl_prefix}xxx中增加宏定义的设计原理
linux·服务器·rpm·scl
张小姐的猫3 小时前
【MySQL】数据类型
android·linux·数据库·c++·mysql·adb·php