




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.2 Linux系统的引导过程Linux系统的引导和初始化过程可以分为两个阶段,如图6.3所示图6.3 Linux内核启动过程示意图第1阶段:完成硬件检测、初始化和内核的引导。第2阶段:主要是init初始化进程的执行。1BIOS自检计算机通电后,首先由BIOS进行自检,即所谓的POST(Power On Self Test),对硬件进行检测,然后BIOS 必须确定要使用哪个设备来引导系统,此时会根据CMOS中设置的引导顺序,搜索处于活动状态并可引导的设备(硬盘、CDROM、USB设备或软盘),当找到一个引导设备之后,从中读出引导块或MBR(MBR,Master Boot Record)。主引导记录MBR中包含主引导加载程序。MBR是一个512B大小的扇区,位于磁盘的第一个扇区中(0道0面1扇区)。当MBR被加载到RAM中之后,BIOS会把控制权交给MBR。注意,要看MBR的内容,可以执行如下命令:# dd if=/dev/hda of=mbr.bin bs=512 count=1/从/dev/hda上读取前512B的内容,将其写入mbr.bin文件中# od -xa mbr.bin/以十六进制和ASCII码格式打印这个二进制文件的内容MBR中的主引导加载程序是一个512B大小的映像,其中包含程序代码和一个分区表。前446B是主引导加载程序,其中包含可执行代码和错误消息文本。接下来的64B是分区表,其中包含4个分区的记录(每个记录的大小是16个字节)。MBR以两个特殊数字的字节(0xAA55)结束。这个数字会用来进行MBR的有效性检查。2启动GRUBGRUB是引导加载程序,会引导操作系统。当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节(MBR,Master Boot Record)主引导加载程序(第一阶段的引导加载程序)的主要作用是查找并加载次引导加载程序,它是通过在分区表中查找一个活动分区来实现这种功能的。当找到一个活动分区时,会扫描分区表中的其它分区,以确保它们都不是活动的。当这个过程验证完成之后,就将活动分区的引导记录(第二阶段的引导加载程序)从这个设备中读到RAM中,并执行它。第二阶段的引导加载程序(次引导加载程序)可以更形象地称为内核加载程序。主要作用是将默认的内核映像和initrd映像加载到内存中。在PC环境中,第一阶段和第二阶段的引导加载程序一起称为GRand Unified Bootloader(GRUB)。在GRUB命令行环境中(启动电脑后,在GRUB界面中按C键进入),可以使用initrd映像引导一个特定的内核,方法如下:grub kernel (hd0,2)/ Possible files are: lost+found sys proc var tmp dev etc root selinux usr bin boot home lib media mnt opt sbin srv misc tftpboot .autofsck net cache_dbgrub kernel (hd0,2)/boot/vmlinuz-2.6.18-128.el5 Linux-bzImage, setup=0x1e00, size=0x1bbeb4grub initrd (hd0,2)/boot/initrd-2.6.18-128.el5.img Linux-initrd 0x2fd79000, 0x266c72 bytesgrub 当内核映像被加载到内存后,内核阶段就加开始了。3加载内核当内核映像被加载到内存中,并且阶段2的引导加载程序释放控制权之后,内核阶段就开始了。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于512KB)或一个bzImage(较大的压缩映像,大于512KB)。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。在内核引导过程中,初始RAM磁盘(initrd)是由次引导加载程序加载到内存中的,它会被复制到RAM中并挂载到系统上。这个initrd会作为RAM中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导。由于与外围设备进行交互所需要的模块可能是initrd的一部分,因此内核可以非常小,但是仍然需要支持大量可能的硬件配置。在内核引导之后,就可以正式挂载根文件系统了,此时会将initrd根文件系统卸载掉,挂载真正的根文件系统。注意:在一个没有硬盘的嵌入式环境中,initrd可以是最终的根文件系统,或者通过网络文件系统(NFS)挂载最终的根文件系统。4执行init进程内核被载入内存,开始运行并初始化所有的设备驱动程序和数据结构等之后,内核将生成第一个进程init(实际上依次寻找/sbin/init、/etc/init、/bin/init或/bin/sh,将执行第一个找到的,如果这4个文件都不存在,将给出“No init found. Try passing init= option to kernel.错误提示,内核启动失败。详细分析见5.3节)。init进程是一个由内核启动的用户级进程,是系统上运行的所有其它进程的父进程,它会观察其子进程,并在需要的时候启动、停止、重启它们,主要用来完成系统的各项配置。该进程对于Linux系统的正常工作是非常重要的。init的主要工作是根据/etc/inittab文件来执行相应的脚本,进行系统的初始化,如设置键盘、字体、装载模块、设置网络等。所以,init进程执行的每一步都是由/etc/initab文件中的配置决定的,以下是RadHat的/etc/inittab文件的例子:# inittab This file describes how the INIT process should set up# the system in a certain run-level.# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)/停机(不要把initdefault设置为0,否则开机之后就会自动关机 )# 1 - Single user mode/单用户模式# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)/多用户模式,但是没有NFS# 3 - Full multiuser mode/完全多用户模式# 4 - unused/没有使用# 5 - X11/X-windows模式# 6 - reboot (Do NOT set initdefault to this)/系统重新启动(不要把initdefault设置为6,否则开机之后就会重启 )#id:5:initdefault: /该命令指出缺省的运行级别为5,即开机后进入X-window模式# System initialization.#系统启动之后自动执行/etc/rc.d/rc.sysinit脚本,当运行级别为5时,会以5为参数运行/etc/rc.d/rc 5脚本,# init进程将等待其返回(wait)si:sysinit:/etc/rc.d/rc.sysinitl0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6# Trap CTRL-ALT-DELETE#在启动过程中如果按Crtl-Alt-Delete,将执行/sbin/shutdown -t3 -r now命令重启系统ca:ctrlaltdel:/sbin/shutdown -t3 -r now# When our UPS tells us power has failed, assume we have a few minutes# of power left. Schedule a shutdown for 2 minutes from now.# This does, of course, assume you have powerd installed and your# UPS connected and working correctly.#如果系统有UPS电源,该行命令设定系统在掉电时提示“电源关闭,系统正在关闭”,并且在2min后自动关机pf:powerfail:/sbin/shutdown -f -h +2 Power Failure; System Shutting Down# If power was restored before the shutdown kicked in, cancel it.#如果工作电源恢复,该行命令提示“电源恢复,取消关机”,并且取消关机pr:12345:powerokwait:/sbin/shutdown -c Power Restored; Shutdown Cancelled# Run gettys in standard runlevels# init进程打开6个终端(虚拟控制台),以ttyn为参数执行/sbin/mingetty程序,打开ttyn终端用于用户登录1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6# 0:12345:respawn:/sbin/mingetty tty0 # 在15各个级别上以tty0为参数执行/sbin/mingetty程序,打开tty0终端用于用户登录,# 如果进程退出则再次运行mingetty程序 # Run xdm in runlevel 5#在级别5上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行(respawn)x:5:respawn:/etc/X11/prefdm -nodaemon/etc/inittab文件是以行为单位的描述性(非执行性)文本,每个指令行都具有以下格式:Id:runlevels:action:process从代码中可以看到,etc/inittab中语句的每一行包含4个域,格式如下。(1)id:是指入口标识符,它是一个字符串,是由两个独特的字元所组成的标识符,这个标识符在此文件中是唯一的。文件中的某些记录必须使用特定的id才能使系统工作正常。对于getty或mingetty等其它login程序项,要求id与tty的编号相同,否则getty程序不能正常工作。(2)runlevels:runlevels域给出的是本行的运行级别。运行级别会指出下一个操作域中的action以及process域会在哪些runlevels中被执行。而在正常的启动程序之后,root用户可以使用telinit这个指令来改变系统的runlevels。假定在Linux系统中runlevels的预设值是5,那么只有那些每一列中runlevel域的值为5时,后面的process才会被执行。所以,如果系统的runlevels值不同的话,所执行的process也不一样,所以系统启动时的资源配置情况,在不同的runlevels下会有差异。runlevels一般使用06以及S或s。0为shutdown;1为重启至单用户模式;2为无NFS支持的多用户模式;3是完全多用户模式(也是最常用的级别);4保留给用户自定义;5表示XDM图形登录方式;6为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。在一般的系统实现中,0、1、6运行级别被系统保留,使用2、3、4、5几个级别,79级别也是可以使用的,传统的Unix系统没有定义这几个级别。runlevels可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevels与当前的运行级别匹配才会执行。注意:运行级别1是单用户模式,所谓单用户指的是系统运行在唯一用户(超级用户)模式下。而多数情况下,系统运行在多用户模式下。在启动出错、文件系统出错等情况下,进入单用户模式,可以进行修复操作。(3)action:是指动作,指出init程序执行相应process的方式,取值及其含义见表6.5。表6.5 action取值及其含义动作说明initdefault指定缺省的运行级别(runlevel)initdefault是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活 以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级 别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入 runlevelsysinit指定运行的第一个程序/脚本,此时runlevels域不起作用boot在sysinit之后执行,runlevels域不起作用bootwait同boot,但init会等待该命令结束once在进入有runlevels指定的运行级别时运行wait同上,但init会等待该命令结束respawn在进入相应runlevel时执行,并且若该进程结束,init会再起一个进程执行同样的命令ctrlaltdel指定在用户按下Ctrl-Alt-Del时执行的命令注意:action为sysinit、boot、bootwait所对应的process,将在系统启动时无条件运行,会忽略其中的runlevel,其余的action(不含 initdefault)都与某个runlevel相关。(4)process:是指要执行的程序,程序后面可以带参数。5执行/etc/rc.d/rc.sysinit/etc/rc.d/rc.sysinit是init进程执行的第一个Shell脚本文件,是每一个运行级别都要首先运行的重要脚本。/etc/rc.d/rc.sysinit主要做在各个运行级别中相同的初始化工作,如下:(1)设置$PATH变量。(2)配置网络。(3)为虚拟内存启动交换。(4)设置系统的主机名。(5)检查根文件系统,以进行必要的修复。(6)检查根文件系统的配额。(7)为根文件系统打开用户和组的配额。(8)以读/写的方式重新装载根文件系统。(9)清除被装载的文件系统表/etc/matb。(10)把根文件系统输入到mtab。(11)使用系统为装入模块做准备。(12)查找模块的相关文件。(13)检查文件系统,以进行必要的修复。(14)检查并挂载文件系统。(15)清除/etc/mtab、/etc/fastboot和/etc/nologin。(16)删除UUCP的lock文件、删除过时的子系统文件、删除过时的pid文件。(17)设置系统时钟。(18)激活交换分区。(19)初始化串行端口。(20)装入模块。6执行/etc/rc.d/rcX.dKSrc.sysinit执行后,将返回init继续其它的动作,通常接下来会执行到/etc/rc.d/rc程序。以运行级别3为例,init将执行配置文件inittab中的以下这行:l3:3:wait:/etc/rc.d/rc 3这行表示以3为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受3作为参数,去执行/etc/rc.d/rc3.d/目录下的所有的rc启动脚本,/etc/rc.d/rc3.d/目录中的这些启动脚本实际上都是一些链接文件,真正的rc启动脚本都放在/etc/rc.d/init.d/目录下。这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。Linux Unix系统一般有两种不同的初始化启动方式。 BSD system init System V system init大多数发行版的Linux都使用了与System V system init相仿的的初始化启动方式,它比传统的BSD system init更容易使用而且更加灵活,Sys V init主要思想是定义了不同的运行级别(runlevel)。通过配置文件/etc/inittab,定义了系统引导时的运行级别,进入或者切换到一个运行级别时做什么。对于每一个运行级别,在/etc/rc.d目录中都有一个对应的下级目录/etc/rc.d/rcX.d(X表示运行级别06),其中X就是代表运行级别的数字。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本文件的符号链接,每个脚本对应一项服务程序。链接的名称中,在K或S后有一个数字,表示执行顺序,数字小的先执行。以S开头的,表示start,以S开头的脚本执行时,系统会传递start参数;以K开头的,表示stop,以K开头的脚本执行时,系统会传递stop参数。这就使得init可以启动和停止服务。事实上,可以通过手动执行来启动或停止相关服务,例如,可以执行下面的命令来启动和停止Samba服务器。# /etc/rc.d/init.d/smb start/启动Samba服务器# /etc/rc.d/init.d/smb stop/停止Samba服务器假如系统启动进入运行级别3,/etc/rc.d/rc3.d目录下所有以S开头的文件(用来启动一个服务)将被依次执行;当关闭系统,离开运行级别3之前,/etc/rc.d/rc3.d目录下所有以K开头的文件(用来关闭一个服务)将被依次执行。当使用init命令改变运行级别时,所有相关的守护进程都将重启,即先K后S。至于在每个运行级中运行哪些守护进程,可以通过chkconfig命令或setup命令(出现的界面中选择System Services)来自行设定。例如,rc3.d便是runlevel 3的脚本存放的目录。rcX.d中的脚本并不是各自独立的,其实它们都通过符号链接连接到/etc/rc.d/init.d中的脚本。rootlocalhost Desktop# ll /etc/rc.d/rc3.d/S9* /省略lrwxrwxrwx 1 root root 15 04-01 21:03 /etc/rc.d/rc3.d/S90crond - ./init.d/crondlrwxrwxrwx 1 root root 13 04-01 21:11 /etc/rc.d/rc3.d/S90xfs - ./init.d/xfslrwxrwxrwx 1 root root 17 04-01 21:01 /etc/rc.d/rc3.d/S95anacron - ./init.d/anacronlrwxrwxrwx 1 root root 13 04-01 21:04 /etc/rc.d/rc3.d/S95atd - ./init.d/atdlrwxrwxrwx 1 root root 22 04-01 21:12 /etc/rc.d/rc3.d/S97yum-updatesd - ./init.d/yum-updatesdlrwxrwxrwx 1 root root 22 04-01 21:11 /etc/rc.d/rc3.d/S98avahi-daemon - ./init.d/avahi-daemonlrwxrwxrwx 1 root root 19 04-01 21:11 /etc/rc.d/rc3.d/S98haldaemon - ./init.d/haldaemonlrwxrwxrwx 1 root root 19 04-01 21:12 /etc/rc.d/rc3.d/S99firstboot - ./init.d/firstbootlrwxrwxrwx 1 root root 11 04-01 21:03 /etc/rc.d/rc3.d/S99local - ./rc.local /即,/etc/rc.d/rc.locallrwxrwxrwx 1 root root 16 04-01 21:05 /etc/rc.d/rc3.d/S99smartd - ./init.d/smartdrootlocalhost Desktop# ll /etc/rc.d/init.d/ /省略-rwxr-xr-x 1 root root 2740 01-21 16:42 smartd-rwxr-xr-x 1 root root 2145 01-21 18:48 smb-rwxr-xr-x 1 root root 1575 01-21 14:35 spamassassin-rwxr-xr-x 1 root root 3964 01-21 12:15 squid-rwxr-xr-x 1 root root 3362 03-04 02:08 sshd-rwxr-xr-x 1 root root 2043 2008-05-25 syslog-rwxr-xr-x 1 root root 2796 2007-01-07 tux-rwxr-xr-x 1 root root 2051 01-21 15:16 vncserver-rwxr-xr-x 1 root root 1778 2008-05-25 vsftpd-rwxr-xr-x 1 root root 2008 02-26 18:20 wdaemon-rwxr-xr-x 1 root root 1559 01-21 18:48 winbind-rwxr-xr-x 1 root root 1634 01-21 19:08 wpa_supplicant-rwxr-xr-x 1 root root 3902 2007-07-12 xfs-rwxr-xr-x 1 root root 2497 2007-03-15 xinetd-rwxr-xr-x 1 root root 3518 01-21 16:36 ypbind-rwxr-xr-x 1 root root 1498 2008-05-25 yum-updatesd-rwxr-xr-x 1 root root 1114 2007-11-11 zebra注意: /etc/rc.d/rc.local脚本文件的执行。Redhat中运行级别2、3、5都把/etc/rc.d/rc.local作为初始化脚本中的最后一个文件。即,/etc/rc.d/rc.local是init进程执行的最后一个脚本文件,所以用户可以在这个文件中添加一些需要在登录之前执行的命令,默认地,/etc/rc.d/rc.local会用使用系统的内核版本和机器类型创建一个登录标志。至此,rc进程执行完毕,系统环境已经设置好了,下面就该用户登录系统了。rootlocalhost Desktop# cat /etc/rc.d/rc.local#!/bin/sh# This script will be executed *after* all the other init scripts.# You can put your own initialization stuff in here if you dont# want to do the full Sys V style init stuff.touch /var/lock/subsys/local7getty和/bin/loginrc进程执行完毕后,返回init,这时基本系统环境已经设置好了,各种守护进程也已经启动了。init接下来会启动/sbin/mingetty来打开6个终端,以便用户登录系统。通过Alt+Fn(n为16)可在这6个终端之间切换
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京市市场场地租赁合同附件一4篇
- 约定婚前财产婚后收益协议2篇
- 气候协议执行机制-洞察及研究
- 统编版2025-2026学年三年级上册期末学业水平测试卷(含答案)
- 部队交通安全培训计划表课件
- 河南省驻马店市汝南县一中二中三中联考2024-2025学年八年级下学期3月月考生物试题(含答案)
- 部门安全培训汇报课件
- 迁徙动物导航分子基础-洞察及研究
- 国际标准与区域监管冲突下的人造宝石出口合规性思考
- 四氟苯甲酸衍生物在极端工况下的热稳定性与结构演变关系研究
- 党务工作论述知识课件
- 科研助理笔试题库及答案
- 大中型企业安全生产标准化管理体系要求变化解读
- 小金库案例警示教育
- 自动扶梯应急救援预案
- GJB9001C体系推行实施计划
- 2025年时事政治考试116题及参考答案
- 工伤认定申请证人证言模板
- 红细胞检验的临床应用
- 2024届江西省南昌市高三上学期零模物理试题【含答案解析】
- 南京理工大学介绍课件模板
评论
0/150
提交评论