【问题标题】:How a bootloader can read a DVD(cd)?引导加载程序如何读取 DVD(cd)?
【发布时间】:2011-12-08 06:05:03
【问题描述】:

我有一个用汇编语言编写的第一阶段引导加载程序。我需要它从 dvd(或 cd)加载第二阶段引导加载程序。我只找到了从 floopy 或 hdd 读取的示例。那里使用的中断是13h。在中断描述中它说它可以读取软盘和硬盘。我尝试使用 13h 来读取 CD,就好像它是软盘一样,但它不起作用。

问题:软盘和 dvd 之间有区别吗(在访问它们的意义上),我可以使用 CHS(cilinder,head,sector)吗,它的扇区大小是多少,我可以使用 13h 指令正确读取DVD。也许是一些例子。我查看了 LILO 的源代码,发现那里只有 13 小时,所以它必须工作。谢谢。

【问题讨论】:

  • 我不完全确定(所以没有答案),但我不认为引导加载程序是从 DVD 加载的——它是从软盘或硬盘加载的。 DVD/CD 以仿真模式运行,并在启动过程中暴露软盘/光盘。
  • 我猜“仿真”这个词是关键。我很快找到了解释一切的“El Torito”扩展。您可以将其写为答案,我会接受。谢谢,我只是个懒人

标签: assembly bootloader bios dvd


【解决方案1】:

您可以使用 mkisofs 工具从可引导软盘映像文件制作可引导 CD。 以下是我在 Windows 下的操作方式:

  1. 创建一个子目录CdFiles,其中包含一个可引导的软盘映像 文件、floppy.img(1474560 字节长)以及我创建的任何其他文件 想要在 CD 上。
  2. mkisofs.exe -b floppy.img -v -r -l -o cd.iso CdFiles

它将创建一个 CD ISO 映像文件 cd.iso,您可以将其刻录在 CD 上并从磁盘启动,也可以在任何 PC 模拟器中使用并直接从映像启动。

BIOS 将在 CD 上模拟带有 floppy.img 内容的软盘驱动器,它可以使用驱动器号 0 通过 int 13h 正常访问自身。为了通过 int 13h 访问整个 CD,您需要创建硬盘驱动器映像(可启动)并指定不同的仿真方法(不确定如何使用 mkisofs 进行操作,从未尝试过 hdd 映像)。同样会发生,但现在将在 CD 上模拟一个硬盘驱动器,它将是驱动器号 80h 用于 int 13h。

【讨论】:

  • 不错,有趣的工具。我使用的是 MagicISO,但我会试一试。
【解决方案2】:

从 DVD 加载引导加载程序 - 它从软盘或硬盘加载。 DVD/CD 以仿真模式运行,并在启动过程中暴露一张软盘/光盘

【讨论】:

    【解决方案3】:

    LILO 不适用于从 CD 引导,所以我不希望它包含任何用于读取这些内容的代码。尝试查看 ISOLINUX 引导加载程序,它是 Linux 引导 CD 上最常用的。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 2012-07-03
      • 2010-10-26
      • 1970-01-01
      • 2012-01-23
      • 2012-07-25
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多