综合资讯 技术文章 原文阅读 在线商城 下载专区 DATASHEET 技术论坛 商务频道

电子技术 | 技术资料 | 嵌入式系统 | 单片机专题 | DSP专题
EDA/PLD专题 | 电源技术专题 | 电子制作专题 | 其他综合 | 芯片选型

所在的位置:首页在线阅读嵌入式系统linux 笔记(一)正文
 
系统管理—启动—lilo(lilo原理-man手册-lilo配置)

  

 lilo原理

 


1一般的开机引导过程。
    在PC机上,最初的启动由BIOS完成。当开机自检结束时(Power-On Self Test,POST),BIOS尝试读入软盘的第一个扇区,把它看作引导扇区。若没有软盘,则尝试读入硬盘的第一个扇区。新的BIOS可以改变这种次序,先从硬盘启动。甚至从光盘启动。由于大多数BIOS不提供SCSI支持,若要从SCSI磁盘启动,SCSI适配器要提供他自己的BIOS.如果什么都找不到,老的BIOS会启动内置的ROM BASIC,或直接打印"NO
ROM-BASIC".
    操作系统的启动分几步完成。由于引导扇区比较小,通常它主要任务是读入第二个loader,第二个loader再读入第三个loader,直到整个操作系统被完全读入。

    DOS 引导区:
OFFSET
0x000   JMP xx          Near jump into the program code
0x003   Disk parameters
0x03E   Program code loading the DOS kernel
0x1FE   0xAA55          Magic number for BIOS
     可见,引导区的结构相对比较简单。它的长度总是512字节。以上,磁盘参数只对DOS有意义。重要的是引导区从0开始,以BIOS的magic number 结束。
     从软盘启动比较简单,因为只有一个引导扇区:第一个扇区。硬盘则困难一些,它被分成很多分区。但是,BIOS根本不管分区信息,它象对待软盘一样对待硬盘,仍读入第一个分区,叫作:master boot record.(MBR).
    所以MBR也应该和上面介绍的结构一样:从0开始,以BIOS的magic number 结束
在MBR的最后部分,有分区表。如下图:

OFFSET  Length
0x000   0x1BE code loading and starting the boot sector of the active
              partitian
0x1BE   0x010   partition1
0x1CE   0x010   partition2
0x1DE   0x010   partition3
0x1EE   0x010   partition4
0x1FE   0x0012  0xAA55      Disk parameters

每个分区信息占16字节,结构如下:
       1 BOOT  Boot flag: 0=not active ,0x80 active
       1 HD    Begin:head number
       2 SEC  CYL  Begin:sector and cylinder number of boot sector
       1 SYS System Code:0x83 linux , 0x82 linux swap etc.
       1 HD    End:head number
       2 SEC  CYL  End: sector and cylinder number of boot sector
       4 low byte  high byte        Relative sector number of start sector
       4 low byte  high byte        Number of sectors in the partition
    所以硬盘可以有4个分区。这四个分区叫做主分区:primary prititions.假如它们不够用,可以设置所谓的扩展分区。     扩展分区包含至少一个逻辑分区。扩展分区的第一个扇区结构类似MBR,它的分区表的第一表项对应第一个逻辑分区。如果存在第二个逻辑分区,那么分区表的第二个表项就包含了一个指针。这个指针指向第一个逻辑分区后面的一个地址。这个地址包含一个分区表。该分区表的第一表项
对应第二个逻辑分区。这样就组成一个链表,从而扩展分区可以有任意多的逻辑分区。
    每一个主分区和扩展区都包含一个引导扇区。系统只能从这几个地方之一启动。BOOT标志决定哪个区被引导。
    原来,只有主分区,因此,MS-DOS的fdisk和大多数同类工具只能激活主分区..MBR的代码要作以下的操作:
    1:确定活动分区。
    2:使用BIOS,将活跃分区的启动扇区读入。
    3:跳到启动扇区的0位置。
    MBR的空间足够完成这些工作。如上所述,每个分区理论上包含一个引导扇区,而且,存在的第二个硬盘也包含和第一个类似的结构。MBR完全可以容纳一个复杂的引导程序。即所谓的boot manager,动态的决定活动分区。Linux 为我们提供了lilo

2 LILO:the linux loader
   LILO引导扇区包括一个分区表的空间,所以,LILO即可以安装在MBR中,也可以安装在某个分区的引导扇区。LILO拥有DOS引导扇区的所有功能,而且,它还可以引导逻辑扇区和第二硬盘分区。LILO还可以和另外的引导者合作(例如:NT loader),这样,用户就可以有很多选择。
(注:以下几个标题,为防止引起歧义,用原文)
2.1 LILO started by MS-DOS MBR
如果系统至少有一个linux主分区,(非交换区,且在第一硬盘上),那么LILO就可以安装在这些分区中的一个。当 LILO对应分区被激活后,引导过程如下:
    BIOS 读入 MBR
MBR  读入 活跃主分区:LILO所在的分区。
LILO 引导Linux或另外的操作系统。
要引导其它OS且不用LILO很简单,激活那个分区。Linux分区没有任何变化,非常安全。

2.2 LILO started by a boot manager
假如用户不想删除老的boot manager,或者某个OS LILO不能引导,可以考虑该途径。
1. 2. 假如 boot manager 可以引导第二硬盘分区,linux可以装在第二硬盘上。
3 有些 boot manager 甚至可以引导逻辑分区,那LILO就可以装在逻辑分区上。
当然,也要注意以下情况:
1 某些操作系统直接改写MBR,这会将原来的boot manager破坏。
2 重新分区会破坏扩展分区的引导扇区,这是LILO可能要重装。
    当安装新的系统时,是否要重新安装(linux)依靠新的boot manager,要么LILO引导扇区被注销,要么boot manager 为它提供一个引导项。重新分区或分区格式化会将LILO和linux全部删除。

