linux系统启动流程
2015-09-03 08:11
429 查看
linux CentOS 6的启动流程
linux系统的结构可以分为三个部分:
1.kernel+rootfs(内核与根文件系统)
kernel主要负责进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能等
rootfs:面向用户的根文件系统
2.库:函数集合,编译好的二进制文件,用于在链接阶段同目标代码一起生成可执行文件,不能直接使用,只能用来调用
procedure: 过程调用
函数调用:必须要有返回值即结果
3.程序:依赖于配置文件的可执行应用
接下来我们开始介绍系统的启动流程:
首先我们大概了解一下启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端
第一步:POST(Power-on self test):加电自检,其中包括BIOS(Basic Input and Output System)
具体自检项目主要为系统的硬件:CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等
第二步:BOOT Sequence(boot 引导次序):
按次序查找各引导设备,第一个由引导程序的设备即为本次启动用到的设备,找到设备后,会加载主引导记录MBR,大小为512个字节,主要储存预启动信息,分区表信息
注:MBR概括:
bootloader: 主引导记录,占用446位
Partition table:文件系统分区表,占用64位
Magic number:磁盘的有效标志55AA,16进制检测是否存在,占用2位
所以对于磁盘来讲MBR所占用的字节为446+64+2=512位,位于第一块磁盘的前512个字节中,系统BIOS检测到磁盘里MBR以后即找到引导grub,grub就于MBR中
第三步:boot loader引导装载程序,
bootloader为操作系统内核运行的一小段程序,通过初始化硬件设备,建立内存空间的映射图,从而将软硬件环境初始化完成,boot loader有若干种,其中grub,Lilo和spfdisk是常见的boot loader
这里我们选择grub,环境初始化成功后,系统读取内存中的grub配置信息即/boot/grub/grub.conf
第四步:内核初始化(kernel):
根据grub设定的内核映像所在路径,系统读取内存映像并进行解压缩操作此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置于内存中,并调用start_kernel1()函数来启动一系列初始化函数并初始化各种设备,完成linux核心环境的建立,至此,linux内核建立完成,基于linux程序可以运行
第五步:通过基于用户层的init来设置运行级别:
内核加载后,第一个运行的程序为/sbin/init文件,该文件会读取/etc/inittab文件以完成初始化工作,其中包括设定运行系统的级别:
运行级别:为了系统的运行或维护等应用目的而设定
由0-6,7个级别,分别如下
0:关机
1:单用户模式,(root,无须登陆)singel,维护模式
2:多用户模式,会启动网络功能,但不会启动NFS,维护模式
3: 多用户模式,正常模式:默认为文本界面
4:预留界别;可同3级别
5:多用户模式,正常模式,图形界面;
6:重启
格式为:id:3:initdefault: 意思为当前系统运行级别为3级别
默认级别为3和5
切换级别:init #(#为以上数字级别)
设定完运行级别后,linux系统将执行第一个用户层文件就是rc.sysinit脚本文件,其中包括网络配置,启动swap,PATH等一些主要程序
第七步: 启动内核模块
具体依据/etc/modules.conf文件或/etc/modules.d目录下文件来装载内核模块
第八步:
执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中相对应的文件来装载内核模块
[root@www boot]# cd /etc/rc.d/
[root@www rc.d]# ls
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit
rc 0 --> 意味着将读取/etc/rc.d/rc0.d/的文件:
K*: K##*: #运行次序:数字越小,越先运行
S*:S##*:##运行次序,数字越小,越先运行
这个文件主要为系统初始化进入工作后,用户可以自定义个性化的一步
第十步:执行/bin/login程序,进入登陆状态
此时,系统就到达了登陆用户界面,输入uername和password即可登陆系统
启动流程到此结束,,启动流程中间会有好多复杂的函数库调用,这里以后慢慢补充吧!累了。。。。
本文出自 “开源盛世” 博客,请务必保留此出处http://zhaohongfei.blog.51cto.com/6258685/1691048
linux系统的结构可以分为三个部分:
1.kernel+rootfs(内核与根文件系统)
kernel主要负责进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能等
rootfs:面向用户的根文件系统
2.库:函数集合,编译好的二进制文件,用于在链接阶段同目标代码一起生成可执行文件,不能直接使用,只能用来调用
procedure: 过程调用
函数调用:必须要有返回值即结果
3.程序:依赖于配置文件的可执行应用
接下来我们开始介绍系统的启动流程:
首先我们大概了解一下启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端
第一步:POST(Power-on self test):加电自检,其中包括BIOS(Basic Input and Output System)
具体自检项目主要为系统的硬件:CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等
第二步:BOOT Sequence(boot 引导次序):
按次序查找各引导设备,第一个由引导程序的设备即为本次启动用到的设备,找到设备后,会加载主引导记录MBR,大小为512个字节,主要储存预启动信息,分区表信息
注:MBR概括:
bootloader: 主引导记录,占用446位
Partition table:文件系统分区表,占用64位
Magic number:磁盘的有效标志55AA,16进制检测是否存在,占用2位
所以对于磁盘来讲MBR所占用的字节为446+64+2=512位,位于第一块磁盘的前512个字节中,系统BIOS检测到磁盘里MBR以后即找到引导grub,grub就于MBR中
第三步:boot loader引导装载程序,
bootloader为操作系统内核运行的一小段程序,通过初始化硬件设备,建立内存空间的映射图,从而将软硬件环境初始化完成,boot loader有若干种,其中grub,Lilo和spfdisk是常见的boot loader
这里我们选择grub,环境初始化成功后,系统读取内存中的grub配置信息即/boot/grub/grub.conf
第四步:内核初始化(kernel):
根据grub设定的内核映像所在路径,系统读取内存映像并进行解压缩操作此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置于内存中,并调用start_kernel1()函数来启动一系列初始化函数并初始化各种设备,完成linux核心环境的建立,至此,linux内核建立完成,基于linux程序可以运行
第五步:通过基于用户层的init来设置运行级别:
内核加载后,第一个运行的程序为/sbin/init文件,该文件会读取/etc/inittab文件以完成初始化工作,其中包括设定运行系统的级别:
运行级别:为了系统的运行或维护等应用目的而设定
由0-6,7个级别,分别如下
0:关机
1:单用户模式,(root,无须登陆)singel,维护模式
2:多用户模式,会启动网络功能,但不会启动NFS,维护模式
3: 多用户模式,正常模式:默认为文本界面
4:预留界别;可同3级别
5:多用户模式,正常模式,图形界面;
6:重启
格式为:id:3:initdefault: 意思为当前系统运行级别为3级别
默认级别为3和5
切换级别:init #(#为以上数字级别)
[root@www ~]# init 3# [root@www ~]# runlevel ; who -r 4 3 #上次使用级别为4 ,当前级别为3 run-level 3 2015-09-02 01:30 last=4查看当前运行级别:runlevel ; who -r
[root@www ~]# runlevel ; who -r N 3 run-level 3 2015-09-01 16:59第六步: init进程执行/etc/rc.d/rc.sysinit文件
设定完运行级别后,linux系统将执行第一个用户层文件就是rc.sysinit脚本文件,其中包括网络配置,启动swap,PATH等一些主要程序
[root@www rc.d]# vim rc.sysinit # Taken in part from Miquel van Smoorenburg's bcheckrc. # HOSTNAME=$(/bin/hostname) #主机名 set -m if [ -f /etc/sysconfig/network ]; then . /etc/sysconfig/network #加载网卡信息 fi if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then HOSTNAME=localhost fi if [ ! -e /proc/mounts ]; then #挂载伪文件系统 mount -n -t proc /proc /proc mount -n -t sysfs /sys /sys >/dev/null 2>&1 fi if [ ! -d /proc/bus/usb ]; then #检测是否有sub文件系统,否则创建挂载 modprobe usbcore >/dev/null 2>&1 && mount -n -t usbfs /proc/bus/usb /proc/bus/usb else mount -n -t usbfs /proc/bus/usb /proc/bus/usb fi #remount /dev/shm to set attributes from fstab #669700 mount -n -o remount /dev/shm >/dev/null 2>&1 #remount /proc to set attributes from fstab #984003 后边省略。。。从上边我们可以看到rc.sysinit脚本加载的程序有很多
第七步: 启动内核模块
具体依据/etc/modules.conf文件或/etc/modules.d目录下文件来装载内核模块
第八步:
执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中相对应的文件来装载内核模块
[root@www boot]# cd /etc/rc.d/
[root@www rc.d]# ls
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit
rc 0 --> 意味着将读取/etc/rc.d/rc0.d/的文件:
K*: K##*: #运行次序:数字越小,越先运行
S*:S##*:##运行次序,数字越小,越先运行
[root@www rc.d]# ls init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit [root@www rc.d]# cd rc0.d/ [root@www rc0.d]# ls K01smartd K50netconsole K80kdump K89rdisc K05atd K60crond K83bluetooth K90network K05wdaemon K60nfs K83nfslock K92ip6tables K10cups K69rpcsvcgssd K83rpcgssd K92iptables K10psacct K72autofs K84NetworkManager K95firstboot K10saslauthd K73winbind K84wpa_supplicant K99cpuspeed K15htcacheclean K74acpid K85mdmonitor K99lvm2-monitor K15httpd K74haldaemon K85messagebus K99rngd K16abrt-ccpp K74ntpd K87irqbalance K99sysstat K16abrtd K75blk-availability K87restorecond S00killall K25sshd K75netfs K87rpcbind S01halt K30postfix K75ntpdate K88auditd K30spice-vdagentd K75quota_nld K88rsyslog K50dnsmasq K75udev-post K89portreserve第九步: 执行/etc/rc.d/rc.local文件
这个文件主要为系统初始化进入工作后,用户可以自定义个性化的一步
第十步:执行/bin/login程序,进入登陆状态
此时,系统就到达了登陆用户界面,输入uername和password即可登陆系统
启动流程到此结束,,启动流程中间会有好多复杂的函数库调用,这里以后慢慢补充吧!累了。。。。
本文出自 “开源盛世” 博客,请务必保留此出处http://zhaohongfei.blog.51cto.com/6258685/1691048
相关文章推荐
- CentOS下SVN安装及配置图解教程
- 在 Ubuntu 中如何安装或升级 Linux 内核到4.2
- 图解Linux命令之--tr命令
- linux kernel编译产生的vmlinux Image zImage之间的关系
- Linux学习之grep篇
- centos7关闭防火墙
- hadoop学习(一)-- centos 64位编译安装hadoop
- linux 常用命令记录
- 在linux中添加ftp用户,并设置相应的权限
- Linux下解压rar格式的压缩文件
- linux,windows双系统共享鼠标键盘
- grep与正则表达式
- Linux串口编程教程(二)——终端IO介绍
- Linux串口编程教程(三)——串口编程详解
- linux循环之应用_v1
- linux命令之awk_v1
- centos上安装maven
- linux常用查看系统信息的命令总结
- Linux下gcc编译C程序指令小结
- Linux命令备忘实例(3)——数学运算