gpt4 book ai didi

kernel - 麸皮内核开发 : Grub Multiboot header?

转载 作者:行者123 更新时间:2023-12-01 09:33:57 25 4
gpt4 key购买 nike

我正在关注 Bran 的内核开发 tutorial .在他的汇编代码中,他有以下代码块,他将其描述为不是那么重要,但与 GRUB 相关。

; This part MUST be 4byte aligned, so we solve that issue using 'ALIGN 4'
ALIGN 4
mboot:
; Multiboot macros to make a few lines later more readable
MULTIBOOT_PAGE_ALIGN equ 1<<0
MULTIBOOT_MEMORY_INFO equ 1<<1
MULTIBOOT_AOUT_KLUDGE equ 1<<16
MULTIBOOT_HEADER_MAGIC equ 0x1BADB002
MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE
MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
EXTERN code, bss, end

; This is the GRUB Multiboot header. A boot signature
dd MULTIBOOT_HEADER_MAGIC
dd MULTIBOOT_HEADER_FLAGS
dd MULTIBOOT_CHECKSUM

; AOUT kludge - must be physical addresses. Make a note of these:
; The linker script fills in the data for these ones!
dd mboot
dd code
dd bss
dd end
dd start

我还想知道这段代码在做什么?有人可以给我或指出我在哪里可以找到关于此的描述。二、为什么这段代码需要4字节对齐?这是出于效率原因还是在 GRUB 的上下文中具有某些特殊意义?

最佳答案

这部分汇编不是代码,而是多重引导头文件。当您链接内核时,此 header 将放置在二进制文件的开头,因此 GRUB 可以看到您的内核是多引导兼容的。此 header 包含一个魔数(Magic Number)(0x1badb002)、一个标志列表(在您的情况下,内核应该加载到一个页面对齐的地址上,并且您希望 GRUB 为您提供一个内存映射)和一个校验和。如果这些条目之一不遵循多重引导规范,GRUB 将不会加载您的内核。

您可以在 GRUB 的多重引导手册中找到有关多重引导的更多信息:

http://www.gnu.org/software/grub/manual/multiboot/multiboot.html

引用手册:

An OS image must contain an additional header called Multiboot header, besides the headers of the format used by the OS image. The Multiboot header must be contained completely within the first 8192 bytes of the OS image, and must be longword (32-bit) aligned. In general, it should come as early as possible, and may be embedded in the beginning of the text segment after the real executable header.

我不确定 AOUT kludge 的作用。我只在我的操作系统中使用 ELF。我遵循了这个指南:http://wiki.osdev.org/Bare_Bones

关于kernel - 麸皮内核开发 : Grub Multiboot header?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com