Operating system 如何将OS bin文件(带有自定义引导加载程序)转换为iso文件,该文件可以刻录成CD或通过USB引导?

Operating system 如何将OS bin文件(带有自定义引导加载程序)转换为iso文件,该文件可以刻录成CD或通过USB引导?,operating-system,qemu,bootloader,osdev,Operating System,Qemu,Bootloader,Osdev,我已经完成了简单操作系统的编写,我想在真正的硬件(PC)上测试它,而不是bochs或qemu。我的操作系统有一个自定义引导加载程序和一个内核,我使用cat将它们合并到一个bin文件中。但我花了数小时寻找将bin文件转换为可引导iso文件的方法,但每次都失败了。根据OSDev.org,我想我需要使用genisoimage(mkisofs)进行转换,但我不知道这个命令是如何工作的,我最终输出了一个iso文件,但这个文件不起作用。(我想我使用了错误的命令,有人能给我解释一下吗? 我尝试过的其他方法:

我已经完成了简单操作系统的编写,我想在真正的硬件(PC)上测试它,而不是bochs或qemu。我的操作系统有一个自定义引导加载程序和一个内核,我使用cat将它们合并到一个bin文件中。但我花了数小时寻找将bin文件转换为可引导iso文件的方法,但每次都失败了。根据OSDev.org,我想我需要使用genisoimage(mkisofs)进行转换,但我不知道这个命令是如何工作的,我最终输出了一个iso文件,但这个文件不起作用。(我想我使用了错误的命令,有人能给我解释一下吗?
我尝试过的其他方法:

  • 直接将bin文件刻录到CD。错误:缺少操作系统
  • 使用winbin2iso和其他windows平台软件将bin文件转换为ISO。错误:无法启动。甚至在qemu也没有。
    还有,什么是El Torito

  • 引导CD时,固件会检查CD元数据中的“引导目录”。这是一个条目列表,每种计算机最多有一个条目;因此,可以创建一张适用于80x86 BIOS和80x86 UEFI(以及PowerPC和Sparc等)的CD

    对于80x86,有4种不同类型的条目:

    • 尤菲。条目的其余部分告诉固件FAT文件系统映像的起始扇区和大小。UEFI通过将体系结构转换为文件名(例如,对于80x86,它可能需要文件
      \EFI\BOOT\BOOTX64.EFI
      )来确定它想要从FAT文件系统中获取哪个文件

    • “无仿真,80x86 BIOS”。条目的其余部分告诉固件启动扇区和引导加载程序的大小。引导加载程序可以是您喜欢的任何大小(高达639kib);BIOS告诉您的“设备号”(在
      dl
      中)将用于CD驱动器本身,因此您可以使用它从同一磁盘加载更多内容

    • “硬盘模拟,80x86 BIOS”。条目的其余部分告诉固件磁盘映像的起始扇区和大小。磁盘映像应该有一个带有BPB和/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的最佳方法是编写两个新的引导加载程序(一个用于“无仿真,80x86 BIOS”,另一个用于UEFI);然后使用您喜欢的任何工具在CD上创建适当的结构(例如,
    genisoimage
    ,为您的“no emulation,80x86 BIOS”引导加载程序提供
    -no emul boot
    选项,并为UEFI提供一些似乎不存在的其他选项!?)

    请注意,编写自己的“更聪明”的实用程序很容易。您可能希望创建一个FAT文件系统(用于UEFI)和一个ISO9660文件系统(用于操作系统的其他文件-帮助/文档、驱动程序等),但大多数工具不会为您创建FAT文件系统,并且两个文件系统(FAT和ISO9660)中的文件可能使用相同的扇区(这样,在两个文件系统中都会出现相同的文件,而不会占用两倍的磁盘空间)。类似的内容可能只需要您一周的时间就可以自己编写(而且您最终还需要学习很多关于CD和ISO9660的知识)。相关文档(对于从CD引导,ISO9660文件系统、FAT文件系统和UEFI)都可以在线轻松获得

    还有,什么是El Torito


    El Torito是“可引导CD-ROM规范”的另一个名称,它描述了CD上使其可引导所需的结构。

    当CD正在引导时,固件会检查CD的元数据中是否有“引导目录”。这是一个条目列表,其中包含(最多)每种计算机都有一个条目;因此可以创建一张适用于80x86 BIOS和80x86 UEFI(以及PowerPC和Sparc等)的CD

    对于80x86,有4种不同类型的条目:

    • UEFI。该条目的其余部分告诉固件FAT文件系统映像的起始扇区和大小。UEFI根据将体系结构转换为文件名(例如,对于80x86,它可能需要文件
      \EFI\BOOT\BOOTX64.EFI
      )来确定它想要从FAT文件系统中获取哪个文件

    • “无模拟,80x86 BIOS”。该条目的其余部分告诉固件启动加载程序的起始扇区和大小。启动加载程序可以是您喜欢的任何大小(最多约639 KiB);BIOS告诉您的“设备号”(在
      dl
      )将用于CD驱动器本身,因此您可以使用它从同一磁盘加载更多内容

    • “硬盘模拟,80x86 BIOS”。该条目的其余部分告诉固件启动时间