linux启动流程

发布时间:2016-12-8 2:29:37 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"linux启动流程",主要涉及到linux启动流程方面的内容,对于linux启动流程感兴趣的同学可以参考一下。

转载自:http://www.cnblogs.com/scnutiger/archive/2009/09/30/1576795.html [摘至鸟哥的linux私房菜] 今天看了linux启动相关的内容,把主要的部分记录如下。 linux的基础启动流程 1. 加载BIOS的硬件信息,并获取第一个启动设备的代号。 2. 读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。 3. 加载操作系统的核心信息,核心开始解压,并尝试驱动所有的硬件设备。 4. 核心执行init程序并获得运行信息。 5. init执行/etc/rc.d/rc.sysinit文件。 6. 启动核心的外挂模块(/etc/modprobe.conf)。 7. init执行运行的各个批处理文件(Script) 8. init执行/etc/rc.d/rc.local文件。 9. 执行/bin/login程序,等待用户登录。 10. 登录之后开始以shell控制主机。 1. linux核心的引导 操作系统的核心是放在文件系统中的,要想正确加载核心就必须提前识别文件系统。系统刚启动的时候,就需要通过引导加载程序(即lilo、grub、spfdisk等)来识别文件系统,引导核心。要想加载linux的核心就必须能识别linux的文件系统,要加载windows核心就必须能识别windows文件系统。而grub是同时支持linux和windows的。但windows的加载程序并不支持linux文件系统,所以在多重启动设置的时候,总是要先装windows而后装Linux。 核心文件在哪里呢?一般来说,它会放在/boot里,并且取名为/boot/vmlinuz。 在加载核心的过程中,必须知道,系统只会“载入根目录”,并且是以只读方式载入的。有时为了让某些功能可以用文件的方法来读取,有的系统在启动的时,会建立虚拟盘(ramdisk),这就需要使用initrd以及linuxrc了。在加载核心的时候,一起加载initrd的映像文件(boot/initrd-xxxx.img),并利用linuxrc(在initrd的映像文件内)程序来加载模块。在核心驱动外部硬件的工作完成之后,initrd所建立的虚拟盘就会被删除。 2. 第一个程序init的加载和runlevel设置 在核心加载完成之后,系统就准备好了,等待程序的执行。整个linux系统中,第一个执行的程序就是“/sbin/init”。init程序做的工作相当多,除了利用设置文件“/etc/inittab”来获取运行等级之外,还会通过运行等级的设置值启动不同的服务项目。运行等级是指linux通过设置不同等级来规定系统用不同的服务来启动,让linux的使用环境不同。 "/etc/inittab"中有这么一句"si::sysinit:/etc/rc.d/rc.sysinit",表明系统需要主动使用"rc.sysinit"这个shell脚本来设置系统环境。但这个文件的文件名在各个版本中是不一样的,需要自行查看确认。  1 [[email protected] ~]#vi /etc/inittab  2 # 设置系统启动默认的运行等级设置项目  3 id:3:initdefault:  4   5 # 开始启动运行等级的服务前,使用检测与初始化系统环境的设置文件:  6 si::sysinit:/etc/rc.d/rc.sysinit  7   8 # 7个不同运行等级需要启动的服务的脚本放置位置路径:  9 10:0:wait:/etc/rc.d/rc 0 10 11:1:wait:/etc/rc.d/rc 1 11 12:2:wait:/etc/rc.d/rc 2 12 13:3:wait:/etc/rc.d/rc 3 13 14:4:wait:/etc/rc.d/rc 4 14 15:5:wait:/etc/rc.d/rc 5 15 16:6:wait:/etc/rc.d/rc 6 16  17 # 是否运行按下[ctrl]+[alt]+[del]就重新启动的设置项目: 18 ca::ctrlatdel:/sbin/shutdown -t3 -r now 19  20 # 本机终端启动的个数: 21 1:2345:respawn:/sbin/mingetty tty1 22 2:2345:respawn:/sbin/mingetty tty2 23 3:2345:respawn:/sbin/mingetty tty3 24 4:2345:respawn:/sbin/mingetty tty4 25 5:2345:respawn:/sbin/mingetty tty5 26 6:2345:respawn:/sbin/mingetty tty6 27  28 # 在X Window(运行级别5)环境下启动脚本设置项目 29 x:5:once:/etc/X11/prefdm -nodaemon 30  3. init处理系统的初始化流程(/etc/rc.d/rc.sysinit) (1)获取网络环境与主机类型。首先会读取网络环境设置文件"/etc/sysconfig/network",获取主机名称与默认网关等网络环境。 (2)测试与载入内存设备/proc及usb设备/sys。除了/proc外,系统会主动检测是否有usb设备,并主动加载usb驱动,尝试载入usb文件系统。 (3)决定是否启动SELinux。 (4)接口设备的检测与即插即用(pnp)参数的测试。 (5)用户自定义模块的加载。用户可以再"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中。 (6)加载核心的相关设置。又一个文件"/etc/sysctl.conf",按这个文件的设置值配置功能。 (7)设置系统时间(clock)。 (8)设置终端的控制台的字形。 (9)设置raid及LVM等硬盘功能。 (10)以方式查看检验磁盘文件系统。 (11)进行磁盘配额quota的转换。 (12)重新以读取模式载入系统磁盘。 (13)启动quota功能。 (14)启动系统随机数设备(产生随机数功能)。 (15)清楚启动过程中的临时文件。 (16)将启动信息加载到"/var/log/dmesg"文件中。 如果想知道启动过程中发生了什么事可以查看dmesg文件。 4. 启动系统服务"/etc/rc.d/rc*.d"与启动设置文件"/etc/sysconfig" 之前结束了inittab中的rc.sysinit之后,系统可以顺利工作了,只是还需要启动系统所需要的各种服务,这样主机才可以提供相关的网络和主机功能。因此根据之前设置的运行等级,会启动不同的服务项目。如果当时我们在inittab中选择了等级3,系统则会在"/etc/rc.d/rc3.d"目录中运行相应的服务内容,选择等级5,就在"/etc/rc.d/rc5.d"目录内。 该目录下的内容全部都是以 S 或 K 开头的链接文件,都链接到"/etc/rc.d/init.d"目录下的各种shell脚本。S表示的是启动时需要start的服务内容,K表示关机时需要关闭的服务内容。如果我们需要自己增加启动的内容,可以再init.d目录中增加相关的shell脚本,然后在rc*.d目录中建立链接文件指向该shell脚本。这些shell脚本的启动或结束顺序是由S或K字母后面的数字决定,例如S01sysstat表示第一个执行sysstat脚本,S99local表示排在第99位执行rc.local脚本。 5. 用户自定义引导程序(/etc/rc.d/rc.local) 一般来说,自定义的程序不需要执行上面所说的繁琐的建立shell增加链接文件的步骤,只需要将命令放在rc.local里面就可以了,这个shell脚本就是保留给用户自定义启动内容的。 6. 启动终端和X-Window界面 完成了系统所有的启动任务后,linux会启动终端或X-Window来等待用户登录。 tty1,tty2,tty3...这表示在运行等级1,2,3,4的时候,都会执行"/sbin/mingetty",而且执行了6个,所以linux会有6个纯文本终端,mingetty就是启动终端的命令。 除了这6个之外还会执行"/etc/X11/prefdm -nodaemon"这个主要启动X-Window 7. 有关变换运行等级 当linux已经登录之后,有时候还希望更换运行等级,一种方法是改变"/etc/inittab"内的设置内容,将"id:3:initdefault:"中的数字改成相应等级,然后重启即可。 如果只是想暂时地改变运行等级,下次启动还是按原等级登录,可以直接使用init [0-6]命令来改变运行等级。一般来说,运行等级的不同只是相关的启动服务内容的不同而已,因此使用命令改变等级会比较两个改变等级之间的服务内容,关闭一些新等级中不需要的服务项目,启动新等级需要的服务,而保量新等级和原等级中共有的服务内容。查询目前等级的命令也很简单,只需要输入runlevel即可。如:[[email protected] ~]# runlevel  结果显示:N 3

上一篇:cocos2dx之TileMap
下一篇:linux命令

相关文章

关键词: linux启动流程

相关评论