一.深入理解开机启动流程

1.电源加电的一刻,CPU通过自举电路,(RESET)重置信号重置了自己的寄存器的值使其值正好指向了ROM中BIOS程序的地址将其加载到内存中

2.BIOS是一段代码其功能主要有两个:一个是完成加电自检(POST),另外一个就是完成基本的输入输出服务

3.BIOS完成POST后首先会根据COMS(需要电池保存其配置信息)中的设置寻找第一个处于活动状态的可启动的设备(软盘,硬盘,U盘,光盘等)

4.BIOS找到指定设备后会利用BIOS中提供的INT13H的2号功能来读出改设备的MBR中的内容(一个扇区512字节),MBR中存放的是bootloader引导管理器

5.linux下主流的bootloader是lilo和grub,目前linux系统主要使用grub或grub2.

6.grub被加载到内存中后就会根据相关配置文件寻址内核镜像,由于内核镜像一般没有附带一些类型的硬盘驱动,所以先要加载initrd

7.initrd中附带了硬盘的相关驱动,在initrd中加载相关驱动并最终切换根文件系统,执行系统的第一个进程init.

二.启动流程值BIOS详解
1.BIOS是什么?
   BIOS无非就是一段卸载EEPROM中的一段程序而已.
586以后的主板上BIOS ROM的芯片基本上都采用了EEPROM(Electrically Erasable Programmable ROM)电可擦除可编程ROM.
通过跳线开关和系统配带的驱动程序盘,可以对EEPROM进行重写,方便地实现BIOS升级。

2.BIOS具有什么功能?
   BIOS用于计算机开机时执行系统各部分的的自检,并启动引导程序或装载在内存的操作系统。此外,BIOS还向操作系统提供一些系统参数。

3.BIOS和COMS的区别和联系
联系: CMOS是计算机上另一个重要的存储器。之所以提到它,是因为BIOS程序的设置结果就保存在CMOS中。而且,在BIOS程序引导计算机启动后,计算机需要载入CMOS中的用户信息和常规设置后才能正常使用。
区别: BIOS与CMOS都是存储器。二者的区别是BIOS为只读存储器(ROM或EPROM),而CMOS为随机存储器(RAM);BIOS中存储的是程序,而CMOS中存储的是普通信息。

三.启动流程之grub详解
 1.grub主要有stage1,stage1.5,stage2三个阶段组成,BIOS加载MBR中的bootloader,其实质就是加载stage1
 2.stage1开始加载stage1.5,stage1.5阶段主要是为了加载一些文件系统的驱动,我们可以看下/boot/grub目录下的文件来验证

1
2
3
4
5
[root@litte grub]# pwd
/boot/grub
[root@litte grub]# ls
device.map     fat_stage1_5  grub.conf         jfs_stage1_5  minix_stage1_5     splash.xpm.gz  stage2         vstafs_stage1_5
e2fs_stage1_5  ffs_stage1_5  iso9660_stage1_5  menu.lst      reiserfs_stage1_5  stage1         ufs2_stage1_5  xfs_stage1_5

我们会发现大量以文件名中含有*stage1_5命名的文件,这其实即使就是各个不同文件系统的驱动
3.stage1.5阶段以文件系统方式加载了stage2阶段,这个阶段会读取配置文件生成可选择的菜单供用户选择要加载的内核,并提供菜单的背景

4.stage2通过用户的选择加载相应的initrd文件,到此grub生命周期结束,控制权转交给initrd文件

四.启动流程之initid详解

1.initrd是什么?
   initrd是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd 文件中包含了各种可执行程序和驱动程序,
   它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。在很多嵌入式 Linux 系统中,initrd 就是最终的根文件系统。

2.为什么要使用initrd?
   最主要的目的是加载根文件系统存储介质的驱动模块。我们知道根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞大、臃肿。

3.initrd的加载流程?
1. boot loader 把内核以及 initrd 文件加载到内存的特定位置。
2. 将initrd的内容释放到rootfs中。

