【问题标题】:fixed sector loading of bootloader (LILO, GRUB, custom)引导加载程序的固定扇区加载(LILO、GRUB、自定义)
【发布时间】:2012-12-01 10:38:47
【问题描述】:

我一直在查看 LILO bootsect.s 和 GRUB stage1.s。

LILO 从特定的硬编码扇区加载东西(或东西);它不使用一些可以在安装时修补的保留字节。我想知道如果您在分区上而不是单独在驱动器上,这将如何工作? LILO 如何告诉它的 bootsec.s 它在磁盘上的位置,从而适当地调整它需要加载的文件的位置?

LILO 没有用于 BPB 的空间,因此它在很大程度上是一个 ext 引导加载程序。 ext 在引导扇区之后仅保留了另一个 512。 LILO 的第 2 阶段真的可以放在这么小的空间里吗?还是将其放置在保留块上?

另一方面,GRUB 确实为 stage2 所在的位置保留了一个 dword,我认为可以在安装时对其进行修补。但它没有说明它的大小。看着它,它似乎只是读取了一个扇区(mov ax, 0x0201)然后跳转到它。查看 stage2 目录,我认为它不能仅适用于单个扇区。

LILO 和 GRUB 配置文件都与它们所在的文件系统无关。他们如何继续引导过程?我的意思是它包含文件的路径,但我认为这没有多大帮助。他们试图找出答案吗?怎么会这样?如果已经存在操作系统,是否与当前操作系统喜欢其文件系统设置和引导加载程序文件的方式有任何冲突?鉴于他们的 stage1 几乎是文件系统的愚蠢。

当 LILO 和 GRUB 设置分区引导扇区(预分区磁盘)时,它是否会读取 MBR 上的分区表并推断其余部分在磁盘上的位置,因此“固定寻址”可以工作因为它会修补东西,或者它实际上是否将它的东西加载到固定硬盘扇区上?我回到我的冲突问题。

我正在尝试编写一个引导加载程序,但我觉得仅读取静态磁盘地址的东西还不够好,因为它可能与文件系统结构冲突,而且我不知道如何“知道”我在哪里磁盘,因为我不知道我是否可以相信 DS:SI 指向一个真正的分区表(如果我在 LBA 0 上怎么办?)并且读取 MBR 分区表并在我的 stage1 中修补一些 dword 不会我坐得很好。所以我正在从 LILO 和 GRUB 中寻找一些灵感。不是用 NASM 编写并没有真正的帮助。 :(

【问题讨论】:

    标签: assembly bootloader osdev


    【解决方案1】:

    显然存在所谓的“DOS 兼容区域”。洞察here

    基本上,CHS 0:0:2 - 0:0:63 是“免费的”;分区从 1:0:1 开始。

    【讨论】:

    • 是的,这就是我无法将 GRUB 安装到 FAT 格式的软盘的原因:文件系统上没有 stage1.5 的位置。
    • 事实上您可以在没有免费区域的情况下安装 GRUB。可以命令 GRUB 将其阶段 1.5 存储在文件中并记录其绝对位置(与 LILO 引导所有内容的方式相同)。据我所知,此功能旨在引导超级软盘格式的磁盘。从未尝试过 FAT 格式的软盘;在这种情况下建议使用 syslinux。
    猜你喜欢
    • 2017-01-24
    • 2013-08-24
    • 2012-07-25
    • 1970-01-01
    • 2012-04-09
    • 2016-07-02
    • 2013-05-05
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多