首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Brans内核开发: Grub多引导标头?

Brans内核开发: Grub多引导标头?
EN

Stack Overflow用户
提问于 2012-08-05 05:36:38
回答 1查看 3.1K关注 0票数 3

我正在关注Bran的内核开发tutorial。在他汇编代码中,他描述了下面的代码块,他认为这些代码不是很重要,而是用GRUB完成的。

代码语言:javascript
复制
; 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上下文中有一些特殊的意义?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-05 21:27:06

这段汇编代码不是代码,而是一个多引导标头。当你链接你的内核时,这个头文件将被放在二进制文件的开头,这样GRUB就可以看到你的内核是兼容多重引导的。这个头文件包含一个幻数(0x1badb002)、一个标志列表(在您的例子中,内核应该加载到一个页面对齐的地址上,并且您希望GRUB为您提供一个内存映射)和一个校验和。如果其中一个条目不符合多重引导规范,GRUB将不会加载您的内核。

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

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

引用手册中的内容:

操作系统映像除了包含操作系统映像使用的格式的标头外,还必须包含一个称为多重引导标头的额外标头。多重引导标头必须完全包含在操作系统映像的前8192个字节内,并且必须是长字(32位)对齐的。一般来说,它应该尽可能早地出现,并且可以嵌入在真正的可执行文件头之后的文本段的开头。

我不知道AOUT杂技是做什么用的。我只在我的操作系统中使用ELF。我遵循了这个指南:http://wiki.osdev.org/Bare_Bones

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11812163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档