Linux系统裁剪(1)之Linux系统启动流程

这段时间在学校Linux系统内核的相关知识,本来想要学一点写一点日记,但是后来发现这段知识对我来说比较抽象,所以花了两三天的时间才搞明白,又反复裁剪实验了数十次,现在终于可以在半小时之内完成系统裁剪,与模块的装载卸载等操作。现在就总结一下如何只使用Linux内核来制作一个小型的操作系统,当然在此之前我需要先总结一下Linux系统的启动流程。

1.Linux系统启动流程

POST(加电自检)——>BIOS(Boot Sequence)——>MBR(BootLoader(前446字节):一般分阶段1,阶段1.5以及阶段2,其中阶段1,即stage1是存放在MBR中,stage1.5和stage2都是存储在/boot中的,这个分区是在跟文件系统没有挂载时的另一个独立小分区)——>Kernel(加载vmlinuz和initrd或者initramfs)——>/sbin/init(其配置文件是 /etc/inittab)

过程大概就是,先加电自检,然后CPU会到指定的区域上读取代码,一般是ROM中,自检完成后根据BIOS上的Boot Sequence选择启动设备,然后到该设备上第一个扇区上的446字节中去获取系统需要加载的内核vmlinuz,以及设备的基础驱动文件initrd或者initramfs,这样就可以挂载根文件系统,挂载完成以后就开始初始化系统,即启动第一个用户进程/sbin/init(这也是为什么init的PID永远为1的原因),根据init的配置文件/etc/inittab来进行系统的初始化流程,启动用户空间,定义系统启动级别等等。

如下图(图片选自网络):

Linux系统裁剪(1)之Linux系统启动流程_第1张图片


2.init配置文件的主要作用

init的配置文件是/etc/inittab,主要作用有

a.设置默认运行级别

b.定义运行的初始化脚本(rhel5中是/etc/rc.d/rc.sysinit)

c.启动指定级别下的S开头的服务,关闭以K开头的服务

d.定义CrtlAltDel组合键功能,默认是3分钟后重启系统,一般需要注释掉或者修改掉

e.启动字符终端

f.启动图形终端


3.CentOS5.X的init配置文件

#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, 
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:	//设置系统默认运行级别

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit	//指定系统初始化使用脚本

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6	//这7行中都有一个关键字wait,表示一旦切换或者启动至该级别,就会让相应目录下所有以S开头的服务启动,并结束所有以K开头的服务

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now	//定义同时按下ctrl+alt+del组合键的操作为3分钟之后重启系统

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.  
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"	//定义UPS电源相关选项,一般不需要设置

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"	//定义电源选项,一般不需要设置


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6	//以上6行定义了是一种虚拟登录接口,关键字respawn表示一旦该服务别关闭,马上重启。这也是为什么我们一旦登录出来系统,马上又可以登录进去,因为这个登录服务又被启动了

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon	//我现在还不太清楚该项代表的含义,有知道的朋友麻烦跟我说一下,非常感谢。


4.系统初始化脚本rc.sysinit

该脚本位于/etc/rc.d/rc.sysinit,该脚本的主要功能有:

a.设定主机名

b.激活selinux和udev

c.挂载文件系统

d.激活swap

e.以读写方式重新挂载文件系统

f.设置内核参数

g.读取系统时钟

h.键盘映射

i.加载额外的驱动程序


 5.于是整个系统的启动流程图就如下图所示(图片选自网络

Linux系统裁剪(1)之Linux系统启动流程_第2张图片

你可能感兴趣的:(Linux运维常见问题)