POST(加电自检)-->bootsequence(引导次序,BIOS)-->Boot Loader(MBR)-->Kernel+ramdisk(临时根,initrd,initramfs)-->mount rootfs(根切换)-->/sbin/init(配置文件,CentOS 5:/etc/inittab, CentOS6 /etc/init/*.conf)

设置默认运行级别-->指定系统初始化脚本-->初始化额外的硬件设备并加载驱动程序-->启动(关闭)服务(/etc/rc.d/rc#.d,/etc/rc.d/init.d/)-->/etc/rc.d/rc.local-->设置CtrlAltDel组合的功能-->启动终端(mingetty),并在终端附加登录程序(login)-->如果级别为5,则要启动X server;

一、POST加电自检:

当我们打开计算机电源,计算机首先会读取BIOS信息,BIOS中记录了CPU、内存、设备启动序列、硬盘等信息;然后对系统启动关键硬件设备进行检测,如果出现严重故障则停机;如果是一般故障,会发出报警提示,等待故障清楚;如果没有故障,加电自检完成。

BIOS(Basic Input Output System)是保存于主板CMOS芯片中的程序代码;

CMOS(ComplementaryMetal Oxide Semiconductor):是主板上的ROM芯片;

二、获取引导次序,读取MBR:

加电自检完成之后:CPU会读取BIOS信息中的设备启动序列,按照次序引导,按次序找引导设备,第一个有引导程序(MBR)的设备即为启动PC server所用到的设备;

可作为启动设备:光驱,便携式移动设备,硬盘,网卡(系统引导,PXE)

PXE实现系统引导:DHCP,tftp(kernel+ramdisk)

MBR(主引导记录,Master BootRecord):

MBR位于磁盘的0磁道0扇区,占用512个字节:

446bytes:Boot Loader,主程序;
64bytes:PartitionTable,硬盘分区表,每16bytes标记一个分区,一共4分区;3个主分区,1个扩展分区,扩展分区还可以划分为若干个逻辑分区;
2bytes:MBR有效性标记;

三、Boot Loader:

操作系统内核运行之前的一段小程序,选择要启动的内核(在当前磁盘的某或某些分区上);

1、Boot Loader比较常见的有GRUB和LILO:

LILO:LInux Loader
0-1023范围内的柱面构成的分区的内核文件,通常应用与嵌入式计算机;
GRUB:GRand Unified Bootloader
CentOS 5&6:Grub 0.97
CentOS7:Grub2 1.96

2、GRUB:GRand Unified Bootloader

1)、grub程序由两段组成:

stage1:位于MBR中(0柱面 0磁道 1扇区);
stage1_5:位于MBR随后的扇区;
stagr2:读取grub.conf配置文件,并实现引导功能的扩展;

grub目录和配置文件位置:

2)、grub的功能:

1、提供菜单,并提供交互式接口;
e:进入编辑模式;
a:直接修改内核参数;
c:进入grub命令行模式;
2、允许用户选择要启动的内核或系统;
允许传递引导参数给内核;
选择界面可隐藏;
3、为编辑功能提供保护机制;
启用内核文件:选择运行制定的内核需要先输入密码;
传递参数:使用e命令需要先输入密码;

在菜单选择倒计时界面按任意键进入grub菜单:

按e键进入编辑菜单可以看到kernel和initrd:

3)、grub命令行接口:

>root(DEVICE):指定哪个分区为接下来要启动的系统或内核文件所在的分区;
所有硬盘都识别为hd;
不同的硬盘基于数字标识:如hd0,hd1等;
同一个硬盘上的不同分区,也使用数字标识,如hd0,0 hd1,5;

>find(DEVICE)/path/to/file:查找文件

>kernel:指定要运行的内核文件;
>initrd:为要运行的内核指定其可用的ramdisk文件;

>boot:启动此前配置好的内核或系统;

按c键进入grub命令行接口:

4)、配置文件grub.conf:

文件位置:/boot/grub/grub.conf

参数:

default=:选择第几个title配置的内核或系统,各title从0开始编号;
timeout=#:菜单显示的超时时长;
splashp_w_picpath=/path/to/some_p_w_picpath_file:指定菜单的背景图片;此图片只能为14bits色,xpm格式,gzip压缩;
hiddenmenu:隐藏菜单
titleTILTE STRING:显示于菜单中的标题;
root:指定引导分区;
kernel:指定kernel位置;
initrd:指定initramfs位置;

在grub菜单按a键可在内核加载前编辑内核参数:

常用参数:

single:单用户模式启动;

5)、grub保护机制:

1、生成密码:
#grub-md5-crypt
2、保护编辑功能,则需要title之外的添加:
#password--md5 密码串
3、保护使用某内核,则需要内核对应的title之下添加:
#password--md5 密码串

6)、安装grub的方式:

使用grub-install命令:
#grub-install [--root-directory=/path/to/somewhere] DEVICE
--root-directory=/path/to/somewhere

/path/to/somewhere:内核及initrd文件所在的分区的挂载点的父目录,且此挂载点必须叫boot;

例如:/dev/sdb1:/mnt/boot
#grub-install --root-directory=/mnt /dev/sdb

四、kernel+ramdisk:

根据grub设定的内核映像所在路径,系统读取内核文件,并进行解压缩操作;系统将解压缩后的内核放在内存中,完成内核自身初始化;探测所能识别的硬件设备,并加载驱动程序,完成核心环境建立;

要读取内核文件必须访问根文件系统要加载根文件系统所在的设备,而此时根文件系统没有挂载,要挂载根文件系统需要根文件系统所在设备的驱动程序。为解决这个问题,grub在加载内核同时,也把ramdisk加载到内存中并运行;

展开ramdisk镜像文件:

ramdisk在内存中表现为一个虚拟根文件系统initfs,里面有如同Linux根目录下的bin、sbin、dev、etc、lib、proc、usr、var、tmp等目录;initfs将内核与真实根建立联系,内核通过initfs加载驱动程序,然后进行根切换,挂载真实根目录;至此内核加载完成;

1、kernel:

内核的功能:进程管理、文件系统、硬件驱动(在内核模式下运行)、内存管理、安全功能(SELinux)、网络子系统;

1)、内核设计流派:

单内核体系结构:
linux:支持模块化,模块可以动态装卸载
linux内核:核心+外围模块
核心:/boot/vmlinux-VERSION-release
模块:/lib/modules/VERSION-release
.ko:kernel object
ramdisk:/boot/initramfs-VERSION-release.img
在内核启动过程中装载根文件系统时有用;模块间有可能存在依赖关系;
微内核体系结构:
windows、solaris

2)、内核的某些功能:

编译进内核本体 [*]
编译成内核模块 [M]
不选择使用 [ ]

3)、内核模块管理:

#lsmod:显示内核已装载模块

动态装卸载模块:
#modprobe -rMOD_NAME:卸载;
#modprobe MOD_NAME:装载;

#insmod/path/to/module_file:装载;
#rmmod MOD_NAME:卸载;

查看某模块的详细信息:
#modinfo MOD_NAME

检查并生成模块间依赖关系的命令:
#depmod

2、ramdisk:

CentOS 5:SysV,init;/etc/inittab--> /etc/rc.d/rc.sysinit;
CentOS 6:upstart,init;/etc/init/*.conf(/etc/inittab) --> /etc/rc.d/rc.sysinit
#chkconfig

CentOS 7:systemd, init;/usr/lib/systemd/system/;借鉴MAC OS X;
#systemctl

五、/sbin/init:

内核加载完成之后,第一个运行的程序就是/sbin/init,该文件会先读取/etc/init/rcS.conf文件:

设定系统运行级别:

0-6:7个运行级别:
0:关机;
1:single usermode,single,s,S,不启动网络功能,不启动用户认证,单用户模式(维护模式);
2:multi usermode,不支持NFS功能;
3:完全多用户模式,文本接口,不启动图形界面;
4:未使用;预留级别;
5:完全多用户模式,图形接口;
6:重启;

#init:切换运行级别;

六、/etc/rc.d/rc.sysinit:系统初始化脚本

查看/etc/rc.d/rc.sysinit文件部分内容:

初始化设置流程:

设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数,并以之设定主机名;
打印文本欢迎信息:
激活SELinux和udev;
挂载/etc/fstab文件中定义的其他文件系统;
激活swap;
检测根文件系统,并以读写方式重新挂载;
设置系统时钟;
根据/etc/sysctl.conf设置内核参数;
激活LVM和RAID设备;
加载额外设备的驱动程序;
清理操作;

七、启动内核模块:

依据/etc/modprobe.d/*.conf文件装载内核模块:

八、执行指定运行级别的脚本程序:

/etc/rc.d/rc#.d/:启动指定的默认级别的默认为启动的服务,停止指定的级别下默认为关闭的服务;

查看/etc/rc.d/rc3.d/目录:

1、目录中为链接文件指向服务脚本:

S##:默认启动的服务;
K##:默认停止的服务;
##:01-99,数字越小,越优先启动或关闭;
先启动的后关闭(自动解决依赖关系);

2、chkconfig:创建或改变连接文件;

#chkconfig --add SRV_SCRIPT:创建;
#chkconfig --del SRV_SCRIPT:删除;
#chkconfig SRV_SCRIPT {on|off}:开机自动{启动|关闭};
默认为2345级别;
--level######

脚本如果期望能够被chkconfig命令使用,要在脚本中添加如下行:
#chkconfig:- 85 15
-:当此脚本由chkconfig控制时,默认哪些级别就是开启的;
85:启动优先级;
15:关闭优先级;

九、/etc/rc.d/rc.local:

是一个脚本,通常为系统启动完成的最后运行一个脚本;

定义一些组合键的功能:通常是Ctrl+Alt+Delete;

初始化字符终端;

如果有需要,启动图形终端;

十、/bin/logon:

登陆程序:显示登陆提示符,等待用户输入username和passwd;

原文:

http://www.lxway.com/400826.htm

转载于:https://blog.51cto.com/machenxi/1843022

linux启动顺序详解相关推荐

  1. vxWorks/BootROM Imageq启动顺序详解

    vxWorks/BootROM Imageq启动顺序详解 VxWorks image     分为在ROM中运行和在RAM中运行两种,两者启动顺序的区别在于sysInit()函数的调用,该函数在RAM ...

  2. [转载] Linux启动过程详解-《别怕Linux编程》之八

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  3. (转载)Linux启动过程详解

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  4. Linux启动过程详解

    一.Linux系统启动流程 Linux系统启动流程图 1.1)Linux系统启动流程详细说明 1.1.1)加载BIOS 当你打开计算机电源,计算机会首先加载基本输入输出系统(Basic Input O ...

  5. 嵌入式linux启动过程详解

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  6. Linux 启动过程详解

    随着Linux的应用日益广泛,特别是在网络应用方面,有大量的网络服务器使用Linux操作系统.由于Linux的桌面应用和Windows相比还有一定的差距,所以在企业应用中往往是Linux和Window ...

  7. linux 启动流详解

    内核的功能: 进程管理: task_struct,scheduler 内存管理 I/O管理:中断及中断处理 文件系统: ext3,ext4,reiserfs,xfs 驱动程序: 安全相关: SELin ...

  8. 引导linux为什么要用实模式,Linux引导过程与故障排除|第1章:Linux启动流程详解...

    1. BIOS 当你按下电源键的那一刻起,计算机的的启动就开始了.Intel x86 系列的 CPU 可以分别在 16 位 实模式(Real mode) 和 32 位 保护模式(Protected m ...

  9. Zynq linux启动过程,详解zynq的启动步骤

    本文主要介绍zynq启动过程,主要包括BootROM和FSBL等的执行过程. 硬件启动过程 1. 重新上电或POR复位后进行硬件启动过程 2. 扫描"启动引脚"设置,并存入只读寄存 ...

最新文章

  1. 神经网络早期的感知机模型
  2. 资源分享 | 统计学最全思维导图,附下载链接
  3. keil C 51 strlen库函数使用
  4. Android笔记(三十六) AsyncTask是如何执行的?
  5. 排序算法java实现
  6. 基于java springboot博客交流平台系统设计和实现
  7. python输出1000以内回文数_「答案」python每日一题20201108
  8. Docker容器虚拟化与传统虚拟机比较
  9. 从技术角度分析“抢票软件的加速”,到底有多快?
  10. struts 框架介绍 原理透析 struts概念说明
  11. 干货:完全基于情感词典的文本情感分析
  12. 【2022年更新】手把手教你去除 WinRAR 的弹窗广告
  13. libyuv库简单使用
  14. 中英文自动翻译(有道翻译、彩云小译)
  15. python取反函数_编程语言取反函数
  16. 兴趣点推荐代码_如何解读霍兰德职业兴趣测评结果
  17. 系统安全漏洞及解决方案
  18. Git 修改已提交的 commit 信息
  19. 关键路径问题java_关键路径问题课程设计Java
  20. Ansys-静力学分析-薄壁圆筒学习心得

热门文章

  1. ArrayList和LinkedList的add(E)性能秘密
  2. ansible register when: result | succeeded when: item.rc != 0
  3. 从短句到长文,计算机如何学习阅读理解
  4. RabbitMQ详细文档
  5. php函数的实现原理及性能分析
  6. 超郁闷的本地连接故障解决过程!!!
  7. Strongswan — IPSec 的 Linux 软件实现
  8. ETSI GS MEC 012,RNIS API
  9. linux驱动入口函数执行了,probe函数没有执行排查
  10. NR 5G 用户平面协议