Linux 启动流程学习

开机自检(加载BIOS)

无论什么机器,在开机后都要进行通电自检(硬件),如果硬件有问题,则无法继续下去。
(例如当内存条松动时或者损坏,就会发出嘀嘀嘀警报声)。接着开始加载BIOS(Basic Input Output System
BIOS是一个写入到主板上的一个软件程序。BIOS会去分析计算机里面有哪些存储设备,
从默认的第一启动项开始启动。

MBR与boot loader

接下来BIOS将程序启动的下一步交给了MBR,他会去读取第一个扇区的MBR位置。
由于不同的操作系统的文件系统格式不相同,因此我们必须要一个引导装载程序来处理文件加载的问题,
也就是BootLoader,而这个BootLoader就安装在启动设备的第一个扇区,也就是MBR(主引导分区)

step1:boot loader

boot loader 有如下功能:提供菜单:用户可以选择不同的启动选项加载内核文件:直接指向可启动的程序区段来开始操作系统转交其他loader:将引导装载功能转交给其他loader负责

boot loader程序 有多个版本

    在linux中有 早期的LILO 和现在使用较多的 grub在windows中有 ntloader

step1.5:/dev/sda1

/dev/sda1 通常是开机后的/boot 操作系统起来之后作用很小 可能我们很少注意到这个分区

但其实这个分区是开机时的根目录 里面存放着很多重要的开机所需要的文件 grub vmlinuz 内核等
根目录会在开机之后再次挂载 也就是开机之后我们能看到的/dev/sda2分区

这个分区有一个比较有意思的情况 这时我们没有加载文件系统加载模块 也就是不能够挂载 那么我们为什么能够访问到 /boot分区呢
hexdump -C -n 5120 /dev/sda 这条命令可以看到里面有grub信息 表明了他的挂载载不需要模块的帮助
(ps:这里说挂载不太准确 ,说成 可以直接访问更贴切)

step2: initramfs-.*.img

包含有各种可执行程序和驱动程序,这些驱动程序中包括 即将加载的真正的文件系统的存储介质的驱动




到了这一步 有了ext4模块就可以加载文件系统了

/boot下有一个grub. conf配置文件

default 0 表示默认启动第一个选项  也就是可以有多个内核可供选择
timeout 表示等待多长时间以后系统自动选择默认选项启动
splashiamge 是定义了一个开机启动时的背景图 可以自定义
title 分隔开了每一个内核:root (hd0,0) 表示当前根为 第一个磁盘的第一个分区kernel 表示当前内核 rhgb表示系统默认启动以图形化界面开启 quiet  只显示重要信息 安静模式initrd 表示启动系统映像文件名称

这里还有一个执行顺序问题需要注意:

    是先执行initrd 有了文件系统加载模块 再去交给kernel的 因为你可以看到在配置文件里有了/dev的产生 如果没有文件系统的加载 是无法挂载和有这个名称的

关于 initrd 和 initramfs 的区别

Kernel

关于kernel我了解的较少 ,只是知道他的作用就是加载一些硬件驱动程序,最终释放虚拟文件系统
,并挂载实际的目录文件系统,从而开始后续的正常启动流程。

init

init程序的类型:SysV:init CentOS5 之前 配置文件:/etc/inittabUpstart:init, CentOS6 配置文件:/etc/inittab /etc/init/*.confSystemd: systemd CentOS 7配置文件:/usr/lib/systemd/system/etc/systemd/system

以CentOS 5为例:

/etc/initab
每一行的定义方式:id:runlevel:action:processaction : wait :切换至次级别运行一次respawn:此进程终止 就重新启动initdefault:设定默认运行级别 sysinit:设定系统初始化方式 




切换到对应的运行等级时如果为K开头的进程 就关闭掉对应的服务 如果为S开头的 就开启对应的服务

启动流程总结

step1:加载BIOS的硬件信息和自检 根据设置启动所选设备
step2:读取并执行所选设备内MBR里的boot loader
step3:根据boot loader加载kernel kernel 检测硬件预加载驱动程序
step4:kernel调用init init会取得run-level信息
step5:执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境
step6:执行run-lebvel的各个服务启动
step7:执行/etc/rc.d/rc.local文件
step8:执行终端机模拟程序来启动login进程 最后等待用户登录

转载于:https://blog.51cto.com/13572413/2090594

Linux 启动流程学习相关推荐

  1. Linux SMP启动流程学习(三)

    Linux SMP启动流程学习(三) 4 构建CPU拓扑关系 4.1 创建调度域拓扑关系-sched_init_domains() 在系统启动开始的时候就开始构建CPU的拓扑关系,具体流程如下: [s ...

  2. Linux SMP启动流程学习(二)

    Linux SMP启动流程学习(二) 3 SMP系统启动流程 3.1 SMP启动判断 源码:/arch/arm/kernel/setup.c 调用:start_kernel() -> smp_s ...

  3. 【树莓派不吃灰】命令篇⑥ 了解树莓派Boot分区,学习Linux启动流程

    目录 1. Linux启动过程 1.1 内核引导 1.2 运行init初始化进程 -- 初始化系统环境 1.3 运行级别 -- runlevel 1.4 系统初始化 -- 加载开机启动程序 1.5 用 ...

  4. 最详细最易理解的linux启动流程解读及相关问题,万字高能无废话

    linux启动流程 linux的启动流程是运维所必须非常理解的东西,因为它将会是我们在发生服务器开不起机等情况的主要排错手段,充分理解了liunx的启动流程能够助力我们对此类故障的快速定位和处理. 废 ...

  5. Linux 进内核,arm linux 启动流程之 进入内核

    原标题:arm linux 启动流程之 进入内核 还是从编译链接生成vm 的过程来看吧,由一大堆.o文件链接而成,第一个就是 kernel/arch//kernel/head-armv.o ,而且我们 ...

  6. RISC-V Linux 启动流程分析

    " Author:  通天塔 985400330@qq.com Date:    2022/05/15 Revisor: lzufalcon falcon@tinylab.org Proje ...

  7. 嵌入式linux内核启动过程,嵌入式Linux:ARM Linux启动流程

    ARM Linux启动流程大致为:bootloader---->kernel---->root filesystem.bootloader 是一上电就拿到cpu 的控制权的,而bootlo ...

  8. linux启动流程及自定义gurb

    linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...

  9. 全志linux关机键,全志平台linux启动流程分析

    转载:全志平台linux启动流程分析 一.BROM阶段 机器上电之后会执行固化在BROM里面的一段引导程序,这个程序会依次遍历所有支持的启动介质,直到找到第一个支持的.目前支持的启动介质是sd/mmc ...

最新文章

  1. eclipse 右键项目为什么没有properties菜单_只需几步,从零开始搭建SSM项目
  2. Spring3.x与jdk8兼容问题
  3. 实战ELK(9) Elasticsearch地理位置
  4. 基于Office 365的随需应变业务应用平台
  5. python编译出来的程序员_Windows下编译Python2.7源码
  6. 计算机模拟求解流体力学方程,计算流体力学CFD及其应用
  7. gtx1050ti最稳定的驱动_笔记本1050ti显卡安装最新驱动版本 (415.27) 记录 NVIDIA显卡GeForce系列...
  8. 互联网周刊eNet研究院:2018中国数字化转型最佳解决方案TOP100
  9. 题解【[FJOI2018]所罗门王的宝藏】
  10. python中的pika模块
  11. 19款Windows实用软件推荐,满满的干货,总有一款是你必备的
  12. 判断清浊音 matlab,基于MATLAB的语音信号的清浊音分析.docx
  13. Arduino制作一个人体感应灯
  14. 修改数据库的名字和表名
  15. 常用的六大类型测试工具
  16. python绘制缓和曲线_CAD中缓和曲线的画法 - AutoCAD基础应用 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  17. spoon无法初始化至少一个步骤_通俗易懂:8大步骤图解注意力机制
  18. Elementary Sorts
  19. 30亿卖身苹果的Beats,最终还是沦为AirPods的垫脚石
  20. 【IOS】自己写的一个舒尔特方格app

热门文章

  1. CodeSmith使用存档
  2. Python_60之迭代器模块
  3. 【luogu】P1772物流运输(最短路+DP)
  4. http status 状态码汇总
  5. python画决策树
  6. Windows8 商店支付功能
  7. ExtAspNet应用技巧(十) - Grid导出为Excel文件(续)
  8. (十八)密度聚类DBSCAN
  9. Git 使用方法(一)-本地篇
  10. 希尔排序java代码_希尔排序及希尔排序java代码