1

我正在尝试开发自己的操作系统,并遵循这些教程。

https://wiki.osdev.org/Bare_Bones

我知道我将使用 GRUB/现有的引导加载程序来加载“kernel.c”。在将控制权移交给“kernel.c”之前,我知道硬件没有初始化,因此我将设置诸如内存映射、堆栈等之类的东西。

我看到在多引导标头中设置了特定的变量/硬件

/* Declare constants for the multiboot header. */
.set ALIGN,    1<<0             /* align loaded modules on page boundaries */
.set MEMINFO,  1<<1             /* provide memory map */
.set FLAGS,    ALIGN | MEMINFO  /* this is the Multi boot 'flag' field */
.set MAGIC,    0x1BADB002       /* 'magic number' lets boot loader find the header */
.set CHECKSUM, -(MAGIC + FLAGS) /* checksum of above, to prove we are multi boot */
 
/* 

为什么特别提到上面代码中的那些?我在哪里可以找到这些多引导头?我是否应该在以下链接中使用与 GRUB 指定的架构相关的特定架构?

https://www.gnu.org/software/grub/manual/multiboot/multiboot.html#multiboot_002eh

我在哪里可以了解更多关于我的其他操作系统项目的引导程序集的信息?

4

1 回答 1

1

为什么特别提到上面代码中的那些?我在哪里可以找到这些多引导头?我是否应该在以下链接中使用与 GRUB 指定的架构相关的特定架构?

多重引导文档(您链接)描述了这些标志(ALIGN= MULTIBOOT_PAGE_ALIGNMEMINFO= MULTIBOOT_MEMORY_INFO)的含义。

至于为什么要专门使用这些标志:

ALIGN除非您使用多引导模块(基本指南不使用该模块),否则该标志对您来说并不重要。应该可以安全移除。

您很可能需要该MEMINFO标志,以便了解哪些内存区域可以安全使用以及哪些内存区域由硬件保留。您让 GRUB(或任何多重引导加载程序)为您执行此操作的原因是(1)一旦您处于保护模式,此信息变得更加难以获取 - 而保护模式是您的内核进入的方式,并且(2)它是如果您的操作系统使用动态内存,那么尽早获得这些信息来指导内存管理是有益的。

除了这两个标志之外,还有MULTIBOOT_VIDEO_MODE(我还没有找到它的用途)和MULTIBOOT_AOUT_KLUDGE,只有在您使用该可执行格式时才会感兴趣(准系统指南没有)。

我在哪里可以了解更多关于我的其他操作系统项目的引导程序集的信息?

使用预先存在的引导加载程序时,您需要的汇编程序引导程序的数量是有限的。我个人认为 osdev wiki Bare Bones 页面在引导读者完成这些步骤方面做得不错,其中包含所有内联文档。尽管也许其他人可以在此处添加其他链接。

于 2020-07-01T00:01:07.840 回答