2.3 LILO占据MBR
假如整个linux系统都在第二硬盘上,且第一硬盘没有扩展分区,那么,LILO只有装在MBR上。这样,会将老的MBR冲去,所以,在安装LILO前,要将老的MBR(包括分区表)做一个备份。DOS下有很多工具可以完成这个任务。在linux下,这样备份:

          # dd if=/dev/hda of=/backup/MBR bs=512 count=1

写会使用命令:
    # dd if=/backup/MBR of=/dev/hda bs=446 count=1
这样,原来的MBR就被写会但不包括分区表。如果分区表也要恢复,那么bs=512.
注意,这样,新的分区表会被破坏!

2.4 LILO 文件
    与LILO有关的文件通常放在/boot/下,配置文件lilo.conf在/etc/下。包含实际引导系统信息的映射文件有/sbin/lilo安装。对于任何LILO安装,配置文件应该被定置以适合个人需要。
The configuration file:配置文件
    基本上,配置文件是一些变量赋值。每一行包含一个标志变量或一个变量赋值.配置文件被特殊的变量赋值分成几个区,每个区引导一个linux或其它OS.
    下面解释常见的行:

boot = device
说明那一个设备或哪一个分区包含引导扇区。假如没有给boot赋值,取当前缺省值。

compact
激活一种模式,在此模式下,LILO一次向BIOS请求读入相邻的几个分区。这极大的缩短了装载时间,特别是从软盘启动。

delay=tenths
以10秒为单位,规定LILO在引导第一个引导配置前应等待用户的时间。若没有定义,则直接引导。

Linear
使LILO生成线性地址,而不使用通常的Sector/Head/Cylinder机制。Linux地址机制可以不依赖磁盘的物理结构。

install = boot sector
    使用指定的boot sector写入引导扇区,缺省用/boot/boot.b

disktab=disktab
    使用指定的disktab,缺省使用/boot/disktab.disktab保存了硬盘物理结构信息。

map=map file
说明映射文件的路径。

message=file 指
定一个文件,该文件的内容将会在LILO引导是被显示。假如没有说明该文件,那么就只会出现"LILO"。

verbose=level
    说明LILO的调试级别。从0(不显示任何信息)到5(所有的状态信息)。

backup = backup file
    以前引导扇区内容的备份文件。缺省使用/boot/boot.device number

force-backup=backup file
和backup 相同,当时假如备份文件存在,被覆盖。

prompt
    指定要用户通过键盘选择要引导的内核。不会缺省选择。

timeout=tenths
设置一个超时值,在此时间内必须有键盘输入,否则用第一个配置。类似,假如超时,就不能再输入密码。一般情况下,该取缺省值,无穷大。
    注:delay 与 timeout的区别(joe 认为),delay 是"LILO"出现后用户必须有输入的最长时间。timeout 是用户在按了任意键后,系统等待选择,用户两次击键的最大间隔时间。

serial=port,    bps parity bits
    设置串口参数。如果LILO会从该文件获取串口参数的话。如果其中之一无效,那所有三个参数都无效。Port从四个标准串口选择一个:0对应COM1 或者/dev/ttyS0.。支持的波特率范围为:100-9600。所有校验设置都支持(n:none,e:even,o:odd)bits为7或者8。缺省为serial=0,2400n8.

Ignore-table
    让LILO忽略被破坏的分区表。

fix-table
    允许LILO将每个分区的(sector/head/cylinder)地址转化为线性地址。通常,分区地址从cylinder boudary开始。某些操作系统,会改变这一点。由于LILO只能将它的启动扇区写于两种地址都一致的分区上,不正确的3D地址可以用fix-table来纠正。但是,这种纠正不能被保证是永远的,所以重分区以保证对齐cylinderboudary 是最好的选择。

password=password
    为引导配置设置password

restricted
    放松对password的限制。只有用户想传附加的启动参数给内核时才需要password

optional
    允许配置的几个内核有错误的,或者不存在,如果不说明optional,LILO遇到这种情况就会打印一些错误信息然后退出。

    每个从LILO引导的配置从image行开始。
        Image = kernel
            Label = name
Image包含要引导的内核。Label是给用户选择用的。Image行通常指向一个设备, 例如/dev/fd0,可以找到内核的范围用range来注明。
        range = range
range可以用start sector -end sector 或者 start sector + length 表示。例如:
        image = /dev/fd0
            label = floppy
            range = 1+512
以下变量赋值有可能出现:
append=string
    将string作为引导参数传给内核。例如,硬件参数。
literal=string
    和append查不多。但是,他会冲掉原来的设置。所以不能被全局说明。
ramdisk=size
    设置RAM disk的大小。
read-only
read-write
    设置根文件系统的访问方式。
root=device
    设置根文件系统存在的设备。
vga=mode
    屏幕设置。可能模式为:normal,extended 和ask. 。
以下设置是针对别的操作系统的:
loader=loader
    说名用来引导操作系统的文件。缺省为 /boot/chain.b . 另外,LILO包含以下的loader:
os2_d.b 可以从第二硬盘上引导os/2
any_d.b 在引导操作系统之前试图将两个硬盘的次序颠倒,从而可以引导第二硬盘上的os.
table=device
    说明一个设备,该设备的某个分区上存放要引导的os.假如没有说明table,
LILO就不会将该信息传给要引导的osunsafe
    关掉对要引导的os的检查。只有要从软盘引导时,才使用该设置。没有该设置,每次map installer开始运行时,引导盘都要插入软驱。
The disktab file
disktab文件包含LILO要引导的设备的物理结构信息。通常,这些信息可以从设备驱动程序获取。所以,只有这种方法不行时才会用到disktab 文件。在此情况下,如果文件不能用,LILO报告错误信息:
        geo_query_dev HDIO_GETGEO(dev …)
