LILO是一个在Linux环境编写的Boot Loader程序(所以安装和配置它都要在Linux下)。它的主要功能就是引导Linux操作系统的启动。但是它不仅可以引导Linux,它还可以引导其他操作系统,如DOS,WINDOWS等等。它不但可以作为Linux分区的引导扇区内的启动程序,还可以放入MRB中完全控制Boot Loadr的全过程。下面让我们看看几种典型情况下硬盘的主引导扇区和各个分区的引导扇区内程序的内容。

(1)计算机上只装了DOS一个操作系统

这种情况和刚才介绍的DOS硬盘启动相对应,如图13.6所示。

图13.6 只有DOS的硬盘分区图

(2)计算机上装了DOS和Linux操作系统,Linux由LOADIN启动,如图13.7所示。


              图13.7   用LOADLIN从DOS下启动

Linux在这种情况下,DOS的主引导区没有发生变化,分区的引导扇区也没有变化,只是在DOS的配置文件Autoexec.bat中加入了Loadin程序而已。

(3)LILO存放在Linux分区的引导扇区内,如图13.8所示。


          图13.8  LILO存放在Linux分区的引导扇区内

在这种情况下,LILO存放在硬盘上的一个基本分区内。如果希望从Linux启动,必须把Linux分区设为活动分区。而如果你想使用Windows,你必须把Windows所在的分区激活,然后重新启动以进入Windows,也就是说,你没办法在启动的时候选择从哪个操作系统进入,这样的多重启动显得太麻烦。回想Windows下的多重启动,你只要在引导时输入一个F3键,便能自动进入DOS6.22,这才是我们所希望的方式。Windows能做到,LILO当然可以做到,它还能做得更好。(LILO不仅允许你选择从哪个系统引导,它还允许你给Linux的内核传递参数)请看下面这种模式,如图13.9所示:


             图13.9   LILO在分区引导扇区内的多重引导

无论从哪个分区引导,你都可以选择地进入Linux或是DOS,不过从DOS分区启动时,

如果你不想进入Linux,你需要单步执行autoexec.bat以跳过LOADLIN。而从Linux分区启动时,你仅需要在启动时敲键盘输入操作系统的名字(这个名字可以由你在配置LILO时自己设定)便可以选择进入哪个操作系统。这张表完全是用于说明LILO安装位置的,其实你可能已经看出来了,既然无论从哪个分区都能进入所有的操作系统,那么,只要有一个活动分区就够了,从方便的角度来讲,从Linux分区启动是个不错的选择。

(4)LILO放在硬盘的主引导扇区里。

如图13.10所示。LILO如果在安装时选择作为MRB,它将负责Boot Loader的全过程,不过这样做有一定的风险,因为它将覆盖MBR,有可能使你原来的系统无法启动,所以你需要先备份主引导扇区。


图13.10 LILO放在主引导扇区里

LILO的功能实际上是由几个程序共同实现的,它们是:

 Map Installer: 这是LILO用于管理启动文件的程序。它可以将LILO启动时所需的文件放置到合适的位置(这些文件的位置由LILO本身决定)并且记录下这些位置,以便LILO访问。其实,当你运行/sbin/lilo这个程序时,Map installer就已经工作了,它将boot loader写入引导分区(原来的boot loader将被备份),创建记录文件—map file以映射内核的启动文件。每当你的内核发生变化时(比如说内核升级了),你必须运行/sbin/lilo来保证系统的正常运行。

  boot loader:这就是由BIOS读入内存的那部分LILO的程序,它负责把Linux的内核或其他操作系统的引导分区读入内存。另外,Linux的Boot Loader还提供一个命令行接口,可以让用户选择从哪个操作系统启动和加入启动参数。

ƒ 其他文件:这些文件主要包括用于存放Map installer记录的map文件(/boot/map)和存放LILO配置信息的配置文件(/etc/lilo.conf),这些文件都是LILO启动时必需的,它们一般存放在/boot目录下。

LILO在引导Linux的同时还可以向Linux的内核传送参数。前面我们提到了,LILO提供了一个命令行解释程序,当系统加载LILO,并在屏幕上显示了“LILO” 字样时,你可以按下Ctrl或者Shift键(不同版本的LILO可能有所不同,我的系统需要按下Tab键),这时会出现“LILO boot”字样,表明命令行解释程序已经被激活,可以从键盘输入了。如果你相应的系统引导提示符是“Linux”,“Dos”的话,你可以键入“Linux”启动Linux,或者键入“Dos”启动Windows。如果你选择启动Linux,此时你还可以在“Linux”后面加入一些参数,LILO可以把这些参数传递给内核。例如:

LILO boot: Linux 1 告诉内核按照单用户模式启动。

LILO boot: Linux ether=eth0,0×280,10 告诉内核你的第一块网卡的端口地址是0×280,中断号是10。

LILO提供许多种参数,如Debug,等等,具体这些参数和它们的作用,请你查阅LILO的 文挡。此外,并不是所有的硬件都需要加参数才能支持的。如果你的硬件设备在编译内核时已经被支持了,那么完全没有必要加参数。事实上,只有那些比较特殊 (也比较不常用)的设备,才需要在启动时设定参数值,明确它的端口地址和中断号,以节省大量的用于检测端口地址和中断号的启动时间。

