linux系统引导过程

合集下载

Linux 系统引导过程

Linux 系统引导过程

启动流程启动时要加载核心,让核心来驱动整个硬件。

整个启动过程:1.加载BIOS的硬件信息,并获得第一个启动设备的代号(CMOS中设定的启动项)。

2.读取第一个启动设备的MBR的引导加载程序(lilo、grub、spfdisk)3.加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备。

4.核心执行init程序并获取运行信息。

5.Init执行/etc/rc.d/rc.sysinit文件6.启动核心的外挂模块(/etc/modprobe.conf)7.Init 执行各个批处理文件(根据运行级别)。

8.Init 执行/etc/rc.d/rc.local文件9.执行/bin/login程序,等待用户登录。

10.登录之后开始以shell控制主机。

引导加载程序与核心的载入主机读取BIOS,并且了解主要的主机硬件信息后,主机便开始尝试加载操作系统。

主机首先读取的就是硬盘的主引导记录(MBR),在MBR中装有引导加载程序(比如说grub)。

主机刚启动时是不认识磁盘文件系统的,这就需要引导加载程序帮忙。

但我们知道MBR是整个硬盘的第一个扇区,整个大小为一个扇区的大小(512KB),而我们的加载程序却远远大于这个容量。

怎么办?引导加载程序分成两个阶段来执行:1,执行引导加载程序的主程序,这个主程序放在MBR或超级块中。

2,载入引导加载程序的所有设置文件与相关的环境参数文件。

一般来说,设置文件都放在/boot目录下。

引导加载程序必须能做到:●引导加载程序可以直接指定并取用核心文件,并加载到主存储器中。

●也可以将加载程序的控制权移交给下一个加载程序(超级块中的引导加载程序)。

grub是如何被载入的呢?grub有几个重要文档,stage1,stage2,以及stage1.5,这些文档都在/boot/grub下,grub被载入时有以下几个步骤。

Stage1阶段装载基本的引导程式(stage1),这也是安装在MBR中的内容,大小为512字节,但这并不意味着占用的空间为512字节,这还要看块的大小以及inode控制的块数。

Linux引导与配置文件加载过程

Linux引导与配置文件加载过程

Linux引导及配置文件加载过程解读文章分类:操作系统??本文包括3部分内容1、 Linux的引导过程2、 Linux 的运行级别3、 /etc/inittab与/etc/rc.d/ 与/etc/rc.d/init.d的关系关键词:Linux引导过程、运行级别、inittab与 init.d 与 rc.d一、 Linux的引导过程系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。

内核被加载到内存中之后,就开始执行我们的系统设置了。

一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。

从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。

内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。

二、运行级别(run level)Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。

init 进程上来首先做的事是去读取/etc/目录下 inittab文件中initdefault id值,这个值称为运行级别(run-level)。

它决定了系统启动之后运行于什么级别。

运行级别决定了系统启动的绝大部分行为和目的。

这个级别从0到 6 ,具有不同的功能。

不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)三、 /etc/rc.d/与/etc/rc.d/init.d的关系先解释一下init.d。

这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。

LINUX引导过程

LINUX引导过程

LINUX引导过程LINUX引导过程首先说明一下,这里讲的是LINUX引导经过的步骤,而不涉及KERNEL引导过程的内部细节。

希望本文能对初学LINUX的朋友有所帮助。

一、从BIOS到KERNEL计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On Self Test),然后依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。

如通常BIOS中设的引导顺序为C在最前面,那么就把C盘(第一个IDE硬盘)的第0柱面,第0头的第1个扇区读入内存,然后跳到那里开始执行。

这个扇区有一个大家熟悉的名字——MBR(Main Boot Record)。

换句话说,MBR里面存放的是一小段程序以及分区表的数据。

在使用WIN9X和DOS时,这里面放的代码就把分区表里标记为Active的分区的第一个扇区(一般存放着操作系统的引导代码)读入内存并跳转到那里开始执行。

而在用LILO引导LINUX时,有两种选择:(1) 把LILO安装在MBR。

这时就由BIOS直接把LILO代码调入内存,然后跳转执行LILO。

即BIOS——>LILO(在MBR中)——>KERNEL(2) 把LILO安装在LINUX分区,并把LINUX分区设为Active。

