我已经制作了一个非常基本的内核,我想制作一个加载内核的可引导磁盘映像。我曾尝试将内核从.elf转换为.bin,再转换为.iso,但这导致了一个不可启动的磁盘映像。当我尝试将磁盘映像加载到virtualbox或qemu中时,它通知我磁盘映像是raw格式的,无法加载。
我使用objcopy -O binary kernel.elf kernel.bin将.elf转换为.bin,然后尝试使用poweriso、winiso和magiciso等转换器转换为.iso。转换失败或创建了不可引导的光盘映像。
如何制作加载内核的可引导磁盘映像。如果需要一个引导加载程序,我更喜欢用非常少的代码定制一个,只用来启动我的内核。
发布于 2020-01-05 03:54:49
只需将内核文件转换为二进制文件并将其放在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。
https://stackoverflow.com/questions/59593720
复制相似问题