如何制作加载内核 (.elf) 的可引导光盘 (.iso)

How to make a bootable disc (.iso) that loads a kernel (.elf)

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

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

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

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

您需要有某种引导装载程序。如果您作为遗留 BIOS 机器启动,您将需要一个了解 ISO 文件系统的引导加载程序,查找,然后将内核文件读入内存。已经做了一些,想到Grub。

既然你想创建自己的(我对此表示赞赏),你将需要阅读 ISO 文件系统是如何存储在光盘上的,BIOS 将如何加载一个或更多适合您的部门,等等

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

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

但是,不要误会我的意思,要做到这一点还有很多工作要做。

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

然而,有些人可能不同意,但由于您正在做这个项目作为一种学习经验,我建议您走 Legacy BIOS 路线。这将使您了解更多有关计算机如何启动、加载第一条指令等的信息。

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

如果你愿意,我有 written a few books on this subject, showing how to write boot sectors for floppies, hard drives, as well as ISO disc images. I also have included example source code 早期版本。