象可以预设默认的启动选项一样,在/etc/lilo.conf中也可以预先定义启动时要输入的参数,这样就可以避免每次启动都要重复输入。让我们看一个具体的lilo.conf的例子, 例子的左边是Script的脚本程序,右面是对程序的解释。从这个例子可以看出,lilo.conf的编制思想,同DOS下的config.sys差不多。

# /etc/lilo.conf

# LILO configuration file

# gernerated by ‘liloconfig’

#

# Start LILO global section           /*LILO的通用配置块*/

append = “ether=eth0,0×280,10″    /*请注意,这就是向内核传递的参数,我们把它写在这里,就可以免去每次在启动时输入的麻烦*/

boot = /dev/hda2              /*LILO安装在硬盘1的二号分区的分区表上*/

delay = 50         /*给用户选择从哪个操作系统启动的等待时间*/

vga = normal               /*显示器设置为标准VGA*/

# ramdisk = 0              /*未安装虚拟启动盘*/

# End LILO global section      /*通用配置块结束*/

# Linux bootable partition config begins     /*用于启动Linux的配置块*/

root = /dev/hda2       /*Linux的根文件系统安装在硬盘1的二号分区上*/

image = /vmlinuz           /*选择根目录下的vmlinuz作为内核*/

lable = linux              /*启动选择的标识符为 linux*/

image = /zimage-2.4.18        /*在引导Linux时,可以选择多个内核。比如说我们编译了 一个新的内核,并想从它启动,只需把这行程序写在这里  ,当然,别忘了先运行LILO来改变Map文件。*/

label = Newkernel

read-only              /*以只读方式安装,防止启动中的误操作*/

#Linux bootable partition config ends     /*Linux配置块结束*/

#DOS bootable partition config begens         /*用于启动DOS的配置块*/

other = /dev/hda1            /*该操作系统的boot loader安装在硬盘1的一号分区的分区表内*/

label = dos                /*启动选择的标识符为 dos*/

table = /dev/hda           /*该操作系统的根目录在硬盘1的一号分区 上*/

# Dos bootab le partion config ends   /*Dos 配置块结束*/

Linux操作系统的LILO详解的更多相关文章

  1. Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  2. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  3. linux zip 命令详解

    功能说明:压缩文件. 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时 ...

  4. Linux 内存机制详解宝典

    Linux 内存机制详解宝典 在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于 ...

  5. Linux串口编程详解(转)

    串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接 ...

  6. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  8. linux cat 命令详解

    linux cat 命令详解 http://linux.chinaunix.net/techdoc/system/2007/11/16/972467.shtml adb shell su //这个不一 ...

  9. 【初级】linux rm 命令详解及使用方法实战

    rm:删除命令 前言: windows中的删除命令大家都不陌生,linux中的删除命令和windows中有一个共同特点,那就是危险,前两篇linux mkdir 命令详解及使用方法实战[初级]中我们就 ...

随机推荐

  1. linux shell 逻辑运算符

    一.逻辑卷标 逻辑卷标 表示意思 1. 关于档案与目录的侦测逻辑卷标! -f 常用!侦测『档案』是否存在 eg: if [ -f filename ] -d 常用!侦测『目录』是否存在 -b 侦测是否 ...

  2. linux驱动(一)

    编写模块必须先声明下面两句: #include <linux/module.h>               //这个头文件包含了许多符号与函数的定义,这些符号与函数多与加载模块有关 #i ...

  3. datatable 行列转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. eval(phpcode) 字符当代码执行

    eval(phpcode)eval() 函数把字符串按照 PHP 代码来计算.相当于在字符串两边分别加上PHP语 法标签 该字符串必须是合法的 PHP 代码,且必须以分号结尾. 如果没有在代码字符串中 ...

  5. C# Linq To DataTable 分组统计 DEMO

    DataTable dt = SQLLayer.Get工作量统计(beginDate, endDate);             var querySum = from t in dt.AsEnum ...

  6. MySQL中EXPLAIN解释命令详解

    MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表.explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句. 1.EXPLAIN的使用方法:在s ...

  7. C语言-07其它相关

    预处理指令 /* 不带参数的宏定义 1.所有的预处理指令都是以#开头 2.预处理指令分3种 1> 宏定义 2> 条件编译 3> 文件包含 3.预处理指令在代码翻译成0和1之前执行 4 ...

  8. asp.net mvc将html编译

    从数据库查询出来的值,如果包含html标签并且通过MVC绑定页面的话,那么他会通过浏览器编译为字符串显示,所以我们有得在从新的转一次: HtmlString hh = new HtmlString(M ...

  9. Android直接通过ip进行Http请求

    在测试环境,如果直接通过ip访问的话,比如:url:123.123.123/user/login.do?username=a&psw=b,这样是不行的,会报protocal协议错误,要写全称, ...

  10. 集成Facebook和Twitter的Model动画-b

    这个动画.  感谢大神分享 JPPopPresentAnimation.gif 要实现这个功能分两步走:第一步,先实现这个动画.第二步,0行代码集成到项目.也就是,你不用改原有项目的任何代码,只要把写 ...