3. 执行initrd中的/init文件,执行到这一点,内核的工作全部结束,完全交给/init文件处理。
4.  init文件的功能(init文件 其实是一个nash脚本,和linux系统的第一个进程init不一样)

1
2
3
4
5
6
1.挂载proc,sys目的之为了获取内核输出的信息进行硬件探测
2.挂载/dev/pts,/dev/shm,/dev/mapper
3.通过mknod命令创建设备文件(linux系统是通过udev进行设备文件的自动创建的)
4.通过insmod命令加载相关硬盘驱动和文件系统驱动
5.挂载根文件系统
6.切换真正的root,并执行init程序

五.grub配置文件详解

1.获取硬盘上的grub
dd if=/dev/sda of=/root/mbr.bak bs=512 count=1

2.grub配置文件详解
grub.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
default=0
 #设置默认加载的内核 0代表第一个title处指定的内核镜像
timeout=5
 #菜单选择超时时间,5秒后不选择的话就会启动默认项
splashimage=(hd0,0)/grub/splash.xpm.gz
#指定加载的grub菜单的背景图片
hiddenmenu    #隐藏启动菜单
title CentOS (2.6.18-308.el5) #菜单显示信息
        root (hd0,0)        
#指定内核的位置 任何类型的硬盘grub都是hd#形式,
#第一块硬盘就是0,第一个分区就是0
        kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/
#指定内核镜像文件
        initrd /initrd-2.6.18-308.el5.img
#指定initrd镜像文件

其它额外参数介绍:
password
   指定用户在能够解锁菜单、编辑一个配置行或输入 GRUB 命令前必须输入的密码。这个密码可能是明文格式。GRUB 还允许将密码存储为一个 MD5 摘要,我们的示例就是这样做的。这样更安全一些,大多数管理员都会设置一个密码。如果不设置密码,用户就能够完全访问 GRUB 命令行。

boot
   一个可选参数,指示 GRUB 启动选择的操作系统。当一个选项所有命令全部执行完时,这将是一个默认操作。

lock
   本示例中不使用。没有输入密码之前不会启动指定项。如果使用这个命令,那么还应该在初始选项中指定一个密码;
   否则,用户可以编辑您的锁定选项并启动系统,或者添加 “single” 到其中的一项。如果您愿意的话,还可以为个别条目指定一个不同的密码。

rootnoverify
   类似于 root,除非 GRUB 不尝试挂载文件系统或验证其参数。这通常用于 GRUB 不支持的文件系统,比如 NIFS。
   如果您想要 GRUB 加载硬盘驱动器上的主引导记录,也可以使用这个命令,例如,访问不同的配置文件或者重新加载您之前的启动加载程序。

chainloader
   指定将作为阶段 1 文件加载的另一个文件。值 “+1” 等同于 0+1,表示加载从扇区 0 开始的一个扇区,即从 root 或 rootnoverify 指定的设备加载第一个扇区。

