![]() | 本节由 Rizwan Mohammed Darwe 贡献 (rizwan AT clovertechnologies dot com) |
本节假设您熟悉在 Linux 中写入 CD 的过程和操作。将其视为一个快速参考,以便包含引导您将刻录的 CD 的能力。《CD 写入 HOWTO》应为您提供深入的参考。
对于 x86 平台,许多 BIOS 已经开始支持可引导 CD。mkisofs 的补丁是基于名为 “El Torito” 的标准。简单来说,El Torito 是一个规范,规定了 cdrom 应该如何格式化,以便您可以直接从中启动。
“El Torito” 规范指出,*任何* cdrom 驱动器都应该工作(SCSI 或 EIDE),只要 BIOS 支持 El Torito。到目前为止,这仅在 EIDE 驱动器上进行了测试,因为到目前为止测试过的 SCSI 控制器似乎都不支持 El Torito。主板必须支持 El Torito。您如何知道您的主板是否支持 “El Torito”?嗯,支持它的主板允许您选择从硬盘、软盘、网络或 CDROM 启动。
El Torito 标准的工作原理是通过 BIOS 调用使 CD 驱动器看起来像一个普通的软盘驱动器。这样,您只需将任何软盘大小的映像(对于 1.44 MB 软盘,正好是 1440k)放在 ISO 文件系统中的某个位置。在 ISO fs 的标头中,您放置一个指向此映像的指针。然后,BIOS 将从 CD 中抓取此映像,并且出于所有目的,它的行为就像从软盘驱动器启动一样。这允许一个工作的 LILO 启动盘,例如,可以简单地按原样使用。
粗略地说,CD-ROM 的前 1.44 MB(或 2.88 MB,如果支持)包含您提供的软盘映像。此映像被 BIOS 视为软盘并从中启动。(因此,在从此虚拟软盘启动时,您原始的 A: 驱动器(/dev/fd0)可能无法访问,但您可以尝试使用/dev/fd1).
首先创建一个文件,例如 “boot.img”,它是您想通过 CD-ROM 启动的可引导软盘的精确映像。这必须是一个 1.44 MB 的可引导软盘。以下命令将执行此操作
dd if=/dev/fd0 of=boot.img bs=10k count=144 |
将此映像放置在层次结构中的某个位置,这将是 iso9660 文件系统的源。最好将所有与启动相关的文件放在它们自己的目录中(例如,iso9660 fs 根目录下的 “boot/”)。
一个警告 -- 您的启动软盘 *必须* 通过 LILO 加载任何初始 ramdisk,而不是内核 ramdisk 驱动程序!这是因为一旦 linux 内核启动,BIOS 对 CD 作为软盘的模拟将被绕过并将失败。LILO 将使用 BIOS 磁盘调用加载初始 ramdisk,因此模拟按设计工作。
El Torito 规范还要求创建一个 “引导目录”。这是一个 2048 字节的文件,除了它是必需的之外,没有任何意义。mkisofs 的作者所做的修补程序将使其自动创建引导目录,但您必须指定引导目录在 iso9660 文件系统中的位置。通常,最好将其放在与引导映像相同的位置,并使用类似boot.catalog这样的名称似乎是合适的。
因此,我们的引导映像在文件boot.img中,我们将把它放在目录boot/下,在 iso9660 文件系统的根目录下。我们将把引导目录放在同一个目录下,名称为boot.catalog。在文件bootcd.iso中创建 iso9660 fs 的命令是
mkisofs -r -b boot/boot.img -c boot/boot.catalog -o bootcd.iso . |
现在使用通常的 cdrecord 命令刻录 CD,它就可以启动了。
第一步是获取源 CD 使用的可引导映像。但是您不能简单地在 linux 下挂载 CD 并使用 dd 将前 1440k 复制到软盘或类似的文件boot.img。相反,您只需使用源 CD-ROM 启动。
当您启动 Win98 CD 时,您会被带到 A: 提示符,这是实际的 ramdisk。D: 或 Z: 是所有可安装文件所在的位置。通过使用 dos 的 diskcopy 命令,将 A: 映像复制到现在的 B: 实际软盘驱动器中。以下命令将执行此操作。
diskcopy A: B: |