关键词:
文章目录
系统启动流程(Linux)
1. BIOS 加电自检
2. 把 MBR 加载到内存
3. 加载 grub 引导程序
4. Kernel 自身初始化
5. 启动第一个程序 systemd
BIOS
- 初始化硬件
- 查找启动设备
1 - CD-DVD - 光驱启动
2 - PXE - 网络启动
3 - USB - USB启动
4 - HDD (硬盘启动 - Hard Disk) MBR - 主引导记录
MBR
1 - 446B BootLoader:安装GRUB的stage1 或 GRUB2的 boot.img
2 - 64B partition table 主分区表:四个主分区
3 - 2B magic number AAH 55H 标识
GRUB2启动引导
1 - boot.img 唯一作用是在系统启动时装载 core.img ,即装载内核
2 - core.img 是GRUB2的核心映像文件
3 - *.mod 可以动态加载的模块
4 - grub.cfg
如果 /boot 在独立分区,则:/grub2/grub.cfg
如果 /boot 不在独立分区,则: /boot/grub2/grub.cfg
内核引导
1 - /boot/vmlinuz Linux内核映像及内核参数传递
2 - /boot/initramfs
首先:在内存中释放供内核使用的根文件系统(/boot/initramfs)
然后,挂载真正的根文件系统,然后执行 /usr/lib/systemd/systemd
systemd
1 - 读取 /etc/systemd/system
2 - default.target - 链接文件
3 - graphical.target - 图形界面
4 - 启动 图形界面用户登录 进程
固件和BIOS
早期,BIOS是烧在主板上的;
计算机主板上的BIOS在以前就被称为固件
【蓝屏,硬件出现问题】
BIOS分类
1 - legacy
legacy启动模式是当前最常用的BIOS启动模式,读取MBR引导记录表
2 - uefi
Unified Extensible Firware Interface
译:统一的可扩展固件接口
- 是一种新型BIOS
- 兼容传统的legacy启动方式
关于legacy
MBR 介绍
采用MBR(Main Boot Record,译 主引导记录)分区表
主引导分区:共512字节(1 Byte = 8 bit
),分为三部分
1 - 主引导程序 446B - 主引导程序所在位置
2 - 磁盘分区表 DPT 64B - 读取分区表
分区一 16B:
第1个字节:0x80 表示激活 - 激活的分区拥有控制权,四个分区只有一个是激活的
第2-4字节:分区第一个扇区的物理位置
第5个字节:主分区类型
第6-8字节:分区最后一个扇区的物理位置
第9-12字节:分区已用完的扇区数
第13-16字节:分区扇区总数
4 字节,32 位
一个主分区的扇区总数不超过:2^32个
每个扇区大小为 512 字节
单个分区最大空间为:2^32 * 512 = 2T
分区二 16B:
分区三 16B:
分区四 16B:
3 - 结束标志 2B 分区结束
MBR 局限性
1 - 最多四个主分区,或 最多支持 3个主分区+一个扩展分区
2 - 每个分区最大 2T
关于uefi
kylin OS:
存在一个 ESP 分区(EFI系统分区)
uefi的引导程序是以后缀名为 .efi 的文件存放在 ESP 分区中,ESP 分区采用 fat32 文件系统
kylinos将 ESP 分区挂载到 /boot/efi ,直接用文件夹浏览器进去就可以查看到 .efi 文件
GPT
采用GPT(GUID Partition Table)分区表
译:全局唯一标识磁盘分区表
优势
- 大小可支持到128个分区
- 每个分区大小可为 2^64 *512
- 容错性、兼容性
bootloader 启动管理器
计算机读取MBR前面的446B的机器码后,会将控制权交给Boot Loader
Linux下的Bootloader有:
- grub
- grub2
- lilo
- spfdisk
BootLoader的主要功能
1 - 提供菜单
用户可以选择不同的启动项
2 - 加载内核文件
直接指向可启动的程序区段来开始操作系统
3 - 转交给其他 Loader
将引导装载功能转交给其他Loader负责
kernel初始化
kernel文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中
内核文件放置在 /boot
目录下
BIOS - bootloader - kernel
initrd - 镜像文件
systemd - 守护进程
- systemd 是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置
- systemd取代了initd,成为系统的第一个进程(PID=1),其他进程都是它的子进程
- systemd ,可以并发,可以触发进程组
- systemd - 不是一个命令,是一组命令
- systemd - 位于 /etc/systemd/system
kylinos采用过多种启动方式
1 - Sysvinit
2 - upstart
3 - system
4 - systemd
1 - systemd 执行的第一个目标是: default.target;实际上,图形化系统的default.target是指向graphical.target的软链接 (.target 是一组命令)
常用target对应到Sysvinit的运行级别
运行级别 runlevel | 名称 | 描述 |
---|---|---|
basic.target | 启动基本系统,该目标间接并包含了所有的本地挂载点单元以及其他必须的系统初始化单元 | |
default.target | 默认的启动目标,通常指向 multi-user.target 或者 graphical.target | |
5 | graphical.target | 专用于启动图形化登录界面的目标单元,其中包含了 multi-user.target 单元 |
0 | halt.target | 专用于关闭系统但不切换电源时启动的单元 |
0 | poweroff.target | 停止系统运行并切断电源 |
local-fs.target | 专用于集合本地文件系统挂载点的目标单元 | |
3 | multi-user.target | 专用于 多用户 且 命令行模式 下 启动的单元,其[install]段都应该加上WantedBy=multi-user.target指令 |
1 | rescure.target | 专用于启动基本系统并打开一个救援shell时需要启动的单元 |
emergency.target | 单用户模式,没有服务程序运行,文件系统也没有挂载。这是一个最基本的运行级别,仅在主控制台上提供一个shell用于用户与系统进行交互。 | |
local-fs-pre.target | 此目标单元自动排在所有 需要自动挂载的本地文件系统挂载点 之前。可用于确保在 挂载本地文件系统 之前启动某些单元。 | |
6 | reboot.target | 重启系统,专用于重启系统时需要启动的单元 |
挂载文件系统后,再依次运行各target,最后才会运行到default.target 链接到的target(默认是 grapgical.target 和 multi-user.target),至此用户就可以通过图形或者控制端来登录系统
系统启动完成
总结
1 - 计算机加电到完成启动,包含多个进程;
2- 系统启动需要固件支持。legacy 采用的时 MBR分区表,MBR分区表的结构决定了它支持的分区数量和大小;
3 - 当主机存在多个操作系统时,需要bootloader管理和启动系统;
4 - kylinos V10 目前采用的初始化进程是 systemd
5 - 当systemd作为启动进程进行时,它将初始化系统,也就是启动并维护各种用户空间的服务
centoos系统的启动流程(代码片段)
简介:作为一个Linux运维工程师,必须要熟悉Linux系统的启动流程,才能在Linux系统出现故障时及时地发现问题,解决问题;下面将为大家介绍一下CentOS系统的系统启动流程。CentOS启动流程根据上图所示,centos系统总体可分为5个... 查看详情
linux系统启动流程总结(代码片段)
CentOS6启动流程概述 理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的。本文结合互联网上各类资料,做一些总结,希望对大家有一些帮助。启动流程总的划分可以分为4个阶段POST加电... 查看详情
linux系统启动流程总结(代码片段)
CentOS6启动流程概述 理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的。本文结合互联网上各类资料,做一些总结,希望对大家有一些帮助。启动流程总的划分可以分为4个阶段POST加电... 查看详情
说说android系统的启动流程(代码片段)
Android系统的启动流程Android系统的启动流程可以分三部分来分析,Android系统有哪些主要的系统进程?这些系统进程是怎么启动的?启动之后都做了什么事?首先看下图,分三个阶段介绍Android系统的启动流程... 查看详情
centos系统启动流程(代码片段)
...工作。第二步:BootLoader引导加载器 它负责引导系统启动,目前主流的linux都是用GRU 查看详情
linux系统启动流程(代码片段)
Linux系统启动过程分析经过对Linux系统有了一定了解和熟悉后,想对其更深层次的东西做进一步探究。这当中就包括系统的启动流程、文件系统的组成结构、基于动态库和静态库的程序在执行时的异同、协议栈的架构和原理、驱... 查看详情
android系统启动流程分析(代码片段)
前言写这篇blog背景是项目在做系统启动耗时优化,之前看了两遍罗升阳大神《Android系统源代码情景分析》都只是看了,没有实践,没有运用到项目中,因此借项目在做系统优化的机会,再次将Android系统的启... 查看详情
linux下设置字符界面开机启动及系统启动流程介绍(代码片段)
Linux下设置字符界面开机启动及系统启动流程介绍一、临时设置开机运行目标1.查看当前默认的运行target2.临时切换当前的运行target3.设置下一次开机的target二、centos中重要的target1.systemd介绍2.系统重要的target3.查看系统的服务4.查... 查看详情
android系统启动流程分析(代码片段)
...能打开应用的界面。这里我们所说的桌面其实就是android系统启动后的就已经帮我们运行的第一个程序,launcher程序。launcher程序可以理解为作为其它应用app入口管理的一个系统自带的app,正常情况下,安装一个新的应... 查看详情
centos6启动流程(代码片段)
熟悉系统启动流程对我们学习Linux是非常有帮助的。虽然这是很基础的,但能帮助我们更加了解Linux的运行机制。我们在了解了系统启动流程后,系统在启动过程中,发生的问题时候,就知道是什么阶段出... 查看详情
centos7系统启动流程(代码片段)
centos7系统启动流程:1.BIOS开机自启检查内存,硬盘,CPU等硬件信息2.加载MBR到内存自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接找硬盘的第一个扇区,找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找... 查看详情
初探linux操作系统与文件(代码片段)
目录一、操作系统启动流程中的启动检测程序:BIOS搭配MBR/GPT的启动流程二、了解Linux文件属性二、了解Linux文件属性在Linux系统中,每个硬件设备都被当成一个文件来对待。那也确实是想了一下,关于...一、操作系统... 查看详情
开机启动流程(代码片段)
...硬件是否正常02.MBR引导读取磁盘的MBR存储记录信息,引导系统启动03.grup菜单选择启动的内核/进行单用户模式重置密码04.加载系统内核信息可以更好的使用内核控制硬件05.系统的第一个进程运行起来init(串行)init进程控制后续各... 查看详情
[rk3568android11]input子系统启动流程图(代码片段)
...获!😄一、InputManagerService启动流程图分析Input子系统的启动主要是看InputManagerService的启动,InputManagerService是java层的一个系统服务 查看详情
android7.0系统启动流程分析(代码片段)
...osp项目中的代码也有了些变化,本文基于Android7.0分析Android系统启动流程.当我们按下电源键后,整个Android设备大体经过了一下过程:今天我们只想来分析init进程及其后的过程,也就是下图所示部分:init进程init进程会解析init.rc文件(关... 查看详情
linux系统移植:u-boot启动流程(下)(代码片段)
目录Linux系统移植:U-Boot启动流程(下)一、run_main_loop函数详解二、cli_loop函数详解三、cmd_process函数详解Linux系统移植:U-Boot启动流程(下)一、run_main_loop函数详解uboot启动以后会进入3秒倒计时,如果... 查看详情
centos567启动具体流程(代码片段)
CentOS5、6系统的启动流程基于IntelX86架构平台的系统启动流程:1.POST:Power-OnSelfTesting,加电自检;CMOS:在这里面有一个EPROM,可擦写可编程的只读存储器;在这里面保存了一小段程序叫做BIOS程序,全称为BasicInputOutputSystem,基本... 查看详情
linux菜鸟入门之系统启动流程(代码片段)
1.启动过程POST加电自检BIOS以普通的操作系统为例。cpu要执行指令需要从内存中取,而刚开机的时候,内存里什么都没有,所以刚开机的时候。必须将某个的特定的硬件中的指令加入内存中。刚开机时将ROM中的指令映... 查看详情