系统开机启动过程

legacy boot启动方式,也叫旧的老的启动方式,那么Legacy BIOS Boot是如何启动或引导的?

当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。这个位置在基本输入/输出系统(BIOS)中。CPU会调用这个重置向量来启动一个位于闪存/ROM中的已知地址处的程序。通常,它执行一个启动自测(POST)来检查机器。最后,它从引导驱动器上的主引导记录(MBR)加载第一个扇区。

引导程序就位于MBR第一个扇区里面。此时引导程序就被装入RAM并执行。这个引导加载程序在大小上小于512字节(一个扇区)。BIOS自检完成之后,将MBR的代码读入内存,管理权交给MBR,MBR再读取DPT,从DPT(DiskPartitionTable,硬盘分区表占据MBR扇区的64个字节(偏移01BEH--偏移01FDH))找出硬盘的所有分区哪一个是激活的主分区。到这里为止,所以系统都是一样的。下面就有区别了。DPT读完找到主分区之后然后找到这个主分区的PBR(PartitionBootRecord分区引导记录),PBR位于激活主分区的第一个扇区。安装不同操作系统的时候PBR是会被改变的,XP的PBR写死的代码是去找NTLDR。而Vista和7的PBR里写进的就是去找Bootmgr。

这个时候显示器上还没有显示引导管理器的界面。Bootmgr被找到之后管理权就交到了Bootmgr。BootManager首先从BCD中读取BootManager菜单的语言版本信息,然后再调用BOOTMGR与相应语言的BOOTMGR.EXE.MUI组成相应语言的启动菜单,之后才会在显示器上显示引导管理器,也就是选择多操作系统的那个文字界面。最后,当你选择了相应的操作系统,这里是Win7或8(如果选择XP,会转入XP的启动流程,找到XP的NTLDR然后启动),Bootmgr就去寻找系统分区(系统分区和主分区的概念不是一样的哦)Windows/System32下的Winload.exe加载操作系统内核。

结构图如下:

BIOS:闪存,开机自测

MBR:加载第一个扇区

DPT:硬盘分区

PBR:分区引导

Bootmgr:调用内核

EFI Boot 介绍,目前我们用到的装机方式为UEFI模式

EFI
的全称是可扩展固件接口 (Extensible Firmware Interface),它是 Intel 公司为全新类型的固件体系结构、接口和服务提出的建议性标准。该标准有两个主要用途:向操作系统的引导程序和某些在计算机初始化时运行的应用程序提供一套标准的运行环境;为操作系统提供一套与固件通讯的交互协议。

简单说,EFI 是 BIOS 的替代者。它为操作系统和固件提供了更加强大、安全、方便的交互途径。EFI 规范定义的接口,包括数据表包含平台的信息,可在 OS Loader 和 OS 的启动和运行时服务。

EFI
固件提供了几种技术优势:

引导能力支持大容量磁盘(超过 2 TIB );

更快的启动;

独立 CPU 的体系结构;

CPU
的独立的驱动程序;

灵活的预操作系统环境,包括网络功能;

模块化设计;

EFI 启动还需要一个特殊的分区表,该分区表指向一个特殊的文件。通常情况下该文件位于\EFI 路径,EFI 启动涉及到一个写入到 firmware 中的 boot loader, EFI 并不把启动程序放置在 MBR 中,firmware 知道如何读取分区表以及 FAT 的文件格式。EFI 系统分区是用 FAT 格式格式化的特定分区,其中包含 boot loader, 该 boot loader 是 EFI 可执行程序,可被 EFI boot manager 载入和运行。

Boot
loader 被设置为一个可以通过固件访问的文件。Boot loader 允许用户选择并加载操作系统。所有的 boot manager 都包含一个 EFI 变量,该变量被用来定义固件配置参数。

MBR与GPT的分区区别

MBR:主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。

主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。主引导扇区内的信息是通过分区程序写入的,它是低级格式化的产物,和操作系统没有任何关系(操作系统是创建在高级格式化的硬盘分区之上,是和一定的文件系统相联系的)。

