【问题标题】:How to make a bootable disc (.iso) that loads a kernel (.elf)如何制作加载内核 (.elf) 的可引导光盘 (.iso)
【发布时间】:2020-01-04 18:38:20
【问题描述】:

我已经制作了一个非常基本的内核,我想制作一个加载内核的可引导磁盘映像。我尝试将内核从.elf 转换为.bin 再转换为.iso,但这导致了一个不可引导的磁盘映像。当我尝试将磁盘映像加载到 virtualbox 或 qemu 时,它会通知我磁盘映像是原始格式并且无法加载。

我使用objcopy -O binary kernel.elf kernel.bin.elf 转换为.bin,然后尝试使用poweriso、winiso 和magiso 等转换器转换为.iso。转换失败或创建了不可引导的光盘映像。

如何制作可加载内核的可引导光盘映像。如果需要引导加载程序,我更愿意使用非常少的代码制作一个自定义引导加载程序,仅用于启动我的内核。

【问题讨论】:

    标签: kernel boot


    【解决方案1】:

    除了将内核文件转换为二进制文件并将其放在 ISO 光盘(映像)上之外,还有很多其他功能。

    您需要有某种引导加载程序。如果您作为传统 BIOS 机器启动,您将需要一个能够理解 ISO 文件系统、查找内核文件并将其读入内存的引导加载程序。已经做了一些,我想到了 Grub。

    由于您想创建自己的(我推荐您),您需要了解 ISO 文件系统如何存储在磁盘上,BIOS 如何为您加载一个或多个扇区等.

    例如,BIOS 将使用不同的方法从磁盘加载一个或多个扇区。一种是软盘模拟,另一种是硬盘驱动器模拟,另一种可能是直接 ISO 磁盘扇区读取。

    我建议您不要从 ISO 开始。从软盘映像开始,或者更好的是,从硬盘驱动器映像开始。然后您所要做的就是编写一个引导扇区和使用 BIOS 读取磁盘服务的加载程序。这要容易得多。

    不过,不要误会我的意思,还有很多工作要做。

    如果您希望跳过所有这些,您可以将内核编写为 (Win) PE 文件并使用较新的固件 (UEFI) 为您加载它。 EFI 将使用具有一个或多个 FAT 卷的 GPT 格式驱动器,并为您查找并加载您的 PE 格式的可执行文件。

    但是,有些人可能不同意,但由于您将这个项目作为学习经验,我建议您采用 Legacy BIOS 路线。这将使您更多地了解计算机如何启动、加载第一条指令等。

    对于传统 BIOS 软盘或硬盘驱动器路径,请搜索引导扇区以及软盘或硬盘驱动器。这将向您展示一些人是如何完成任务的。该引导扇区通常会加载另一个文件,即操作系统加载程序。然后这个加载器用于加载内核和(可能)其他文件,在跳转到内核之前设置必要的项目。

    如果你愿意,我有关于这个主题的written a few books,展示了如何为软盘、硬盘驱动器以及 ISO 磁盘映像写入引导扇区。我也有早期版本的included example source code

    【讨论】:

    • 伙计,这太棒了!以前从未听说过你的书,但肯定会读
    猜你喜欢
    • 2013-11-13
    • 2016-02-09
    • 2021-10-12
    • 2018-09-09
    • 2020-07-31
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多