且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

加载内核并执行init程序

更新时间:2022-10-02 23:13:39

核心的加载
由boot loader管理而开始读取核心档案后,linux将核心解压到主存储器中,并利用核心的功能,开始与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等。

虚拟文件系统(Initial RAM Disk )一般使用档名为/boot/initrd  它可以通过boot loader来加载到内存中,然后此档案会被解压缩并在内存中仿真成一个根目录,且此仿真在内存中的文件系统能提供一个可执行程序,通过此程序来加载开机过程中所最需要的核心模块,通常为USB、RAID、LVE、SCSI等文件系统与磁盘接口的驱动程序。载入完成后,重新呼叫/sbin/init来开始后续的正常开机流程。
根目录在特殊的磁盘接口 (USB, SATA, SCSI) , 或者为 LVM, RAID 等等,会需要 initrd。
如为IDE接口,并使用默认的ext2/ext3文件系统,不需要initrd也可以正常开机。

核心加载完成后,主机开始正确动作。
开始执行系统的第一支程序 /sbin/init
此程序主要功能是准备软件执行的环境,包括系统的主机名,网络设定,语系处理,文件系统格式及其它服务的启动等。


所有的动作都会透过init的配置文件/etc/inittab来规划,inittab里设置有围住的runlevel.
rnulevel 介绍
0-halt
1-single user mode            单人维护模式,用在系统故障时维护。
2-Multi-user,without NFS      类似runlevel3,但无NFS服务
3-Full molti-user mode        完整含有网络功能的纯文本模式
4-unused                      系统保留功能
5-X11                         与runlevel3类似,但加载X WINDOW
6-reboot                      重新启动

init 的处理流程
1.先取得runlevel
2.使用/etc/rc.d/rc.sysinit进行系统初始化
3.由于runlevel 是5,因此只进行 l5:5:wait:/etc/rc.d/rc 5 
4.设定好 ctrl + alt + del组合键功能
5.设定不断电系统的pf.pr两种机制
6.启动mingetty的六个终端机 (tty1~tty6)
7.启动图形窗口

init 处理系统初始化流程 (/etc/rc.d/rc.sysinit)
在/etc/inittab中, si::sysinit:/etc/rc.d/rc.sysinit    表示开始加载各项系统服务前需先配置好整个系统环境。这里就是自用/etc/rc.d/rc.sysinit 这个shell script来进行设定。
rc.sysinit中的很多预设配置文件都在 /etc/sysconfig/ 中.
 

rc.sysinit主要工作:
1.取得网络环境与主机类型
读取网络配置文件/etc/sysconfig/network ,获得主机名,网关等网络设置
2.测试与挂载内存装置/proc 及USB装置/sys  
3.决定是否启动SELinux 
4.启动系统的随机数生成器(密码加密演算)
5.设定console字形
6.设定显示于开机过程中的欢迎画画 (test banner)
7.设定系统时间 与时区 /etc/sysconfig/clock
8.接口设备的侦测与PNP参数测试
9.用户自定义模块的加载   /etc/sysconfig/modules/*.modules
10.加载核心的相关设置 /etc/sysctl.conf
11.设定主机名与初始化电源管理模块ACPI
12.初始化软件磁盘阵列 /etc/mdadm.conf
13.初始化LBM文件系统功能 
14.以fsck检验磁盘文件系统,  进行filesystem check
15.进行磁盘配额quota的转换
16.重新以可读写模式挂载系统磁盘
17.启动quota功能,
18.启动系统虚拟随机数生成器pseudo-random
19.清除开机过程中的临时文件
20.将开机相关信息加载到/var/log/dmesg

用户自定义开机启动程序 /etc/rc.d/rc.local
是在其它的init scripts执行完后才执行,类似WINDOWS 的启动

 .本文转自  还不算晕  51CTO博客,原文链接:http://blog.51cto.com/haibusuanyun/751250