或者
        HDIO_REQ not supported for your SISI controller
        Please use /boot/disktab
然后,物理结构信息就必须手工地输入。
# /boot/distab-LILO parameter table
#
#This table contains the geometry parameters for SCSI and
# IDE disks,which can not be recognized automatically
# Entries in this table overwrite recognized parameters!
#
    # Dev. BIOS Secs/ Heads/ Cylin - Par.
# num. Code track cyLin.  Ders. Offset
                           (optional)
#0x800 0x80 32 64 202 0 # /dev/sda
各个域含义如下:
    0x800
        设备号.由主副设备号组成。
        设备号.由主副设备号组成。
    0x80
        设备的BIOS 码。0x80代码系统的第一个硬盘。0x81第二个,……
        所有同一硬盘上的分区该值相同。
    32,64,203
        sector 数目(每个track)
        heads 数目
        cylinders 数目
    0
        分区的开始。也可以从分区表中读,所以可以不说明。

2.5 LILO 启动信息
在启动过程中,LILO会显示'LILO',如果LILO出错退出,可以根据显示来判断系统的出错原因。
没有信息:LILO根本就没有被读入,没安装LILO,或LILO驻留的分区没被激活。
    Lnumber : LILO的第一部分被读入并开始执行。但第二部分不能被读入。后面的数字表明出错原因。这可能是由于硬盘的物理错误或不正确的物理结构信息。
    LI: LILO的第一部分可以读入第二部分,第二部分执行时出错。这可能是不正确的物理结构信息或重装了boot.b而没有运行LILO重新安装。
    LIL:LILO的第二部分启动起来了,但是不能从map文件读入descriptor tables.这说明不正确的物理结构信息或物理错误。
    LIL?: LILO的第二部分被读到不正确的地址。原因同LI
    LIL-: descriptor tables有错。这可能是不正确的物理结构信息或重装了map file而没有运行LILO重新安装。

 

man手册
文 档 名:Lilo.conf (LILO 配置文件) 手册
翻    译:ZOE [中国 Linux 论坛 翻译作坊版版主]
发布日期:28 July, 1995
翻译日期:一九九九年十一月

 

LILO.CONF(5)
名称
        lilo.conf-lilo的配置文件。
描述
        本文件,缺省位置为etc/lilo.conf,由引导装入程序的安装程序
        LILO 读取。
其表现可能如下:
        boot=/dev/hda
        delay=40
        compact
        vga=normal
        root=/dev/hda1
        read-only
        image=/zImage-2.5.99
            label=try
        image=/zImage-1.0.9
            label=1.0.9
        image=/tamu/vmlinuz
            label=tamu
            root=/dev/hdba
            vga=ask
        other=/dev/hda3
            label=dos
            table=/dev/hda


    本配置文件指定 LILO 使用在/dev/hda路径上的主引导记录。(关于使用 LILO 的不同方式以及其与其他操作系统间交互作用,参见 LILO 文档中的USER.TEX)

    启动时,引导装入程序会等待 4 秒的时间(40 deciseconds)让你按SHIFT 键。如果未按,则上述提及的第一核心映象(zImage-1.5.99,可能你5分钟之前才装上的)将被启动。如果按下了SHIFT键则引导装入程序就会问你要启动哪一个映象。 万一你忘了该选择启动哪个映象, 按[TAB](或[?]如果你有一个美国标准语键盘的话)就会有个菜单给你选择。你在这时可以选定或者启动这个全新的内核,或者启动一个原来可靠的内核,或一个在其他根文件系统上的内核 (当你在自己常用的根文件系统上做了什么傻事),或者启动一个不同的操作系统。在 LILO.CONF 中提及的映象可多达16 个。

    由上可见,一个配置文件以一系列的全局选项开始(如例子中的开始的6 行),随之是不同映象选项的描述。在映象描述中的选项将会覆盖全局选项所设定的内容。

全局选项部分
    其有许多可能的关键词。下面的描述几乎是照抄于 USER.TEX(仅有少许缩略)

backup=backup-file
    将原引导扇区拷贝到备份文件(其也有可能是一个设备,如/dev/null)而非/boot/boot.NNNN

boot=boot-device
    设定包含引导扇区的设备的名称(如一个硬盘的分区)。如果未指定该关键字引导扇区将从当前作为根文件系统安装的设备中读取(或者可能也会写入)。

change-rules
    定义引导时对分区类型数的改变('hiding')。详细资料请参看user.tex 中“分区类型改变规则“一节。

compact
    试图将相邻扇区的多次读取请求合并成一次读取请求。这样就大幅度地减少了读取时间,并使系统描述(MAP)更小。在从软驱进行读取时尤其要使用 'compact' 选项。

default=name
    使用特别指定的映象作为默认的启动映象。如果未设置 'defaul' 选项,则将使用在该配置文件中最早出现的那个映象作为启动映象。

delay=tsecs
    指定引导装入程序在启动第一个映象之前应等待的时间为多少个 10 分之一秒。这对于在键盘可用后立即从硬盘上启动系统很有用。如果未设置 'delay' 选项或设为 0,则引导装入程序就不会等待。

disc=device-name
    定义特定硬盘的非标准参数。具体细节参见 USER.TEXT 中的硬盘分区结构一章。其对于定义 'BIOS=' 参数尤其有用。若你的硬盘的 BIOS 数据是 0x80 ,0x81(十六进制)等等,将无法判断哪一块 Linux 磁盘与哪一块 BIOS 磁盘相对应(因为这决定于 BIOS 的设置和 BIOS 的类型)。因此若你采用的是非一般的安装,那你就需要说明 LINUX 磁盘和 BIOS磁盘间的对应关系。比如:
        desk=/dev/sda
            bios=0x80
        disk=/dev/hda
            bios=0x81
    就会说明你的 SCSI 盘是第一个 BIOS 盘,而你的(主硬盘)IDE盘是第二个 BIOS 盘。

