根据在线资源,我创建了一个多重引导 ELF 文件,但用于objcopy
创建“平面”二进制或数据文件。内核映像很简单,仅将“hello world”打印到控制台。使用 QEMU,我可以使用命令运行平面二进制文件qemu-system-i386 -kernel /path/to/flat/binary
。
此过程的下一步是在我的计算机上启动时从 BIOS 屏幕实际启动该内核。问题是,我不知道如何使这个平面二进制文件成为可启动映像。到目前为止,我所能做到的最远的是将映像刻录到 USB 驱动器上,但作为 CDrom,然后进入 BIOS 屏幕。从 USB 启动的选项不会显示为选项,并且在尝试从 CD 启动时系统会崩溃。
我对系统编程的概念仍然很陌生,并且真的不知道如何进入启动程序的下一步。是否需要先将 grub 安装到 USB,然后复制我的平面二进制文件,或者是否有一种方法将平面二进制文件直接制作为可启动映像,然后将其刻录到 USB。任何建议、帮助或指向正确方向的指示都会非常有帮助。谢谢。
答案1
有大量的硬件平台可供您“启动”软件。根据您的问题,我假设您使用的是标准 PC。在 PC 上,使用两种固件实现:传统 BIOS 和更新的(但实际上现在已经很旧)UEFI(统一可扩展固件接口)。固件存储在 ROM 中,(简而言之)负责将硬件初始化为可运行状态,从大容量存储加载一些代码,然后启动它。
使用 BIOS 界面启动某些东西需要编写一些 16 位实模式代码,这可以显示 BIOS 的实际年龄。我建议走UEFI路线。为此,您必须编写并编译代码以确认符合 UEFI 标准,并将生成的二进制文件放置在适当格式化的 USB 记忆棒或硬盘上。
有关更多信息,请参阅 Roderick W. Smith 关于该主题的优秀教程:https://www.rodsbooks.com/efi-programming/index.html
答案2
如果您有一个指向合适内核的 EFI 文件,它应该可以在 uefi 模式下启动。