对于硬盘而言,一个扇区可能的字节数为 128×2n (n=0,1,2,3)。大多情况下,取 n=2,即一个扇区(sector)的大小为 512 字节。

MBR
的限制:

在 MBR 分区表中最多 4 个主分区或者
3 个主分区+1 个扩展分区:从主引导记录的结构可以知道,它仅仅包含一个 64 个字节的硬盘分区表。由于每个分区信息需要 16 个字节,所以对于采用 MBR 型分区结构的硬盘,最多只能识别 4 个主要分区(Primary partition)。

MBR
分区方案无法支持超过 2TB 容量的磁盘。因为这一方案用 4 个字节存储分区的总扇区数,最大能表示 2 的 32 次方的扇区个数,按每扇区 512 字节计算,每个分区最大不能超过 2TB 。磁盘容量超过 2TB 以后,分区的起始位置也就无法表示了。

GPT:全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构。GUID 分区表 (GPT) 是作为 Extensible Firmware Interface
(EFI) 计划的一部分引入的。相对于 PC 常用的较旧的主引导记录 (MBR) 分区方案,GPT 提供了更加灵活的磁盘分区机制。

GPT
使用 GUID 分区表 (GPT) 磁盘分区系统。GPT 磁盘提供了以下好处:

最多允许 128 个分区;主引导记录 (MBR) 磁盘可以支持 4 个主分区和扩展分区内的 124 个附加分区。

允许大于 2 TB 的卷容量,而 2 TB 是
MBR 磁盘的极限。

由于分区表提供了复制和循环冗余校检 (CRC) 保护,所以更加可靠。

能在所有基于 x64 平台上用作存储卷,包括运行 Windows XP Professional
x64 Edition 的平台。从 Windows Server 2003 SP1 开始,GPT 磁盘也可用作基于 x86 的Windows
平台上的存储卷。

可用作基于 x64 的 Windows 7、Windows
Vista 和 Windows Server 2008 版本上的引导卷。从 Windows Server 2003 SP1 开始,GPT 磁盘也可用作基于 Itanium 的系统上的引导卷。

注意:Windows 仅支持从包含 Unified Extensible Firmware
Interface (UEFI) 引导固件的系统上的 GPT 磁盘引导。

GOP 与 VBIOS 的区别

VBIOS
是计算机图形卡或集成图形控制器的 BIOS,类似系统 BIOS 提供了一组软件所使用的程序函数来访问系统硬件一样,VBIOS 也是提供了一组视频相关的程序使用的函数访问视频硬件。通常由显卡厂商提供一个二进制 Bin 文件给 ODM 厂商,将其包在系统 BIOS 中。

而 GOP (Graphic Output Protocol) driver 是 EFI 架构下取代传统 VBIOS 黑箱的 EFI driver,它被设计成在操作系统启动之前支持基本需求的图形输出功能。

VBT:
Video bios table。VBT 是一个特别制作的客制化过得特殊
binary 数据块。靠 BMP utility 来编辑。VBT
同样如同 legacy vbios 一样记录了 detail
timing、GPIO Pins、Clock 等显示方面的参数信息。

两者的不同点:Pre-OS boot 时期,EFI 是通过标准的 GOP protocol 来实现显示 output。而 lagacy vbios需要通过 INT10 interrupter 来实现。

哪些系统支持 UEFI 启动?为什么当前我们不能支持 32bit 的 win8 UEFI 启动?

目前我们的 BIOS 的 Build 生成是
x64 模式的,因此 32 位的 Win8 UEFI 是不被支持的。

时间: 2024-08-26 14:54:50

系统开机启动过程的相关文章

linux系统开机启动过程

Linux系统开机过程 1:BIOS 通电自检 2:读取MBR 3:boot loader 4:加载内核 5:用户层init根据inittab文件来设定运行等级 6:init进程执行rc.sysinit 7:启动内核模块 8:执行不同运行级别的脚本程序 9:执行/etc/rc/d/rc.local 10:执行/bin/login 程序,进入登录状态.

