【问题标题】:Where can I find information to declare constants for the multiboot header在哪里可以找到信息来声明多引导标头的常量
【发布时间】:2020-10-20 06:59:39
【问题描述】:

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

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

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

【问题讨论】:

  • Here 是它的来源。

标签: assembly operating-system bootstrapping osdev multiboot


【解决方案1】:

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

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

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

除非您使用多重引导模块,否则 ALIGN 标志对您来说并不重要 (裸骨指南没有)。删除应该是安全的。

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

除了这两个标志之外,还有MULTIBOOT_VIDEO_MODE(我没有 找到了一个用途)和MULTIBOOT_AOUT_KLUDGE,只有当你 使用那种可执行格式(准系统指南没有)。

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

当使用预先存在的引导加载程序时,汇编程序引导程序的数量 需要是有限的。我个人认为 osdev wiki Bare Bones 页面做了一个 体面的工作来引导读者完成所有步骤,所有内联 文档。虽然也许其他人可以在此处添加其他链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2018-05-06
    • 1970-01-01
    • 2017-06-12
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多