分类: LINUX
2014-03-02 17:47:36
linux启动流程
1.加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动设备
启动整个系统就得要让系统去加载BIOS,并通过BIOS程序去加载CMOS的信息,取得这些信息后,BIOS还会进行开机自检。然后开始执行硬件检测的初始化,之后在定义出可启动的设备顺序,接下来就会开始进行启动设备的数据读取。
2.读取并执行第一个启动设备内MBR的boot loader(即是grub,spdisk)
boot loader的主要功能:提供菜单,用户可以选择不同的启动选项,这也是多重引导的重要功能;加载内核模块文件,直接指向可启动的程序区段来开始操作系统;转交其他loader,将引导装载功能转交给其他loader负责。
3.依据boot loader的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序
内核会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测到的硬件信息,也就是说,内核从此接管BIOS后的工作。虚拟文件系统,一般使用文件名为/boot/initrd,通过该程序来加载启动过程中所需的内核模块,通常这些模块是USB,RAID,LVM,SCSI等文件系统与磁盘接口的驱动程序
4.在硬件驱动成功后,Kernel会主动调用init进程,而init会取得run-level信息
/sbin/init最主要的功能就是准备软件执行的环境,包括系统的主机名,网络设置,语系处理,文件系统格式及其他服务的启动。init的配置文件为/etc/initable
init的处理流程:1.先取得runlevel即默认执行等级的相关等级。
2.使用/etc/rc.d/rc.sysinit进行系统初始化
3.设置好ctrl+alt+del组合键功能
4.设置不断电系统的pf,pr两种机制
5.启动mingetty的6个终端机
6.最终以/etc/X11/perfdm-nodaemon 启动图形界面
5.init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(如网络、时区等)
rc.sysinit主要工作:1.取得网络环境与主机配置
2.测试与挂载内存设备/proc及USB设备/sys
3.决定是否启动selinux
4.启动系统的随机数生成器
5.设置终端机字体
6.设置启动过程中的欢迎界面
7.设置系统时间与时区设置
8.设置设备的检测与PnP参数的测试
9.用户自定义模块的加载(用户可以在/etc/sysconfig/modules/*.modules中加入自定义的模块,则在此时会被加载到系统中)
10.加载内核的相关配置(读取/etc/sysctl.conf这个文件的设置值)
11.设置主机名与初始化电源管理模块(ACPI)
12.初始化软件磁盘阵列:主要是通过/etc/mdadm.conf来设置好的
13.初始化LVM的文件系统功能
14.以fsck检验磁盘文件系统:会进行filesystem check
15.进行磁盘配额quota的转换(非必要)
16.重新以可读写模式挂载系统磁盘
17.启动quota功能:所以我们不需要自定义quotaon的操作
18.启动系统伪随机数生成器
19.清除启动过程中的临时文件
20.将启动相关信息加载/var/log/dmesg
6.init执行run-level的各个服务的启动(script方式)
通过外部第一号参数$1来取得第一号参数($1)来取得想要执行的脚本目录,即由/etc/rc.d/rc 5可以取得/etc/rc5.d/这个目录来准备处理相关的脚本程序。
找到/etc/rc5.d/K??开头的文件,并进行”/etc/rc5.d/K??* stop”的操作
找到/etc/rc5.d/S??*开头的文件,并进行”/etc/rc5.d/S??* start”的操作
7.init执行/etc/rc.d/rc.local
8.init执行终端机模拟程序mingetty来启动login进程,最后等待用户登录