P
ower On --->POST--->boot loader--->Load Kernel----->rc.sysinit--->rc--->rc.local--->启动shell或桌面建立使用环境。1、POST
power on self test ,这个步骤不属于操作系统的启动。开机后,CPU将 存储在 ROM中的BIOS“程序”读入内存,然后执行BIOS程序中各种设备的检测代码检测各种 I/O设备是否工作正常。如果核心设备没有问题,就开始根据BIOS设置中指定的引导 设备,载入引导设备中的MBR 主引导记录。
2、boot loader
由于历史原因,MBR通常比较小,只有446字节。无法容下一个操作系 统,因此牛人们想出了一个办法,就是在MBR中写入一个小程序,用来加载在其它扇 区的操作系统。这个小程序就是boot loader 各种发行版通常使用GRUB做boot loader
3、启动内核
boot loader 根据参数找到位于其它扇区的操作系统后,解压缩vmlinuz到内存中。
内核启动后首先会向BIOS查询硬件信息,然后驱动硬件设备,此时linux尚未挂载任何 文件系统,因此无法载入模块形式的驱动程序并启动init服务。 因此需要挂载文件系统,但在这个阶段,内核还 不是很稳定,如果用读写方式挂载文件,万一内核crash可能会破坏根文件系统上的数 据, 而且根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核会多么庞大、臃肿。
因此引入了 initrd boot loader initialized RAM disk 用来挂载实际的根文件系统,加载驱动并然后再将这个 initrd RAM 磁盘卸载,并释放内存。
linux 发行版必须适应各种不同的硬件架构,将所有的驱动编译进内核是不现实的,initrd 技术是解决该问题的关键技术。Linux 发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的 initrd,无非是一种即可行又灵活的解决方案。
4、启动init服务
最后一步就是从根文件系统上找出并执行init服务。内核会按下列顺序寻找init服务。
1、/sbin/init 2、/etc/init 3、/bin/init 4、如果都找不到,最后就执行/bin/sh。只要某一个步骤找到init,然后内核就去执行该目录的init。如果都找不到,内核会显示kernel panic -not syncing:Attempted to kill init,找到init,就让init服务负责后续初始化系统使用环境的工作。
4.1初始化系统环境
启动init服务时,init服务会读取/etc/inittab文件,根据/etc/inittab中的设置进行初始化系统环境的工作。/etc/inittab中定义了系统在启动过程吕必须依次执行以下几个script。
/etc/rc.d/rc.sysinit:
启动udev和SELinux,
执行sysctl-p 设置内核参数
设置系统时间,加载键盘映射表
启动swap
设置主机名
检查并挂载所有的文件系统
初始化硬件设置包括/etc/modprobe.conf中的模块,ISA PNP 硬件设备、USB设备
启用软RAID与LVM
卸载initrd
初始化串行端口设备如Modem,UPS,Serial Console
清除过期的锁定文件 与IPC文件
重新设备磁盘参数
/etc/rc.d/rc 建立RunLevel环境。
/etc/rc.d/rc.local 启动自定义的服务常用checkconfig配置
执行完三个脚本后,建立用户接口,根据RunLevel启动终端或启动X图形界面。
参考 资料 RHEL系统管理宝典,
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9683969/viewspace-673603/
,如需转载,请注明出处,否则将追究法律责任。