Linux启动过程许多人对Linux的启动过程感到很神秘,因为所有的启动信息都在屏幕上一闪而过。
其实Linux的启动过程并不象启动信息所显示的那样复杂,它主要分成两个阶段:1.启动内核。
在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。
2.执行程序init。
装入内核并初始化设备后,运行init程序。
init程序处理所有程序的启动,包括重要系统精灵程序和其它指定在启动时装入的软件。
下面以Red Hat为例简单介绍一下Linux的启动过程。
一、启动内核首先介绍启动内核部分。
电脑启动时,BIOS装载MBR,然后从当前活动分区启动,LILO获得引导过程的控制权后,会显示LILO提示符。
此时如果用户不进行任何操作,LILO将在等待制定时间后自动引导默认的操作系统,而如果在此期间按下TAB键,则可以看到一个可引导的操作系统列表,选择相应的操作系统名称就能进入相应的操作系统。
当用户选择启动LINUX操作系统时,LILO就会根据事先设置好的信息从ROOT文件系统所在的分区读取LINUX映象,然后装入内核映象并将控制权交给LINUX内核。
LINUX内核获得控制权后,以如下步骤继续引导系统:1. LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。
内核映象前面的一些代码完成解压缩。
2. 如果系统中安装有可支持特殊文本模式的、且LINUX可识别的SVGA卡,LINUX会提示用户选择适当的文本显示模式。
但如果在内核的编译过程中预先设置了文本模式,则不会提示选择显示模式。
该显示模式可通过LILO或RDEV工具程序设置。
3. 内核接下来检测其他的硬件设备,例如硬盘、软盘和网卡等,并对相应的设备驱动程序进行配置。
这时,显示器上出现内核运行输出的一些硬件信息。
4. 接下来,内核装载ROOT文件系统。
ROOT文件系统的位置可在编译内核时指定,也可通过LILO 或RDEV指定。
文件系统的类型可自动检测。
如果由于某些原因装载失败,则内核启动失败,最终会终止系统。
二、执行init程序其次介绍init程序,利用init程序可以方便地定制启动其间装入哪些程序。
init的任务是启动新进程和退出时重新启动其它进程。
例如,在大多数Linux系统中,启动时最初装入六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台,因而总是提供六个虚拟登陆控控制台进程。
控制init程序操作的规则存放在文件/etc/inittab中。
Red Hat Linux缺省的inittab文件如下:##inittab This file describes how the INIT process should set up the system in a certain#run-level.###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)#id:3:initdefault:#system initializationsi::sysinit:/etc/rc.d/rc.sysinit10:0:wait:/etc/rc.d/rc 011:1:wait:/etc/rc.d/rc 112:2:wait:/etc/rc.d/rc 213:3:wait:/etc/rc.d/rc 314:4:wait:/etc/rc.d/rc 415:5:wait:/etc/rc.d/rc 516:6:wait:/etc/rc.d/rc 6#Things to run in every runlevelud:once:/sbin/update#Trap CTRL-ALT-DELETEca::ctrlaltdel:/sbin/shutdown -t3 -r now#When our UPS tells us power has failed,assume we have a few minutes ofpower left.Schedule a#shutdown for 2 minutes from now.#This does,of course,assume you have powered installed and your UPSconnected and working#correctly.pf::powerfail:/sbin/shutdown -f -h 2 "Power Restored;Shutdown Cancelled"#Run gettys in standard runlevels1:12345:respawn:/sbin/minggetty tty12:2345:respawn:/sbin/minggetty tty23:2345:respawn:/sbin/minggetty tty34:2345:respawn:/sbin/minggetty tty45:2345:respawn:/sbin/minggetty tty56:2345:respawn:/sbin/minggetty tty6#Run xdm in runlevel 5x:5:respawn:/usr/bin/X11/xdm -nodaemonLinux有个运行级系统,运行级是表示系统当前状态和init应运行哪个进程并保持在这种系统状态中运行的数字。
在inittab文件中,第一个项目指定启动时装入的缺省运行级。
上例中是个多用户控制台方式,运行级为3。
然后,inittab文件中每个项目指定第二个字段的项目用哪种运行级(每个字段用冒号分开)。
因此,对运行级3,下列行是相关的:13:3:wait:/etc/rc.d/rc 31:12345:respawn:/sbin/minggetty tty12:2345:respawn:/sbin/minggetty tty23:2345:respawn:/sbin/minggetty tty34:2345:respawn:/sbin/minggetty tty45:2345:respawn:/sbin/minggetty tty56:2345:respawn:/sbin/minggetty tty6最后六行建立Linux提供的六个虚拟控制台。
第一行运行启动脚本/etc/rc.d/ rc 3;这将运行目录/etc/rc.d/rc3.d中包含的所有脚本,这些脚本表示系统初始化时要启动的程序。
一般来说,这些脚本不需要编辑或改变,是系统缺省的。
Linux启动流程从用户打开电源到用户可以登录的这短短的一段时间内,Red Hat Enterprise Linux到底都作了哪些事情,只有知道了这些事情,用户在以后的使用过程中,如果出现了一些问题,我们可以借助这些过程来为我们排除一些故障。
Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段,如图1:BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作主要是侦测电脑的周边配套设备是否工作正常,如CPU 的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等主要是为了检查这些设备在开机的时候是否能通过检测,如果能通过检测,说明电脑可以正常的工作。
------------------------------载入启动程序BIOS自检完成后,BIOS会根据用户设置的启动顺序来由那个设备来启动电脑的操作系统,这个设备一般是硬盘。
也就是进入到硬盘的MBR区域,这个区域中的有512个字节的大小,其中前446个字节中保存的程序是选择启动分区,也就是电脑由那个硬盘分区来载入开机的程序。
那么在这个446个字节的空间中保存的就是启动程序,然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub程序。
如图02所示:grub程序的这个配置文件是保存在:/boot/grun/grub.conf这个文件中,如果修改完这个文件后,设置会立刻生效。
现在来看看这个文件的内容以及语法:如图03所示:使用cat /boot/grub/grub.conf,就会出现这个文件的内容,最前面是注释。
可以将这个文件逻辑上分为两个部分,第一个部分是基本设定,第二个部分是区分开多个操作系统的设定。
第一个部分中的defaule=0,是指第一组操作系统开机。
如果有两组操作系统的开机设定,而defaule=1,那么预设使用第二组操作系统开机。
所谓第一组和第二组程序就是指的是title开始的部分,这里是区分操作系统的部分。
如何知道要使用那一个系统呢,可以看到在title开始的部分的下一行有:root (hd0,0)hd0,表示第一个硬盘0:指的是硬盘的第一个分区,在括号中的那个0和defaule=0是一一对应的。
这就可以知道是启动的是那一个操作系统。
timeout=5是指进入GRUB的画面后,会有5秒的时间让使用者选择使用那个操作系统开机。
如果在这个时间没有作出选择那么,那么就使用defaule的设定splashimage=是开机使用的背景图案。
hd0,表示第一个硬盘0:指的是硬盘的第一个分区,和上面的一样,/grub/splash.xpm.gz就是开机使用的背景图案的文件名称hiddenmenu指令是隐藏开机的选单。
title:开机选单的标题名称。
root (hd0,0):0表示下面要介绍的档案位于那个目录中。
(hd0,0)同样是指/boot目录kernel:存放内核的位置,由于(hd0,0)指的是/boot目录,所以这个文件在boot目录中。
ro root=LABEL=/就是设根目录的位置,ro表示read only,所以有这行的设定,才能读取根目录。
rhgb:red hat图形界面启动,取代以前的文本界面。
如果要使用文本界面的形式启动,只要将rhgb删除即可。
quite:在开机过程中不要显示错误的信息。
如果要显示错误信息,只要删除quite即可。
initrd:将initrd映像文件加载到内存。
这个文件里面存放的都是驱动程序。
--------------------------------------加载内核正确的启动了启动程序之后,接下来的工作就是就会载入操作系统的内核(Kernel)。