disktab=disktab-file
    指定磁盘参数表的名称。若未指定“disktab”选项,则磁盘描述(Map)装入程序会寻找 /etc/disktab 文件。并不提倡disktab选项使用。

fix-table
   这个选项使得 LILO 可对分区表上的 3D 地址进行调整。 每个分区表入口包含有该分区的最前和最后一个扇区的 3D 地址(扇区/磁头/柱面 以及线性地址。 如果一个分区不是以磁道号定位的, 且某个其他操做系统 (如PC/MS-DOS 或 OS/2 ) 正在使用同一磁盘,他们就有可能导致 3D 地址的改变。仅当分区的两个地址类型相一致时 LILO 才能保存其启动扇区。 如果设定了 'fix-table' 选项,lilo 就可重新调整错误的 3D 地址。

   警告:这并不能保证其他的操做系统以后就不会试图重设该地址。也可能这种变化有其他不可预料的副作用。正确的修改方式是用可以轨道定位分区的程序来重新对磁盘驱动器分区。并且,对一些磁盘来说如一些可进行地址转换的大的EIDE磁盘),在某些情况下, 会不可避免的出现分区表入口相冲突的现象。

force-backup=backup-file
    与 'backup' 类似,但若有旧的备份文件存在则会将其覆盖。

ignore-table
    告知LILO忽略作废的分区表。

install=boot-file
    将指定的文件作为新的引导扇区来安装。若未设置 'install' 选项,则将boot/boot.b作为默认缺省值使用。

linear
    产生线性扇区地址而非“扇区/磁头/柱面”地址。线性地址不依赖于磁盘的分区结构,且在运行时被翻译。注意如果使了'linear'选项则可能使启动盘不能被移植,这是因为BIOS中用于决定磁盘分区结构的服务对软盘的作用不稳定。在对大硬盘使用'linear'选项时,由于3D扇区地址在启动前是未知的,故 /sbin/lilo 可能会产生对不可访问的磁盘区域的一个参考。

lock
    允许自动记录引导命令行,作为以后启动的默认缺省值。这样,在手工取消之前lilo会锁定一个选项。

map=map-file
    定位磁盘描述(MAP)文件。若未指定 'map' 选项,就会使用 /boot/map文件。

message=message-file
    指定一个含有在运行启动提示符前显示的信息的文件。在显示出 'LILO' 后等待按键的时间里不会有信息显示。在信息中,用FF字符([Ctrl +  L])清空本地显示器。信息文件的大小限制在65535字节以内。如果信息文件被改动或取消则必须重建磁盘描述(Map)文件。

nowarn
    使关于以后可能危害的警告失效。

optional
    使单一映象选项 'optional' (见后)应用于所有映象。

password=password
    使单一映象选项 'password=...' (见后)应用于所有映象。

prompt forces
    不等待任何的按键事件发生就直接进入启动提示符模式。如设定了 'promp'选项而没设定 'timeout' 选项,则不能自行启动。

restricted
    使单一映象选项'restricted'(见后)应用于所有映象。

serial=parameters
    允许使用来自串行口的控制。指定的串行口将会被初始化,引导装入程序就会从该串行口及PC键盘接受输入。在串行线上发送暂停(break)指令和按下键盘上的 SHIFT 键的效果是一致的,都会引起引导装入程序的注意。如果串行线比键盘输入更不安全,如该线与 MODEM 相连时,则所有启动映象都应设密码加以保护。参数串的格式如下:

            <port>[,<bps>[<parity>[<bits>]]]

    <port>:表串行口的数目,最小为0。0对应于COM1并指定为/dev/ttyS0,等等。所有四个端口均可用(如果可以使用的话)。
    <bps>:串行口的比特率。 以下比特率可被支持:110,150,300,600,1200,2400,4800及9600bps。默认值是2400bps。
    <parity>:表在串行口上使用的奇偶效验。引导装入程序忽略输入的奇偶效验位,并除去第八位。以下字符可用来描述奇偶效验:n表示无相同,e表示偶数的相同,o表示奇数的相同。
    <bits>:在一个字符中的位的数目。仅支持7或8位。若奇偶效验是 'none' 则默认是8,若奇偶效验是'even'或'odd',则默认是7。

    若设定了'serial'选项,则'delay'的值就自动上升为20。例如:serial=0,2400n8就会用缺省值参数来安装COM1。

timeout=tsecs
    为键盘输入设定一个超时选项(以10分之一秒为单位)。若在指定的时间内没有按键则第一个映象就会被自动启动。同样,如过用户停顿过长则密码输入就会被取消。默认的超时值是无限。

verbose=level
    用以打开大量的进程报告。数目越大则给出的冗长输出越多。如果在 LILO命令行中附加参数 -v,则冗长标准也相应增加。最大的冗长标准是5。
    另外,内核配置参数 append,ramdisk,read-only,read-write,root以及vga都可在全局选项中被设定。如果在相应的核心映象的配置栏中没对其加以指定,该设定值其就会被用做默认的缺省值。

单一映象部分
    一个单一映象或者以一行
        image=pathname
开始(以提示含有一个LINUX内核的启动映象的文件或设备),或以一行
        other=pathname
开始以提示启动其他独立的系统。

    在前一例中,如果一个映象行指定是从一个设备启动,则必须用
        range=start-end
