Linux操作系统程序启动引导过程详细剖析

来源:岁月联盟 编辑:zhuzhu 时间:2007-09-03
Linux操作系统程序启动引导过程详细剖析内容简介:

Linux的一个吸引人的特性就是用户可以自行定制整个系统,你可是运行一个只有1M的“迷你”Linux,也可以运行一个几G的强大Linux。而无论你运行怎样的Linux,你都是先从引导程序开始运行的。对于普通用户,大多都是在个人电脑上运行Linux的。个人电脑,又叫PC机,是我们常见的使用Intel或AMD的芯片的电脑。当我们接通PC机的电源之后,CPU会执行第一条指令,第一条指令通常是使CPU能跳跃到BIOS的入口地址上,然后BIOS就开始进行开机自检,包括对内存等硬件进行检测,如果存在其它设备的也自带有BIOS(比如SCSI或RAID设置等),也会执行它们。完成自检后的BIOS会根据设定好的启动设备和启动顺序来启动真正的操作系统,如Linux(本文以Linux为例)。

对于PC机,有以下几种设备可以作为启动设备来使用:

1) 硬盘

这是最常用的启动设备,硬盘有IDE接口和SCSI接口的两种,由于IDE硬盘价格比SCSI硬盘要便宜的多,所以,大多数PC机都使用的是IDE硬盘。一台PC机中可能有多个硬盘,用户可以在PC机的CMOS设置哪块硬盘首先启动。

2) 软盘

软盘是PC机必备的设备之一。常用作安装系统或作为系统应急盘使用。也出现了很多一张软盘上的Linux系统。

3) 光盘驱动器

光盘驱动器也是PC机必备的设备之一,包括CDROM、DVDROM、以及各种刻录机等。现在多数用户都是通过光驱来安装Linux的。

4) USB盘

随USB盘的出现,许多主板也都开始支持从USB设备上来启动系统了。USB盘的容量远大于软盘,目前有取代软盘的趋势。

5) 网卡的Boot ROM

有一些网卡带有Boot ROM芯片,可将引导信息写入Boot ROM,许多主板都支持Boot ROM启动。常用于无盘工作盘环境中。

无论系统选择了哪一种启动设备,它都将会去将该设备起始地址的内容读入内存,如果你的启动设备是IDE硬盘,系统就会去去读取硬盘的第一个扇区(这个扇区通常被称做主引导扇区,又称MBR),并将这个扇区的内容读入内存,然后运行它。到这一步的时候是引导Linux操作系统的关键了,这一步将尝试去启动Linux的引导程序,如果找不到引导程序,将无法引导Linux。许多人在无法启动Linux的时候,其实大多都是引导程序损坏或是配置不当所造成的。

那么什么是引导程序呢?其实你每天打开电脑,所接触到的第一个程序就是引导程序。它的责任是载入操作系统内核软件并把控制权转交给它。对于Linux来说引导程序就是负责在启动计算机时装入Linux的Kernel,并将计算机的控制权交给Kernel,然后Kernel再进一步初始化剩余的操作系统,直到Linux显示用户登录画面。由此可见引导程序对于一个操作系统来是非常重要的。

Linux的引导程序有很多种,最为常见是lilo和grub:

1) lilo

lilo是用于Linux的灵活多用的引导程序。它并不依赖于某一特定文件系统,能够从软盘和硬盘引导Linux内核映像,当然它也能够引导其它操作系统。在grub出现之前,lilo可谓Linux引导程序的最佳选择。而目前仍然也很多人在使用它。

2) grub

grub是比lilo新的一个功能强大的引导程序。专门处理Linux与其他操作系统共存的问题。它可以引导的操作系统有Linux、OS/2、Windows系列、BeOS、Solaris、FreeBSD、NetBSD等。它的优势在于支持大硬盘、支持开机画面(能支持到1024x768的画面)、支持菜单式选择,并且分区位置改变后不必重新配置,使用非常方便。较新发行的各版本Linux大多采用grub作为默认的引导程序。

3) 其它引导程序

如果你没有安装lilo或grub,或者你的lilo或grub损坏了(比如不小心覆盖了MBR),那么你将无法直接引导Linux。还好,这时候你还可以通过其它方式来引导,比如:Linux的引导盘,或者是利用loadin、syslinux等程序来从ms-dos中载入Linux。

如果引导程序成功后,Linux内核就接管了系统,开始了Linux的启动过程(关于Linux的启动过程将另文介绍)。但如果引导过程的发生错误又将如何处理呢?

1.首先分析屏幕显示的错误信息

引导程序本身所显示的错误信息都是有含义的,需要认真阅读。比如:

lilo的错误信息 

当lilo启动完成时,会在屏幕上显示字符串"lilo",其实这其中的每个字母背后都对应着特定的操作。如果lilo在某个部分出了错,我们就可以根据屏幕上当前出现的字母推断出故障原因。比如:当屏幕上什么都没出现,就可能表示lilo还未被安装或者lilo所在的分区未被设为active状态。而屏幕显示”li“,则表示lilo引导程序的第一部分能够将lilo引导装入程序的第二部分装入,但却不能执行。这可能是因为硬盘参数设置不当或者是因为在移动/boot/boot.b时没有运行map安装程序。而屏幕显示"lil",则可能是介质故障或硬盘参数设置不当,无法从map文件中装载描述符表......,详细的错误信息解释也可以从相关网站上找到。

Grub的错误信息:

和lilo相比grub的信息要好理解一些,因为它是直接用英语来表达的,而不是用符号。比如:"Hard Disk Error"、"Read

Error"、"Selected disk doesn't exist"、"Disk geometry error"、"Device

string unrecognizable"、"Attempt to access block outside

partition"、"Partition table invalid or corrupt"等。详细的错误信息解释也可以从相关网站上找到。

2.通过光盘或软盘引导进入系统,修复原引导程序

通过分析屏幕显示的错误信息后,应该能大致找到原引导程序的出错原因。这时候可以通过光盘或软盘引导进入系统。许多Linux的发行光盘就是可以启动的,比如:slackware就是很好的引导光盘。进入系统后,可以重装引导程序或者重新设置引导程序。