加载内核并执行init程序

简介:

核心的加载
由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

相关文章
|
数据建模 C++ 容器
调试实战 —— dll 加载失败之全局变量初始化篇
调试实战 —— dll 加载失败之全局变量初始化篇
|
3月前
|
调度 项目管理
内核初始化的过程
【9月更文挑战第13天】内核启动始于函数 `start_kernel()`,该函数位于 `init/main.c` 文件中,包含各类初始化函数。操作系统首先创建 0 号进程 `init_task`,随后初始化中断处理、内存管理、调度模块及虚拟文件系统 VFS。
|
4月前
|
设计模式 Java 数据库连接
|
C语言 C++
【C++】 --- 写个函数在main函数执行前先运行
【C++】 --- 写个函数在main函数执行前先运行
149 0
|
7月前
|
存储 安全 Linux
Linux sync 指令的作用
Linux sync 命令的作用是确保所有未写入磁盘的数据被立即同步至物理存储介质上,以保护文件系统的一致性和防止意外关机时的数据丢失。虽然 sync 在日常交互式使用中可能不常直接调用,但许多高级操作或脚本中会包含此命令来保证数据安全。
188 0
|
网络安全
服务器初始化及内核调优脚本
服务器初始化及内核调优脚本
|
Linux
LINUX下用C调用系统命令,并读取执行结果的代码
LINUX下用C调用系统命令,并读取执行结果的代码
124 0
|
Java 编译器 程序员
从JVM 源码看init和clinit到底什么区别
从JVM 源码看init和clinit到底什么区别
157 0
从JVM 源码看init和clinit到底什么区别
|
Linux
linux网络驱动初始化module_init函数跟踪
module_init函数对做驱动开发的同学是在太熟悉了,但是关于底层的知识可能大家有些不愿去了解,而其中知识对于网络初始化也直接相关,所以先将此分享。 在驱动程序中有module_init函数,该函数定义在文件 include/linux/module.h中(以前好像在include/linux/init.h中),如下。
2360 0