提示被描述的扇区范围。
    在后一例中,有3个选项可供选择。

    laoder=chain-loader
        该参数指定了将使用的连锁装入程序。使用默认缺省/boot/chain.b。如果是从其他设备而非第一硬盘或软盘启动则必须指定连锁装入程序。

    table=device
        其指定含有分区表的设备。若未指定该参数,引导装入程序就不会把分区信息传送到已启动的操做系统。(一些操做系统有其他的方式来决定从哪个分区来启动。如,MS-DOS将其的启动盘分区结构或分区保存到引导扇区里)。应注意若一个已定位且引用了 'table' 选项的分区表被修改则必须重新运行/sbin/lilo文件程序。s

    unsafe
        在创立磁盘描述(Map)时不要访问启动扇区。 这将取消一些正确性检查,包括分区表检查。如果启动扇区是在一个固定格式化的软盘驱动器上,则在运行定位装载程序时使用 unsafe 选项就不需插入可读取的磁盘到驱动器里。

    以下选项在这两例中均可运用。

label=name
    引导装入程序使用每个映像说明的主文件名(不包含路径)来标识该映像。通过设定变量'label'可使用不同的名称。

alias=name
    通过指定一个别名可对同一个目录使用第二名称。

lock(见前)

optional
    删去在磁盘描述表创立时不可用的映像。这对于在指明测试并不总是可用的内核很有用。

password=password
    用密码保护映像。

restricted
    若是在命令行被指定各参数则只在启动映像使需要输入密码。

内核选项部分

    如果被启动的映像是一个LINUX内核,则可以将命令行参数传送到该内核。

append=string
    将指定的各选项增加到传送于内核的参数行。其典型的运用于指定不能完全自检或彻查对其有危害的硬盘的参数。比如:
        append="hd=64,32,202"

literal=string
    与 'append' 类似,但会取消所有其他选项(如根驱动器的设定)。由于用'literal' 选项可在无意之间删掉重要的选项,故该选项不能设在全局选项中。

ramdisk=size
    该选项指定了任选RAM磁盘的大小。0 表示不应创立任何RAM磁盘。若不指定该参数,则使用在根文件系统中建立的RAM磁盘大小。

read-only
    该参数指定根文件系统应该以只读的形式装载。典型的是,该系统的起始程序稍后将以可读写方式重新装载根文件系统。

read-write
    其指定根文件系统应以可读写方式装载。

root=root-device
    该参数指定应作为根文件系统装载的设备。如果目前使用的是指定的名称,则根驱动器就设在根文件系统目前所在的设备上。如果根设备被 -r 参数所修改,则使用相应的设备。若未指定 'root' 参数,则使用包含核心映象的根设备设置(该设置是编译内核时在内核的 Makefile 文件中用 ROOT_DEV变量设定的,并稍后可用 rdev(8)程序修改)

vga=mode
    其指定在启动时应选择的 VGA  文本模式。 下列数值可被识别 (忽略大小写):

        normal:选择普通 80x25 文本模式。
        extent(或ext):选择 80x50 文本模式。
        ask:停止并要求用户的输入(在启动时)
               <number>:使用相应的文本模式。在启动时用vga=ask选项或按[Enter]都可获得一个可用模式的列表。

    若未指定该参数,则使用在核心映像中获得的 VGA 文本环境。(该设置是编译内核时在内核的 makefile 文件中用 SVGA_MODE 变量设定的,稍后可用 rdev(8)程序修改)

参见
    lilo,rdev(8)
    lilo的发布版本来源于广泛的文件,以上部分只是这些文件的选录。

 

 LILO配置-LILO配置攻略


  LILO(Linux Loader)是Linux自带的一个优秀的引导管理器,使用它可以很方便地引导一台机器上的多个操作系统。与其他常用的引导加载程序相比,LILO引导方式显得更具有艺术性,对其深入的理解,将有助于我们方便地处理多操作系统、网络引导、大硬盘及大内存等诸多棘手的问题。

  通常我们谈到LILO,会涉及到两个方面——LILO引导程序和LILO安装命令/sbin/lilo。为了不至于混淆这两个概念,本文将用LILO表示LILO引导程序,而lilo表示/sbin/lilo。

  一般地,LILO使用一个文本文件/etc/lilo.conf作为其配置文件。lilo读取lilo.conf,按照其中的参数将特定的LILO写入系统引导区。任何时候,修改了/etc/lilo.conf,都必须重新运行lilo命令,以保证LILO正常运行。lilo.conf使用的配置参数很多,配置起来也相当复杂。下面以RedHat Linux为例作一些初步探讨,RedHat的lilo程序包版本为0.20,别的Linux发行版本可能会有所出入,但不会太大。

  lilo.conf文件中的配置参数分为两部分,一部分是全局参数,另一部分是引导映像参数。与Linux系统其他的配置文件一样,“#”号后的一行文字表示注释。

