首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作加载内核(.elf)的可引导光盘(.iso)

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

Stack Overflow用户
提问于 2020-01-05 02:38:20
回答 1查看 973关注 0票数 0

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59593720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档