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

来源:互联网 发布:淘宝大号购买 编辑:程序博客网 时间:2024/05/11 22:18

这段时间在学校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来进行系统的初始化流程,启动用户空间,定义系统启动级别等等。

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



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, <miquels@drinkel.nl.mugnet.org>#               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)# <span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">id:5:initdefault:<span style="white-space: pre;"></span>//设置系统默认运行级别</span></span># System initialization.<span style="color:#ff0000;">si::sysinit:/etc/rc.d/rc.sysinit<span style="white-space:pre"></span>//指定系统初始化使用脚本</span><span style="color:#ff0000;">l0:0:wait:/etc/rc.d/rc 0</span><span style="color:#ff0000;">l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6<span style="white-space:pre"></span>//这7行中都有一个关键字wait,表示一旦切换或者启动至该级别,就会让相应目录下所有以S开头的服务启动,并结束所有以K开头的服务</span># Trap CTRL-ALT-DELETE<span style="background-color: rgb(204, 204, 204);"><span style="color:#ff0000;">ca::ctrlaltdel:/sbin/shutdown -t3 -r now<span style="white-space: pre;"></span>//定义同时按下ctrl+alt+del组合键的操作为3分钟之后重启系统</span></span># 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.  <span style="color:#ff0000;">pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"<span style="white-space:pre"></span>//定义UPS电源相关选项,一般不需要设置</span># If power was restored before the shutdown kicked in, cancel it.<span style="color:#ff0000;">pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"<span style="white-space:pre"></span>//定义电源选项,一般不需要设置</span># Run gettys in standard runlevels<span style="color:#ff0000;">1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6<span style="white-space:pre"></span>//以上6行定义了是一种虚拟登录接口,关键字respawn表示一旦该服务别关闭,马上重启。这也是为什么我们一旦登录出来系统,马上又可以登录进去,因为这个登录服务又被启动了</span># Run xdm in runlevel 5<span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">x:5:respawn:/etc/X11/prefdm -nodaemon<span style="white-space: pre;"></span>//我现在还不太清楚该项代表的含义,有知道的朋友麻烦跟我说一下,非常感谢。</span></span>


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

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

a.设定主机名

b.激活selinux和udev

c.挂载文件系统

d.激活swap

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

f.设置内核参数

g.读取系统时钟

h.键盘映射

i.加载额外的驱动程序


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


0 0
原创粉丝点击