深入理解RHEL6开机启动原理相关推荐

  1. Ubuntu20.04设置开机自启脚本、开机自启命令(ubuntu自启,ubuntu开机自启)rc(run command)(systemd)(/etc/rc.local)(开机启动原理)开机自启动

    注意:ubuntu18.04也适用! 文章目录 Linux/Ubuntu开机启动原理 Linux的开机启动顺序 Ubuntu 20.04 设置开机自启脚本 使用 rc-local.service 1. ...

  2. RHEL6开机启动流程详解

    很多人觉得开机是很简单的事情,只要按下电源开关,然后系统就会自然启动,就能登陆.其实不是,如果系统没有什么问题,可以正常登陆的时候,当然开机很简单.但更多的时候,我们需要知道当机器不能正常开机的如何解 ...

  3. mysql启动原理_MySQL 启动原理剖析

    介绍 本篇文章主要从查看MySQL的启动命令的代码来详细了解MySQL的启动过程,内容多为概念知识:理解MySQL的启动原理对熟悉MySQL至关重要,启动mysql服务有三种方式分别是:mysql.s ...

  4. Windows开机启动项设置详解

    一.开机启动原理 Windows系统都有一个"启动"文件夹,把需要打开的程序的快捷方式或脚本放到"启动"文件夹里,就可以实现开机自启动. 启动"文件夹 ...

  5. Linux+nfs配置开机启动,linux NFS配置:NFS开机自动启用及其原理

    这节我们讲NFS开机自动启动及其原理 NFS服务器端已经配置好了,但机器重启以后我们还要重新开启NFS服务.为了不这么麻烦,我们要让NFS和portmap服务在开机时自动启动,这样就会避免出现moun ...

  6. linux efi 启动原理,Linux(RHEL6)启动过程详解

    Linux(RHEL6)启动过程详解 Linux(红帽RHEL6)启动过程详解: RHEL的一个重要和强大的方面是它是开源的,并且系统的启动过程是用户可配置的.用户可以自由的配置启动过程的许多方面,包 ...

  7. linux 精简开机启动服务,打造个人专属的微型Linux--启动原理篇

    首先此篇先大体介绍下整个系统的开机流程,再来对其一一展开进行详细的说明 第一步:首先进行开机自检POST,确认硬件正常后进入下一步 第二步:BIOS initialization(BOOT SEQ)B ...

  8. 关于Ubuntu运行级别、开机启动脚本的说明

    关于Ubuntu运行级别.开机启动脚本的说明 目录简介 1.1介绍Ubuntu下面的自启动脚本目录 1.2 Linux操作系统运行级别的概念 1.3关于操作系统自启脚本的启动顺序 1.4    Lin ...

  9. 从无盘启动看 Linux 启动原理

    作者:bobyzhang,腾讯 IEG 运营开发工程师 0. 故事的开始 0.1 为什么和做什么 最近家里买了对音响,我需要一个数字播放器.一凡研究后我看上了 volumio(https://volu ...

最新文章

  1. PHP遍历用blade标签表示,php-Laravel Blade {{$variable或’Default Text’}}无法使用网址
  2. [codeforces 339]D. Xenia and Bit Operations
  3. SQL Server 求结果
  4. 计算机组成原理第一阶段测试,计算机组成原理随堂测验1附答案
  5. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧
  6. Java命令行界面(第21部分):航空公司2
  7. 你的专属云资源管家!阿里云正式对外发布云解析PrivateZone!
  8. Golang——map集合初始化、键值操作、map作为函数参数的使用
  9. 最有用的Postgres扩展:pg_stat_statements
  10. mediainfo php,media.php
  11. 李宏毅机器学习——深度学习入门
  12. android web service视频教程,需要一个简单的android / webservice工作教程?
  13. VM10虚拟机安装图解
  14. 剑网3:指尖江湖手游脚本哪个好呢? 剑网3:指尖江湖手游自动采集IOS脚本
  15. 蓝牙(简单的通信连接)
  16. Maven配置错误: The JAVA_HOME environment variable is not defined correctly
  17. Win10下 NIVIDIA(CUDA+CUDNN)+Anaconda安装PyTorch(GPU版)
  18. Web答辩问题整合一
  19. mysql中的临时表怎么用的?
  20. C语言getopt()函数

热门文章

  1. Apache SeaTunnel (Incubating) 2.1.0 发布,内核重构、全面支持 Flink
  2. 新媒体管家plus(新媒体管家插件) v6.66官方最新版
  3. 32位tomcat_64的mysql_tomcat环境搭建
  4. 一、学术/学位论文的逻辑思路与框架
  5. 项目记录——workbench模态分析
  6. Python学习之异常处理
  7. 单反手动对焦M档,AV,TV,P,A,A-DEP
  8. android部分权限列表
  9. 一级造价工程师(安装)- 计量笔记 - 第一章第二节安装工程常用材料
  10. 高德 linux python,Python高德地图API实用篇