一、LILO的全局参数

  全局参数是全程有效的,它可以出现在文件lilo.conf中的任何地方。以下是具体的参数项:
  1.backup=backup-file
  在装入LILO之前将原先的引导区备份到backup-file,而不是RedHat 缺省的/boot/boot.NNNN。也可以备份到一个设备上,如: /dev/null。注意:如果原先已有一个同名文件,该参数将被忽略。我们可通过这个备份恢复原先的引导扇区:
  dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
  原先的MBR。(注:虽然boot.NNNN有512字节,但只能恢复前446字节到MBR。)
  2.boot=boot-device
  指定一个用于安装LILO的设备。通常LILO可安装在如下几个地方:
  MBR:第一个硬盘的主引导区, 对应于/dev/hda、/dev/sda等。
  Root:Linux根分区的超级块(Super block), 对应于/dev/hda1、/dev/hda2、/dev/hda5、/dev/sda1、/dev/sda5等。
  Floppy:LILO安装在软盘上,对应于/dev/fd0。
  不指定时,lilo缺省安装在根分区超级块上。
  3.compact
  该参数用于优化LILO,产生一个更小的“map”文件。如果在软盘上安装LILO,强烈推荐使用此参数。
  4.default=name
  指定缺省引导的操作系统。如default=dos 表示将label为DOS的系统作为缺省引导的操作系统。如不指定该参数,排在lilo.conf中的第一个操作系统将作为缺省操作系统。
  5.delay=tsecs
  在没有指定“prompt” 参数时,LILO将立即引导缺省的操作系统,“delay”参数在这之间插入一段延时,单位是1/10秒。
  6.disk=device-name
  为某些非标准硬盘定义参数。其内部还包括有几个可选的子参数。
  bios=〈bios_device_code〉:  设备号。十六进制数0x80表示第一硬盘;0x81表示第二硬盘,依此类推。
  sectors=〈sectors〉:硬盘扇区数。
  heads=〈heads〉:硬盘磁头数。
  cylinders=〈cylinders〉:硬盘柱面数。受系统BIOS限制,柱面数必须在1024以内。
  partition=〈partition_device〉:用于物理定位特殊硬盘上的分区,有一个子参数start。
  start=〈partition_offset〉:每一分区的起始扇区。
  例如:
  disk = /dev/sda
  bios=0x80
  #指定SCSI硬盘为第一硬盘
   sectors = 32
   heads = 64
   cylinders=632
  #硬盘参数为632/64/32
  partition=/dev/sda1
  start=2048
  #第一分区起始扇区为2048
  partition = /dev/sda2
  start=204800
  #第二分区起始扇区为204800
   partition = /dev/sda3
    start = 500000
   partition = /dev/sda4
    start = 900000
  当机器上有两块硬盘,一块为SCSI硬盘,另一块为IDE硬盘时,LILO很有可能无法自动识别它们的主、从顺序,这时可进行如下设置:
  disk = /dev/sda
   bios = 0x80
  disk = /dev/hda
   bios = 0x81
  #SCSI硬盘为主硬盘,IDE硬盘为从硬盘
  该参数是为Linux无法识别的硬盘准备的,一般Linux可以正确识别和使用大多数硬盘,除非最坏的情况,否则不用设置它。
  7.force-backup=backup-file
  类似“backup”参数,但是将覆盖原有的同名文件。
  8.ignore-table
  通知lilo忽略无效的硬盘分区表。
  9.install=boot-sector
  LILO实际上包含有几个部分,而这几部分都存放在/boot/boot.b文件中。如果忽略“install”参数,则lilo认为install=/boot/boot.b。
  10.linear
  产生用于替换硬盘sector/head/cylinder地址(硬盘几何参数)的linear扇区地址。linear地址在运行时产生并且不依赖于硬盘几何参数。某些SCSI硬盘和一些以LBA方式使用的IDE硬盘可能会需要使用这个参数。注意,在将LILO安装到软盘上时不能使用“linear”参数。
  11.lock
  出现LILO提示后立即按最近一次的引导映像启动计算机。也就是说,当我们在lilo.conf中加入了该参数,然后运行lilo安装LILO,再重新启动计算机,这时LILO会提示我们选择引导哪一种操作系统,这一选择将被LILO记录下来,即“锁定”,下次启动计算机时,LILO将忽略“delay”、“prompt”等参数及键盘输入而直接跳转到其“锁定”的操作系统。
  12.map=map-file
  指定map文件。 没有本项时缺省使用/boot/map,每次执行lilo命令都会产生一个新的map文件。
  13.message=message-file
  该命令用于指定一个包含注释信息的文件,该文件将在系统打印出字符串“LILO”之前显示。如果在LILO启动时想获取较多的信息,可以编辑一个文件,再使用该命令就可以了。文件中如果包含有ASCII码为0xFF的字符(Ctrl+L)则表示清屏。注意,文件的大小不能超过65535个字节。每次文件改变之后,都必须重新运行lilo命令重建map文件,以保证其正常显示。
  14.optional
  当用于启动的引导映像不存在时,该参数使lilo忽略它。这对用于测试一个不长期存在的Linux核心是有用的。
  15.password=password
  为LILO设置口令保护,每次重新启动计算机提示用户输入口令。设置了口令后,建议将lilo.conf的文件属性改为600,以免让非root用户看到口令。
  16.prompt
  给出“boot:”提示,强制LILO等待用户的键盘输入,按下回车键则立即引导默认的操作系统,而按下Tab键则打印可供选择的操作系统。当“prompt”被设置而“timeout”没有被设置时,系统会一直处于等待状态而不引导任何操作系统。不设置该参数时,LILO不给出“boot:”提示而直接引导默认操作系统,除非用户按下了Shift、Ctrl、Alt三键中的任何一个。大多数情况下,如果你的硬盘上有多个操作系统,建议使用参数,它留给用户一个选择的余地。
  17.restricted
  与“password”联用,使“password”仅作用于在LILO提示后有命令行输入的时候。
  18.serial=parameters
  使用串行口控制。这将初始化指定的串口,并将使引导管理器能接受来自串口的输入。从串口发送一个中断信号相当于从控制台键盘上按下Shift键,它同样会被LILO捕捉到。如果不能保证来自串口的访问和控制台一样安全,比方说有一个modem连在串口上,建议为每个引导映像加上口令保护(password)。参数串有如下语法:
  〈port〉[,〈bps〉[〈parity〉[〈bits〉]]]
  〈port〉:数字表示的串口号,0表示COM1,其余类推。所有四个串口都可被使用。
  〈bps〉:串口速率,支持110、 150、300、600、1200、2400、4800和 9600 bps,缺省值为2400bps。
  〈parity〉:设置串口校验。一般情况下,LILO忽略奇偶校验。n表示无校验,e 表示偶校验,o 表示奇校验。
  〈bits〉:字符位数,只能取7或8,缺省值是8。当有奇偶校验时只能取7。
  如果设置了“serial”,即使没有设置“delay”,系统也会将“delay”项的值自动增加20。
  19.timeout=tsecs
  设置等待键盘输入的时长,单位是0.1秒。超过这段时间没有输入则为超时,系统将自动引导缺省的操作系统。如果不设置本参数,缺省的超时时间长度为无穷大。

