我是OS开发人员之类的新手,但是我想问一下您是否有任何简单的引导程序或教程来如何加载bin文件(包含自定义OS)。
我阅读了很多有关引导加载程序的教程,但大多数教程都以 Hello World 结尾,并且没有说明如何加载某些bin文件。
我有 kernel.bin ,其中包含:
kernel.asm :
bits 32
section .text
align 4
dd 0x1BADB002
dd 0x00
dd - (0x1BADB002+0x00)
global start
extern kernel
start:
cli
call kernel
hlt
和 kernel.c :
kernel()
{
char* VideoMemory = (char*)0xb8000;
VideoMemory[0] = 'M';
VideoMemory[2] = 'y';
VideoMemory[4] = ' ';
VideoMemory[6] = 'O';
VideoMemory[8] = 'S';
}
它使用grub作为引导程序,并且 kernel.bin 保存在 / boot / 目录中,但是我想创建自定义的引导程序来加载 kernel。 bin
我知道,如果我创建自定义引导程序,则只能使用前510个字节,因为第511和512字节包含用于引导的幻数。
我知道我必须使用:
times 510 - ($ - $$) db 0
db 55h
db 0AAh
但是我不知道如何告诉该引导程序加载该 kernel.bin
答案 0 :(得分:1)
编写引导加载程序之前,需要了解三件事:
a)引导加载程序将在哪种环境(BIOS,UEFI等)中执行?
b)引导加载程序将从哪种设备引导。从CD引导通常不同于从硬盘驱动器引导。从网络启动通常与CD和硬盘驱动器大不相同。
c)引导加载程序应该加载的“东西”(内核,初始RAM磁盘或...)在哪里。假设您正在从硬盘启动;这可能涉及处理分区(“ MBR分区”,UEFI / GPT)和了解某种文件系统(FAT?Ext2?专门为OS设计的文件?)。
我知道我必须使用:
.PHONY:install install: curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh | bash
这意味着“ BIOS,是从某种磁盘启动的”(可能是没有分区的软盘,但是可能是具有某种分区方案的硬盘);大约是编写引导加载程序之前需要知道的一半。
答案 1 :(得分:0)
如何制作一个简单的引导程序来加载 bin,这意味着很多工作,但我尽量简洁。 我描述了如何为硬盘上的 100 MB 分区制作引导加载程序,并使用 FAT16 格式化。
第一步:
我在硬盘上创建了一个 100 MB 的分区,并以 FAT16 格式进行了格式化。我以可以选择从该分区启动的方式配置 GRUB。完成后,我从 100 MB 分区启动,然后在屏幕上显示消息“没有系统磁盘。按任意键重新启动...”这告诉我,我成功地创建了一个硬盘分区,我可以像软驱一样使用。 您可以在此处找到有关此第一步的所有详细信息: https://fromthegroundupmyway.blogspot.com/2020/12/initial-setup.html
第二步:
我创建了引导加载程序,它搜索分区的 ROOT 目录以寻找特定文件。就我而言,引导加载程序正在寻找“SOFTWARE.BIG”,它是一个普通的二进制文件。 “SOFTWARE.BIG”只是我决定给要由引导加载程序加载到 RAM 中的文件的名称,但是当您调整我的引导加载程序以制作您的引导加载程序时,如果您愿意,可以将其更改为 MYKERNEL.BIN。 您可以在此处找到有关第二步的所有详细信息: https://fromthegroundupmyway.blogspot.com/2020/12/the-template-for-shuttle2.html
第三步:
每个分区都是不同的,即使它们都使用 FAT16 作为文件系统。诸如每个扇区的字节数、每个文件簇的扇区数等,它们使分区彼此不同,但所有这些相关信息都保存在 BIOS 参数块中。我创建了一个程序,该程序根据同一程序从 BIOS 参数块读取的详细信息来调整我的引导加载程序。通过这种方式,您可以使引导加载程序适合您自己的 FAT16 分区。 您可以在此处找到有关第三步的所有详细信息: https://fromthegroundupmyway.blogspot.com/2020/12/the-builder-for-shuttle2.html
第四步:
在这里您可以找到我如何测试引导加载程序以确保它始终正常工作: https://fromthegroundupmyway.blogspot.com/2020/12/first-launch-of-shuttle2.html
答案 2 :(得分:-3)
获取Emu8086的副本,您将找到一些很好的示例,包括引导加载程序,迷你内核以及如何对其进行测试。 emu8086已停产,因此请尝试一些安全的站点来获取它。