【问题标题】:How to convert an OS bin file(with a custom bootloader) to iso file which can be burnt into CD or booted by USB? [duplicate]如何将 OS bin 文件(带有自定义引导加载程序)转换为可以刻录到 CD 或通过 USB 引导的 iso 文件? [复制]
【发布时间】:2020-12-28 19:32:20
【问题描述】:
我已经完成了我的简单操作系统的编写,我想在真正的硬件(PC)上测试它,而不是 bochs 或 qemu。我的操作系统有一个自定义引导加载程序和一个内核,我使用 cat 将它们连接到一个单独的 bin 文件中。但是我花了几个小时寻找一种将 bin 文件转换为可引导 iso 文件的方法,但每次都失败了。根据 OSDev.org,我想我需要使用 genisoimage(mkisofs) 来进行转换,但我不知道这个命令是如何工作的,我最后输出了一个 iso 文件但是这个文件不起作用。(我想我使用了错误的命令,有人可以向我解释一下吗?)
我尝试过的其他方法:
- 直接将 bin 文件刻录到 CD。错误:缺少操作系统。
- 使用winbin2iso等windows平台软件将bin文件转成ISO。错误:无法启动。甚至在 qemu 中也没有。
另外,El-Torito 是什么?
【问题讨论】:
标签:
operating-system
qemu
bootloader
osdev
【解决方案1】:
当 CD 启动时,固件会在 CD 的元数据中检查 CD 中的“启动目录”。这是一个条目列表,每种计算机(最多)一个条目;这样就可以创建适用于 80x86 BIOS 和 80x86 UEFI(以及 PowerPC 和 Sparc 等)的单张 CD。
对于 80x86,有 4 种不同类型的条目:
-
UEFI。条目的其余部分告诉固件 FAT 文件系统映像的起始扇区和大小。 UEFI 根据将体系结构转换为文件名来确定它想要从 FAT 文件系统中获取哪个文件(例如,对于 80x86,它可能需要文件 \EFI\BOOT\BOOTX64.EFI)。
-
“无仿真,80x86 BIOS”。该条目的其余部分告诉固件引导加载程序的起始扇区和大小。引导加载程序可以是您喜欢的任何大小(最大约 639 KiB); BIOS 告诉您的“设备号”(dl)将用于 CD 驱动器本身,因此您可以使用它从同一个磁盘加载更多内容。
-
“硬盘模拟,80x86 BIOS”。该条目的其余部分告诉固件磁盘映像的起始扇区和大小。磁盘映像应该有一个带有 BPB 和 partition/s 的 MBR,其中一个活动分区指向操作系统的引导加载程序在其分区开头的位置。在这种情况下,BIOS 将创建一个假的“设备 0x80”(来自 MBR 中 BPB 中的信息)并弄乱任何真实硬盘驱动器的设备编号(例如,第一个本来是“设备 0x80”的硬盘驱动器将改为“设备 0x81”等)。请注意,这是低效的,因为 CD 上的扇区是 2048 字节,但 BIOS 将模拟 512 字节的扇区,因此每次您尝试读取 512 字节的扇区时,BIOS 实际上会读取 2048 字节并抛出“错误”的 75%数据远。这也很烦人(试图在 512 字节中压缩任何好的东西是不可能的)。它主要只用于过时的垃圾(例如 MS-DOS)。
-
“软盘模拟,80x86 BIOS”。该条目的其余部分告诉固件磁盘映像的起始扇区和大小。磁盘映像应该在带有 BPB 的第一个扇区中具有引导加载程序。在这种情况下,BIOS 将创建一个虚假的“设备 0x00”(来自 MBR 中 BPB 中的信息),并弄乱任何真正软盘驱动器的设备编号。就像硬盘仿真一样,这是低效的,甚至更“非常烦人”(因为它还将操作系统限制在一张软盘大小,而这远远不够空间),并且仅适用于过时的垃圾。
处理 CD 的最佳方法是编写 2 个新的引导加载程序(一个用于“无仿真,80x86 BIOS”,另一个用于 UEFI);然后使用您喜欢的任何工具在 CD 上创建适当的结构(例如,genisoimage 和 -no-emul-boot 选项用于“无仿真,80x86 BIOS”引导加载程序以及其他一些似乎不存在的 UEFI 选项! ?)。
请注意,编写自己的“更聪明”的实用程序很容易。您想要创建一个 FAT 文件系统(用于 UEFI)和一个 ISO9660 文件系统(用于操作系统文件的其余部分 - 帮助/文档、驱动程序等),但大多数工具不会为您,并且两个文件系统(FAT 和 ISO9660)中的文件可以使用相同的扇区(因此相同的文件出现在两个文件系统中,而不会花费两倍的磁盘空间)。像这样的东西可能只需要你 1 周的时间来写自己(而且你会学到很多关于 CD 和 ISO9660 的知识,无论如何你最终都必须学习)。相关文档(用于从 CD 启动、ISO9660 文件系统、FAT 文件系统和 UEFI)都可以轻松在线获得。
另外,El-Torito 是什么?
El-Torito 是“可引导 CD-ROM 规范”的另一个名称,它描述了 CD 上使其可引导所需的结构。