二、引导映像参数

  引导映像参数作用于每一个引导映像区。如果某一引导映像参数(例如:password)与全局参数的定义相抵触,则以该引导映像参数的定义为准,但仅限于该引导映像区。以下是具体参数项:
  image=pathname
  设置包含Linux核心引导映像的文件或设备。
  other=pathname
  设置包含非Linux操作系统,如DOS、SCO UNIX、Windows 95等系统引导映像的文件或设备。
  range=start-end
  如果“image”参数被设置为一个设备,则Linux核心引导映像的存放范围必须被设置。
  image = /dev/fd0
  range = 1-512
  # Linux核心引导映像存放在软盘上的第一至512扇区
  label=name
  通过此参数来标识当前操作系统,即操作系统名。用户可通过在LILO提示后输入“标识”来决定引导哪一个操作系统。
  alias=name
  给当前操作系统起一别名。
  lock
  类似同名全局参数。
  optional
  类似同名全局参数。
  password=password
  类似同名全局参数。
  restricted
  类似同名全局参数。
  以下两个参数项用于非Linux操作系统:
  loader=chain-loader
  如果要引导第二块硬盘上的非Linux操作系统或将LILO安装到软盘,这个参数是必需的。不指定时,缺省值是/boot/chain.b。如启动第二块硬盘上的MS-DOS或Windows 95,可定义loader=/boot/any_d.b;对于OS/2,则为loader=/boot/os2_d.b。
  作为一个特殊的功能模块,any_d.b已不合时宜,在0.20版以后的lilo程序包中已不再包含它并将其功能整合进chain.b,os2_d.b亦有所变动。它们的功能可用如下语句代替。
  例:
   other = /dev/hdb1
     loader = /boot/any_d.b
  替换为:
   other = /dev/hdb1
     map-drive = 0x80
     to = 0x81
     map-drive = 0x81
     to = 0x80
  对于os2_d.b:
   other = /dev/hdb1
     loader = /boot/os2_d.b
  替换为:
   other = /dev/hdb1
   loader = /boot/os2_d.b
   map-drive = 0x80
       to = 0x81
   map-drive = 0x81
     to = 0x80
  map-drive=〈bios_device_code〉
  通知chain.b装入重映射软驱或硬驱的内存驻留驱动程序,使用它可以引导不同硬盘上的不同操作系统,条件只有一个, BIOS必须能访问硬盘。“map-drive”后跟有变量“TO=〈盘设备号〉”。实际上,“map-drive”起到了“软”交换两个软驱或硬驱主、从顺序的作用,避免了手工接线的麻烦。
  例:交换软驱
     map-drive = 0
     to = 1
     map-drive = 1
     to = 0
  交换硬驱(参看loader参数例)
  table=device
  指定包含非Linux系统分区的主设备。举例来说,如果Windows 95在第一个IDE硬盘的第一个基本分区上,即/dev/hda1上,那么必须定义table=/dev/hda 。

三、核心参数
  如果LILO引导的是Linux系统,我们可用下面命令传递一些参数给Linux核心。除“literal”之外,它们也可用于全局参数区。
  append=string
  append传递一个特殊硬件的参数串string给Linux系统的核心。它常用来配置一些Linux不能正确测试到的硬件设备。例如:
  append = "hd=64,32,202"
  通知Linux核心,硬盘参数为64柱面、32磁头、202扇区。具体的参数串设置可参看/usr/doc/HOWTO/BootPrompt-HOWTO文件。
  literal=string
  类似于“append”,但它将撤消所有的其它核心参数(比如设置了root设备)。因为“literal”会不分青红皂白地撤消一些必需的、重要的参数,所以不能将它设置在全局参数区。
  ramdisk=size
  指定RAM盘的大小。size为零时不建立RAM盘。忽略此参数时,RAM盘大小由Linux核心引导映像决定。
  read-only
  通知LILO以只读方式载入根文件系统。通常我们在检查根文件系统时需要将根文件系统以只读方式载入。Linux系统在每次启动时也会将根文件系统以只读方式载入,待例行的文件系统检查后再将其重新载入为读写方式。
  read-write
  通知LILO以读写方式载入根文件系统。
  root=root-device
  指定被安装根文件系统硬盘分区设备。
  vga=mode
  指定引导Linux系统时的VGA模式。有以下取值:
  normal:常规80×25文本模式
  extended (or ext): 80×50文本模式
  ask: 引导时询问用户使用哪一种VGA模式,这时敲回车键将显示一个可分配的VGA模式表。
  如果不指定VGA模式,系统将缺省地使用包含在系统核心里的VGA模式值。