这时,BIOS调入的是WIN9X/DOS下的MBR代码,然后由这段代码来调入LILO的代码(位于活动分区的第一个扇区)。

即BIOS——>MBR——>LILO(在活动分区的第一个扇区)——>KERNEL因为在读入及执行MBR时,操作系统还没有起来,所以只能用BIOS提供的INT13来进行磁盘操作,而INT13只能读写硬盘1024柱面之前的数据,由此可知任何操作系统的引导代码必须在1024柱面之前。

对于LINUX来说,不管你使用方式(1)还是方式(2)启动,都要保证KERNEL放在1024柱面之前。

只有在KERNEL起来以后,才有读/写1024柱面以后数据的能力。

arm版本linux系统的启动流程

arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。

在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。

本文将详细介绍ARM版本Linux系统的启动流程。

一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。

在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。

引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。

二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。

内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。

内核需要设置异常向量表,以便正确处理异常。

2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。

3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。

init进程是系统中所有其他进程的父进程,负责系统的初始化工作。

三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。

在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。

设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。

它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。

四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。

启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。

2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。

系统引导

系统引导

系统引导- 系统引导-bootsect.S中的部分代 中的部分代 码
movw $BOOTSEG, %ax movw %ax, %ds movw $INITSEG, %ax movw %ax, %es movw $256, %cx subw %si, %si subw %di, %di cld rep movsw ljmp $INITSEG, $go … go: movw $0x4000-12, %di # 0x4000 is an arbitrary value >= # length of bootsect + length of # setup + room for stack; # 12 is disk parm size. # 将ds,ss都置成移动后代码所在的段处 都置成移动后代码所在的段处0x9000 都置成移动后代码所在的段处 # 设置堆栈 设置堆栈put stack at INITSEG:0x4000-12. # %ds = BOOTSEG,将ds段寄存器设为 段寄存器设为0x7c00 , 段寄存器设为 # %ax = %es = INITSEG,将es段寄存器设为 段寄存器设为0x9000 , 段寄存器设为 #移动计数值=256 移动计数值= 移动计数值 #源地址 源地址ds:si=0x07c0:0x0000 源地址 #目标地 目标地es:di=0x9000:0x0000 目标地 #清方向标志位 清方向标志位 #重复执行直到 重复执行直到cx=0 重复执行直到 #移动 个字 移动1个字 移动 #间接跳转,INITSEG指出跳转到的段地址 间接跳转, 间接跳转 指出跳转到的段地址
movw movw movw
%ax, %ds %ax, %ss %di, %sp
系统引导- 系统引导-bootsect.S中部分代码的解 中部分代码的解 释

剖析Linux系统引导流程

剖析Linux系统引导流程

MB ManB o cr 主引导扇 区 R( i o t o Re d)
①位置: 道 0面第一扇区。 0 ②产生时间 : 硬盘分区时创建。 ③读取方法 :


步 : N 8启动 盘启 动 A D B G 回车 WI 9 EU
MOV AX,2 0 01 MOV BX,0 1 0 MOV CX, 1
MOV DX,0 8 I 3 NT 1
回 车
. oE 回 车 G_