Linux系统开机启动时的工作原理

Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘信息.内存信息.时钟信息.PnP特性等等.在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了.在BIOS将系统的控制权交给硬盘第一个扇区之后,就开始由Linux来控制系统了. 启动第二步--读取MB

linux开机启动过程,很多人说的不太清楚的看看。

面试中经常遇到说,请简要回答一下Linux系统的开机启动过程? 加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init依据inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)–>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了 作为一名linux开发人员,这是必

Android系统的启动过程

当我们拿到一台Android的智能手机,从打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 系统上电 当给Android系统上电,CPU复位之后,程序指针会指向启动地址,从该地址读取启动程序的可执行代码直接运行,或者将可执行代码与数据载入CPU内置的RAM中再运行. CPU复位,其实就是在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,并将程序指针指向引导程序的位置. 这一段代码,放在PC中,叫做BIOS,而在Android等嵌入式系统中就叫做Bootloader

Linux 系统的启动过程

阅读目录 Linux 系统启动过程 内核的引导 运行init 运行级别 系统初始化 建立终端 用户登录系统 图像模式与文字模式的切换 Linux的关机 当我们在启动Linux操作系统时,会显示出硬件自检以及很多的启动信息,包括启动失败的我们都一目了然! 在Centos 5.x版本上是可以完全可以看见硬件自检以及启动信息的 在Centos 6.x版本上只显示进度条,只需要按F4 或者 root用户修改 /boot/grub/grub.conf 文件 vim /boot/grub/grub.conf

linux开机启动过程、PATH、过滤一级目录、cd的参数、ls -lrt、命令切割日志

      第二波命令正向我方来袭 :开机启动过程.PATH.过滤一级目录.cd的参数.ls -lrt.命令切割日志 1.1 linux开机启动过程 1.1.1  开机自检(BIOS)-- MBR引导 -- GRUB菜单 -- 加载内核(kernel)-- 运行INIT进程 -- 读取/etc/inittab配置文件 -- 执行/etc/rc.sysinit脚本(初始化脚本,如设置ip,hostname) -- 执行/etc/rc.d/rc(根据运行级别开机自启的软件)脚本 -- 启动/sbin

003---Linux系统的启动过程

Linux系统的启动过程 按下电源 开机自检(BIOS):检查cpu.内存.硬盘是否有问题 MBR引导 GRUB菜单 加载内核(kernel) 运行 INIT 进程(linux系统里面的第一个进程) 读取/etc/inittab配置文件(运行级别) 执行初始化脚本/etc/rc.d/rc.sysinit,设置主机名.设置IP地址 根据系统的运行级别,在开机的时候启动不同的软件 启动 mingetty 进程 原文地址:https://www.cnblogs.com/xjmlove/p/103526

LinuxL:系统的启动过程

Linux系统的启动过程 过程 通电-> BIOS-> LILO/GRUB-> Kernel Boot-> init->rc.sysinit init->rc ->mingetty->login-> shell-> 完成开机 Linux系统的运行级别 运行级别 Linux 为了适应不同用户对服务的启动配置要求,设置了七种不同的运行级别: 运行级别 0:关机模式.poweroff.target 运行级别 1:单用户模式,仅用于 root 用户对系统

Android内核开发:图解Android系统的启动过程

本文是<Android内核开发>系列的第六篇文章,前面的几篇文章介绍了Android内核开发相关的基础知识,包括:Android源码的下载.版本和分支介绍.编译和烧写等等,从本文起就要开始真正地进行Android内核的学习及实战了. 学习任何软硬件系统,研究系统启动过程都是一种非常有效地起步手段,搞Android内核开发也不例外.网上有很多文章对Android启动相关代码进行分析和走读,大家可以先搜索阅读一下,我个人更喜欢更加直观的方式去理解未知的东西,包括图.表.系统输出的log信息等等,因