四、lilo.conf配置实例
  有了这些基础知识,我们可以很容易地按照自己的意图配置LILO。请看一个lilo.conf文件的例子:
  boot=/dev/hda         #将LILO安装在MBR。LILO作为主引导管理器
  message=/boot/message     #注释为/boot/message
  compact             #产生一个更小的“map”文件
  map=/boot/map         #指定“map”文件为/boot/map
  install=/boot/boot.b
  password=zhoudi         #设置口令
  vga=normal           #80x25文本模式
  linear             #使用“linear”地址
  prompt             #提示用户键盘输入
  timeout=50           #超时时长为5秒
  default=dos          #缺省引导label为dos的操作系统
  #设定Linux
  image=/boot/vmlinuz-2.0.34-1
  #设置Linux核心引导映像
   label=linux         #标识为linux
   root=/dev/hda1        #设置根文件系统
   read-only          #LILO以只读方式载入根文件系统
  #设定MS-DOS或Windows 95
  other=/dev/hda2         #DOS分区为第一个IDE硬盘的第二分区
   label=dos          #标识为dos
   table=/dev/hda       #主设备为第一个IDE硬盘
  #设定SCO UNIX
  注意:SCO分区必须设为活动(active)分区并将LILO安装在MBR上。
  other=/dev/hda3
   label=sco
   table=/dev/hda
  这个例子中,LILO是作为主引导管理器来管理机器上所有操作系统的。LILO也可作为二级引导管理器,这只要将“boot”参数改为根分区就可做到。例如:
  boot=/dev/hda1
  以这种方式使用LILO时,Linux根分区必须用DOS或Linux的fdisk程序将其设置为活动分区,并且这种方式只对硬盘主分区(不是扩展或逻辑分区)有效。
  LILO还可以启动第二个以上的操作系统。在我的机器上有两块希捷硬盘,一块硬盘为8.4GB,另一块为1.2GB,都以LBA模式接在主IDE口上。8.4GB跳线为主盘,1.2GB跳线为从盘,Linux核心很容易地就将它们辨认出来并能正常使用,1.2GB的硬盘上安装了MS-DOS 6.22。笔者是这样设置lilo.conf的:
  disk=/dev/hda
   bios=0x80
  #由于IDE硬盘存在双硬盘问题,所以当启动DOS系统时,会提示“无系统盘或系统盘错!”,需修改程序如下。
  disk=/dev/hdb
   bios=0x81
  boot=/dev/hda
  map=/boot/map
  install=/boot/boot.b
  linear
  prompt
  timeout=50
  default=dos
  image=/boot/vmlinuz-2.2.11-1
   label=linux
   root=/dev/hda1
   read-only
  other=/dev/hdb1
   label=dos
   map-drive = 0x80
      to = 0x81
      map-drive = 0x81
      to = 0x80
  #交换两硬盘主、从顺序
   table=/dev/hdb
  配置好lilo.conf文件后,在root账户下执行lilo命令,新的LILO就被载入系统。上面第一个例子执行结果如下:
  #lilo
  Added linux
  Added dos*
  Added sco
  (注:带*号的表示其为缺省操作系统)

五、LILO提示信息
  LILO在运行时会给出一些提示信息,了解它的含义对我们正确配置lilo.conf或查找硬件错误是有帮助的。
  当LILO装入它自己的时候,显示单词 “LILO”:每完成一个特定的过程显示一个字母。如果LILO在某个地方失败了,屏幕上就停留几个字母,以指示错误发生的地方。
  注意,如果磁盘发生瞬间故障,可能会在第一个字母“L”后插入一些十六进制数字(磁盘错误码)。除非LILO停在那里并不停地产生错误码流,否则并不说明有严重问题。
  没有提示: LILO没有安装或者安装LILO的分区没有被激活。
  L〈错误码〉 : LILO的第一部分已经被装入并运行了,但它不能装入第二部分的引导程序。两位数字的错误码指示问题的类型(参见“磁盘错误码”),这种情况通常是在介质访问失败或硬盘参数错误。
  LI: LILO第一部分正确但是第二部分执行时出错。这一般是硬盘参数有误或/boot/boot.b被移动后没有重新运行map安装程序。
  LIL: LILO第二部分开始执行,但是不能从“map”文件中读取描述符表( descriptor table)。 这通常是因介质错误或磁盘参数有误引起的。
  LIL?: LILO在错误的地方加载。原因与“LI”大致相同。
  LIL-:描述符表(descriptor table)错误。典型原因是硬盘几何参数微妙的不匹配或/boot/boot.b被移动而没有运行map安装程序。
  LILO: LILO执行正确。
  1010101010: 分区情况已经改变却没有重新安装LILO,另外,超频也可能会出这种情况。

六、磁盘错误码
  0x00:“内部错误”。 由LILO扇区读取子程序产生。可能是因为被破坏的文件,重建map文件试试看。另一个原因也许是,当使用“linear”参数时去访问超出1024的柱面。
  0x01:“非法命令”。这意味着LILO访问了BIOS不支持的硬盘。
  0x02:“没找到地址标记”。通常是介质问题,多试几遍看看。
  0x03:“写保护错”。 仅在写操作时出现。
  0x04:“扇区未找到”。典型的原因是硬盘参数错误。
  0x06:“激活顺序改变”。这应该是短暂的错误,再试一次。
  0x07:“无效的初始化”。BIOS没有适当地初始化硬盘,热启动一次或许有帮助。

  0x08:“DMA超出限度”。这不应当发生,重新启动。
  0x09:“DMA试图越过64kB边界”。这不应当发生,建议忽略“compact”参数。
  0x0C:“无效的介质”。这不应当发生,重新启动看看。
  0x10:“CRC错误”。检测到介质错误。建议多启动几次,运行map安装程序,把map文件从坏块写到正常的介质上。
  0x11:“ECC纠正成功”。读错误发生然后被纠正,但是LILO并不知道这个情况,终止了启动过程。
  0x20:“控制器错误”。一般不应发生。
  0x40:“定位失败”。这可能是介质问题,重新启动试试。
  0x80:“磁盘超时”。磁盘或驱动器没有准备好。介质坏了或磁盘没有转,也有可能是从软盘启动而没有关上软驱门。
  0xBB:“BIOS错误”。一般不应发生,如果反复发生,可考虑去掉“compact”参数或添加删除“linear”参数。
  如果在写操作过程中发生错误,则在错误码前有个前缀“w”。尽管写错误并不影响启动过程,但它们暗示了系统中存在某种错误,建议重新配置LILO成只读格式(read-only)。
  LILO的配置相当复杂,读者只有在实践中不断学习、摸索,勤于思考,才能用好LILO。


返回 上一页 下一页   信息发布:工号01   转引自: 【 】 【打印】 【关闭

关于我们 ┋ 友情链接


深圳市福田区海滨广场恒福花园恒华阁11F
电话:0755-88305872 传真:0755-88305880
Copyright©2005-2007 无忧电子开发网版权所有

粤ICP备05064233号