D2 0 显 示 数 据 B
④主引导扇区内容(1 字节) 52
●主 引导扇 区引导程序 (4 4 6字节 ) ● 分 区 表 数 据 ( " 6字 节 ) 41 ● 分 区 表 标 志 5 A 2字 节 ) 5 A(
重 新 引 导 系 统 。 C U执 行 1H 号 中 断 的初 始 引 导 程 P 9
序 ,以便从 启动 盘 读 取 加 载 操 作 系 统 的 引 导 程 序
B osc.。 初始 引导程序是 按照 C S里 设置 的启 ot t 该 e S MO
动盘启 动顺序查 找相 应盘 的 MB R.如找 到 了引导 程 序, 则将 MB R中的引导程序 读到 内存 0 0 7 0 0 0:C 0处 , 并执行这个 引导程序 再将 内核 代码全 部装人 内存 。 这 里 主要 涉及 与 系统 启 动 有关 的 概 念是 MB R,
维普资讯
研 究 与开 发
数据 数据 数据 数据 6 分区结束 磁道号 : 7 分 区结束 扇区号 : 8 1 :2位本 分 区之 前的扇 区数 - 13 1— 5 3 2 1 :2位本分 区之后 的扇区数
2 第二阶段 : B — L 0 H L — 活动分 区引导 R I

Linux启动过程详解_MBR和GRUB概述

Linux启动过程详解_MBR和GRUB概述

MBR和GRUB概述Linux 的启动流程目前比较流行的方式主要是以下步骤:1、引导器(例如 GRUB)启动;2、内核启动;3、系统进程启动与配置。

本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。

常见的目录结构(以 CentOS 5.3 为例):/boot|-- System.map-2.6.18-128.el5|-- System.map-2.6.18-128.el5xen|-- config-2.6.18-128.el5|-- config-2.6.18-128.el5xen|-- initrd-2.6.18-128.el5.img|-- initrd-2.6.18-128.el5xen.img|-- lost+found|-- memtest86+-1.65|-- message|-- symvers-2.6.18-128.el5.gz|-- symvers-2.6.18-128.el5xen.gz|-- vmlinuz-2.6.18-128.el5|-- vmlinuz-2.6.18-128.el5xen|-- xen-syms-2.6.18-128.el5|-- xen.gz-2.6.18-128.el5`-- grub|-- device.map|-- e2fs_stage1_5|-- fat_stage1_5|-- ffs_stage1_5|-- grub.conf|-- iso9660_stage1_5|-- jfs_stage1_5|-- menu.lst -> ./grub.conf|-- minix_stage1_5|-- reiserfs_stage1_5|-- splash.xpm.gz|-- stage1|-- stage2|-- ufs2_stage1_5|-- vstafs_stage1_5`-- xfs_stage1_5图一: CentOS 5.3 的 /boot 目录目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。

linux系统救援模式解决开机引导失败问题

linux系统救援模式解决开机引导失败问题

linux系统救援模式解决开机引导失败问题问题:linux开机后进⼊grub命令⾏且grub命令⾏输⼊命令报错推测:因之前系统装好以后改变过分区,⽽导致不能读取到grub主开机引导程序在解决这个问题之前我们先来了解linux开机启动过程。

linux系统开机启动有以下过程:1.开机加载BIOS2.进⼊MBR(master boot record)主引导记录:MBR中主要是安装加载引导程序,如主流的grub(既⽀持win也⽀持linux)。

它是可引导设备的第⼀个扇区(⼀般情况下是硬盘中的第⼀扇区)中的主引导分区3.读取运⾏grub主引导程序:grub主要是识别磁盘格式,⽤于载⼊并启动操作系统核⼼(Kernel)。

多操作系统时可以通过配置grub⽽引导系统启动。

4.启动init进程完成系统启动;据我所知有两种⽅式init⽅式。

System V initialization⽅式和Upstart⽅式。

(具体⽅式的运⾏模式⾃⾏百度) linux开机引导过程⼤致分为以上⼏步。

知道了开机启动⼤致过程,我们针对遇到的问题可以判断问题出在grub主引导程序上。

下⾯我们将使⽤系统盘进⼊linux救援模式修复grub引导程序。

1.放⼊linux装机光盘并选择以光盘启动2.选择Rescue installed system 救援模式进⼊3.语⾔选择默认英语,键盘选择us4.根据需要选择是否联⽹,这⾥不需要联⽹5.进⼊到Rescue界⾯,如果选择Continue按钮并回车则救援模式程序会⾃动查找系统中已有的⽂件系统,并把他们挂载到/mnt/sysimage⽬录下;如果选择Read-Only并回车,则会以只读的⽅式挂载已有的⽂件系统,如果需要⼿动挂载则选Skip6.之后有三种模式选择我们选择进⼊shell模式并根据之前提⽰输⼊chroot /mnt/sysimage命令(fakd为诊断模式)7.输⼊grub进⼊grub命令⾏8.在grub命令⾏中输⼊:root(hdx,y) 其中x为安装linux根分区所在的盘,⽐如只有⼀个硬盘那x就是0,linux根分区在第⼆个硬盘上x就为1. 其中y为安装linux系统所在的根分区 我这⾥输⼊的是root(hd0,0)9.输⼊setup(hd0)setup(hd0)就是把grub写⼊到硬盘的MBR上,显⽰succeeded就说明写⼊修复成功。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

linux系统引导过程简介首先,主板的BIOS会读取硬盘的主引导记录(MBR),MBR中存放的是一段很小的程序,他的功能是从硬盘读取操作系统核心文件并运行,因为这个小程序太小了,因此通常这个小程序不具备直接引导系统内核的能力,他先去引导另一个稍微大一点的小程序,再由这个大一点的小程序去引导系统内核.在linux系统中这样的小程序有LILO和GRUB.在这个项目中,我决定用LILO来做系统引导程序.在软盘上启动linux系统的过程和在硬盘上启动的过程相似.Linux系统内核被引导程序装入内核并运行后,linux内核会检测系统中的各种硬件.并做好各种硬件的初始化工作,使他们在系统正式运行后能正常工作.之后内核做的最后一个工作是运行/sbin下的init程序,init是英文单词initialization(初始化)的简称,init程序的工作是读取/etc/inittab 文件中描述的指令,对系统的各种软硬件环境做最初化设定.最后运行mingetty等待用户输入用户名登录系统.所有的工作就这么简单,虽然linux启动的时候有很多内容,看上去十分高深,但是都不过是对这个过程的扩充.明白了这个道理,你可以写一些脚本程序让他在系统启动的特定时间运行完成任务.事实上系统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init 的可执行程序他都可以执行.Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段:1.启动内核。

在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。

2.执行程序init.(系统初始化).装入内核并初始化设备后,运行init程序。

init程序处理所有程序的启动,包括重要系统精灵程序和其它指定在启动时装入的软件。

开机---BIOS自检---载入启动程序---加载内核---启动init服务---加载/etc/inittab---Run level---rc.sysinit---rc--- mingetty---rc.local一.BIOS自检当电脑开机的时候,电脑会进入BIOS,在PC机中引导LINUX是从BIOS中的地址0xFFFF0处开始的.BIOS的第一个步骤是加电自检,即所谓的POST(Power On Self Test),BIOS的第二个步骤是进行本地设备的枚举和初始化,侦测电脑周边配套设备是否工作正常,如cpu的类型,速度,缓存等;主板类型,内存的速度,容量,硬盘的大小,类型和工作模式,风扇速度等,主要是为了检查这些设备在开机的时候是否能通过检测,说明电脑可以正常的工作.BIOS由两部分组成:POST代码和运行时的服务.当POST完成之后,它被从内存中清理了出来,但是,BOIS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务二.载入启动程序BIOS自检完成后,BIOS会根据用户设置的启动顺序来由哪个设备启动电脑的操作系统,设备需是处于活动状态并且可以引导的,(引导设备可以是软盘,CD-ROM,硬盘上的某个分区,网络上的某个设备,甚至是USB闪存),对于linux这个设备一般是硬盘.也就是进入硬盘的MBR区域,(master boot record,位于磁盘上的第一个扇区中,0道0柱面1扇区),这个区域中有512个字节的大小,其中前446个字节中保存的就是启动程序,(446个字节包含可执行代码和错误消息文本,接下来的64个字节是分区表,其中4个分区的记录,每个记录的大小是16个字节,MBR以两个特殊数字的字节0xAA55结束,这个数字用来进行MBR的有效性检查,当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR),然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub程序.(grub不像lilo一样使用裸扇区,而是可以从ext2或ext3文件系统中加载LINUX内核).要看MBR的内容,请使用下面的命令#从/dev/sda上读取前512个字节的内容,并将其写入mbr.bin文件中[root@localhost ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1#以十六进制和ASCII码格式打印这个二进制文件的内容[root@localhost pam.d]# od -xa mbr.bingrub程序的这个配置文件是保存在:/boot/grub/grub.conf这个文件中,如果修改这个文件后,设置会立刻生效.使用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映像文件加载到内存。

这个文件里面存放的都是驱动程序。

三.加载内核正确的启动了启动程序之后,接下来的工作就是载入操作系统的内核.内核主要作用是取得BIOS所检测到的硬件设备的信息,然后将这些硬件设备自己来管理,这样才能够提供给Linux系统使用。

接手了硬件设备后,然后就要加载这些设备的驱动程序。

以便于控制电脑上的设备如何正确的工作。

加载完硬件的驱动程序后,接下来就加载文件系统了,也就是加载开机所需要的库文件,程序等,所以/etc /bin /sbin /dev /lib这些目录的根目录必须是同一个分区,否则会造成Linux 的开机失败。

上面在grub中有“ro root=LABEL=/”这样的信息,是以只读的方式来加载所需要的文件,程序,这是为什么呢?是因为Linux的内核在启动的过程中,不知道将会发生什么故障,可能不是很稳定,如果以可读可写的方式来加载,那么启动的过过程组中如果出现异常或者是断电,那么就有可能破坏,为了避免这些问题的发生,就采取只读的方式来挂载文件系统。

LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。

内核映象前面的一些代码完成解压缩。

内核映像并不是一个可执行的内核,而是一个压缩过的内核映像,它通常是一个zlmage(压缩映像,小于512kb)或一个bzlmage(大于512kb),它是提前使用zlib进行压缩过的.在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用,然后此例程会调用内核,并开始启动内核引导的过程当bzlmage被调用时,(以i386为例),我们从./arch/i386/boot/head.S的start汇编例程开始执行,这个例程会执行一些基本的硬件设置,并调用./arch/i386/boot/compressed/headS中的startup_32例程,此例程会设置一个基本的环境(堆栈等),并清楚Block Started bySymbol(BSS),然后调用一个叫做decompress_kernel的C函数(在./arch/i386/boot/compressed/misc.c中)来解压内核.当内核被解压到内存中之后,就可以调用它了.这是另外一个startup_32函数,但是这个函数在./arch/i386/kernel/head.S中.在这个新的startup_32函数(也称为清楚程序或进程0)中,会对页表进行初始化,并起用内存分页功能.然后会为任何可选的浮点单元(FPU)检测CPU的类型,并将其存储起来供以后使用,然后调用start_kernel函数(在init/main.c中),它会将您带入与体系结构无关的Linux内核部分.实际上,这就是Linux内核的main函数.通过调用start_kernel,会调用一系列初始化函数来设置中断,执行进一步的内存配置,并加载初始RAM磁盘.最后,要调用kernel_thread(在arch/i386/kernel/process.c中)来启动init函数,这是第一个用户空间进程(user-space process).最后,启动空任务,现在调度器就可以接管控制权了(在调用cpu_idle之后).通过起用中断,抢占式的调用器就可以周期性地接管控制权,从而提供多任务处理能力.在内核引导过程中,初始RAM磁盘(initrd)是由阶段2引导加载程序加载到内存中的,它会被复制到RAM 中并挂载到系统上.这个initrd会作为RAM中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导.由于与外围设备进行交互所需要的模块可能是initrd的一部分,因此内核可以非常小,但是仍然需要支持大量可能的硬件配置.在内核引导之后,就可以正式装备根文件系统了(通过pivot_root),此时会将initrd根文件系统卸载掉,并挂载真正的根文件系统,initrd函数让我们可以创建一个小型的linux内核,其中包括作为可加载模块编译的启动程序,这些可加载的模块作为内核提供了访问磁盘和磁盘上的方法,并为其他硬件提供了驱动程序,由于根文件系统是磁盘上的一个文件系统,因此initrd函数会提供一种启动方法来获得对磁盘的访问,并挂载真正的根文件系统.在一个没有硬盘的嵌入式环境中,initrd可以是最终的根文件系统,也可以通过网络文件系统(NFS)来挂载最终的根文件系统.在GRUB命令中,我们可以使用initrd映像引导一个特定的内核,方法如下:grub> kernel /bzImage-2.6.14.2[Linux-bzImage, setup=0x1400, size=0x29672e]grub>initrd /initrd-2.6.14.2.img[Linux-initrd @ 0x5f13000, 0xcc199 bytes]grub> bootUncompressing Linux... Ok, booting the kernel.如果不知道要引导的内核的名称,只需使用/然后按下Tab键,就会显示内核和initrd映像列表对grub命令行进行加密a)使用命令/sbin/grub-md5-crypt来产生grub使用的密码[root@localhost pam.d]# /sbin/grub-md5-cryptPassword:Retype password:$1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1b)修改/etc/grub.conf加入password --md5 $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title之前这样重启系统时在grub的启动grub菜单时,想再按e命令进行编辑时,必须先按p键后输入密码才成.四.启动init服务加载完成内核之后,Kernel会启动init这个程序,init进程是所有进程的起点,也是Linux 内核启动后的第一个动作,所以这个程序的PID是永远是1,也是Red Hat Enterprise Linux 中执行的第一个程序,这个程序会根据Run Level来执行一些相关的程序程序。

相关文档
最新文档