linux启动流程详解
系统启动流程
加载BOIS的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置
在个人计算机架构下,启动整部系统,首先要让系统去加载BIOS(Basic Input Output System),并透过BIOS程序去加载CMOS资讯,并且藉由CMOS内的配置值取得主机的各项硬件配置。
BIOS还会进行启动自我测试(power-on self test,POST)。然后开始运行硬件侦测的初始化,并配置PnP装置,之后再定义出可启动的装置顺序,开始进行启动装置的数据读取。
由于系统软件大多放置在硬盘中,所以BIOS会指定启动的装置好让我们可以读取磁碟中的操作系统核心文件。
需要一个启动管理程序来处理文件加载的问题,因此这个启动管理程序就被成为Boot Loader.
读取并运行第一个启动装置内MBR的boot loader
loader的主要功能是认识操作系统的文件格式并据以加载核心到主内存中去运行。
boot loader主要功能:
提供菜单:使用者可以选择不同的启动项目,这也是多重启动的重要功能(支持双系统或者多系统)
加载核心文件:直接指向可启动的程序区段来开始操作系统
转交其他loader:将启动管理功能转交给其他的loader负责
windows:windows的loader不具备控制权转交功能,因此安装双系统时只能先装windows再装linux了,微软是不是有些霸道和蛋疼!
依据boot loader的配置加载kernel,kernel会开始侦测硬件和加载驱动程序
boot loader的管理而开始读取核心文件后,接下来,linux就会将核心解压到主内存当中,并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、cpu、网络卡、声卡等等。此时linux核心会以自己的功能重新侦测一次硬件,也就是说核心此时开始接管BIOS后的工作。
在硬件驱动成功后,kernel会主动呼叫init程序,而init会取得run-level咨询
在核心加载完毕、进行硬件侦测与驱动程序加载后,此时你的主机硬件应该是已经准备就绪了,此时核心会主动呼叫第一支程序,就是/sbin/init。查看init的pid为1./sbin/init最主要的功能是准备软件运行环境,包括系统的主机名称,网络配置,语系处理、文件系统格式及其他服务的启动。而所有的动作都会透过init的配置档,亦即是/etc/inittab来规划,而inittab内还有一个很重要的配置项目,那就是默认的runlevel(启动运行等级)。
run level等级:
0 - halt(系统直接关机)
1 - single user mode(单人维护模式,用在系统出问题时的维护)
2 - mulit-user (类似于runlevel 3,但无nfs服务)
3 - full multi-user mode(完整含有网络功能的纯文字模式)
4 - unused(系统保留功能)
5 - X11(与runlevel 3类似,但加载使用 x window)
6 - reboot(重新启动)