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

Kernel 如何制作加载内核(.elf)的可引导光盘(.iso),kernel,boot,Kernel,Boot,我已经制作了一个非常基本的内核,我想制作一个加载内核的可引导光盘映像。我已尝试将内核从.elf转换为.bin到.iso,但这导致无法启动光盘映像。当我尝试将光盘映像加载到virtualbox或qemu时,它会通知我光盘映像为原始格式,无法加载 我使用objcopy-O binary kernel.elf kernel.bin将.elf转换为.bin,然后尝试使用poweriso、winiso和magiciso等转换器转换为.iso。转换失败或创建了不可引导的光盘映像 如何制作加载内核的可引导光盘

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

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


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

将内核文件转换为二进制文件并放在ISO光盘(图像)上还有很多

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

因为您想创建自己的(我推荐您这样做),所以您需要阅读ISO文件系统如何存储在光盘上,BIOS如何为您加载一个或多个扇区,等等

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

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

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

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

然而,有些人可能不同意,但因为你做这个项目是作为一种学习经验,我建议你采取传统的BIOS路线。这将让您了解更多有关计算机如何启动、加载第一条指令等的信息

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

如果您愿意,我已经介绍了这个主题,展示了如何为软盘、硬盘以及ISO光盘映像写入引导扇区。我还有一个早期版本的