marmot 发表于 2003-3-29 16:33:46

有关LILO的问题,高手请入

如果将LILO放置在MBR中,且配置文件/etc/lilo.conf为:
boot=/dev/hdc
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
default=linux
image=/boot/zImage
label=linux
root=/dev/hdc1
read-only
restricted
password=kpAsSb0rv_f

1.是否使用/sbin/lilo处理这段配置时会生成一段程序(权且称之为lboot吧)放到MBR中去呢?

2.'boot'参数指明'引导扇区的设备名',LILO怎么知道'dev\hdc'是指的第三个分区呢,除
非它用了和LINUX一样的语法。如果是这样,那么在生成的lboot中的处理是否会是这样呢:
    a.先从分区表中找出第三分区的起始地址(或者是在生成lboot的时候先找好,但这样
      的话如果要重新分区就必须重新编译出lboot,当然我们都是这么做的了)
    b.从上面得到的地址处将第三分区的第一个扇区载入内存(内存的具体地址是多少?),注意,
      这个扇区的内容绝不会是LINUX源码中的'bootsect.S',因为'bootsect.S'只会从软盘
      来读数据,也就是说它只能用作软盘启动时放在软盘的第一磁道。
      那么lboot载入的这一扇区的内容到底是什么呢???
      另有一种说法如下:lboot会到'dev/hdc'下直接载入'/boot/zImage',那么这个zImage
      在硬盘的第三分区中到底是从哪一个扇区(这里表示线性的扇区)开始的呢? 要知道在重
      新编译内核生成zImage后只是把它拷贝到'/boot'下的,那它在硬盘上岂不是不一定就
      在连续的磁道上(除非'/boot'目录有特性,它上面的文件在磁盘上都是连续存放的)?
   
3.'root'参数告诉内核启动时以哪个设备作为根文件系统,它是如何将此信息告知LINUX内核的
呢? 根据我读'bootsect.S'的经验,好象是放在lboot所处扇区的最后面,也就是'AA55'之前。
当然还有其它一些参数也要传递给LINUX内核,具体有多少,是什么顺序呢。

4.很显然lboot只可能有446字节大小(因为64字节给了分区表,2字节用作'AA55'),但它竟然还
能与用户交互,并且还有那么多的输出信息,到底它是如何用这么小的地方放置这么复杂的
处理过程呢,莫非它还会读入其它的程序来做处理,奇怪呀???

5.要是lboot不是放在MBR,而是放在硬盘第三分区的第一个扇区呢,启动过程又将是如何?
好象是先运行MBR中的程序,假如第三分区为活动分区,lboot就会被调入执行了,现在它就
不可能再去读“硬盘第三分区的第一个扇区”了吧,那就是它自己呀。

5.最后再说一下zImage吧,它到底包含了什么内容,有包括'bootsect.S'吗(不太可能)?
有包括'setup.S'吗(很难说)?

郁闷呀,怎么找遍整个网络也没有人说到这么深呢,到底深入到硬盘磁道和扇区时启动过程
会是如何呢? 难道真的很难吗???

llc 发表于 2003-3-29 18:03:28

个人认为,你的推测都很有道理,建议阅读lilo的源码

marmot 发表于 2003-3-29 18:14:47

LILO的源码也有的吗?找找看先

marmot 发表于 2003-3-29 18:50:55

又看了一篇文章:



使用lilo

lilo,Linux加载程序,居于引导扇区----或者是主引导扇区,或者是磁盘分区的第一个
扇区。它使用BIOS调用从一个文件系统中加载核心。

这个程序与核心映象面对同样的问题:在机器引导时,仅有半KB的代码被装入内存,而
且只用几打的指令解码一个文件系统结构也是不可能的。lilo通过在安装时构造一个磁
盘映射来解决这个问题。它用这个映射告诉BIOS从正确的地方获取每个核心块。这个技
术很有效,但你在替换或者重写一个核心映象后必须重新安装lilo----你必须调用lilo
命令,用一个新的核心块表来重新安装引导加载程序。

实际上,lilo扩展了加载机制,它允许用户在引导时选择加载哪个映象。这个选择是通
过一个映象的安装定义表来做到的。它用从不同的分区中取出的引导扇区代替它自己的
引导扇区来实现。



lilo比一个barebone引导的最大好处(除了能从硬驱直接引导外)是它允许用户象核心
传递一个命令行。这个命令行可以在lilo配置文件中指定,也可以在引导时交互给出。l
ilo把命令行放在零页(我们将其在boot/head.S之前保持空闲)的后一半。这一页以后
由setup_arch(在arch/i386/kernel/setup.c中定义)取得。

lilo的最近版本(18版本甚至更新)可以加载bzImage,而老的发布是不能的。较新的版
本可以用BIOS调用将数据加载到高端内存,象bootsect.S做的那样。

当lilo完成加载,它跳到setup.S,事情就象我们以前看到的那样继续进行。




————————
看来LILO要同时装入setup.S和zImage/bzImage,只是不知道这个“磁
盘映射”是怎么回事,郁闷ing……
页: [1]
查看完整版本: 有关LILO的问题,高手请入