gpt4 book ai didi

assembly - 在 Grub2 中引导自定义内核

转载 作者:行者123 更新时间:2023-12-02 17:43:52 24 4
gpt4 key购买 nike

我想用 Grub2 启动自定义内核。我使用了旧的 (grub 1) 多引导 header :

.set flags, 0x0
.set magic, 0x1badb002
.set checksum, -(magic + flags)

.align 4
.long magic
.long flags
.long checksum

...

movl %eax, magic

但它不适用于 Grub2,所以我搜索了新的 Multiboot 规范并找到了它:http://bzr.savannah.gnu.org/lh/grub/branches/multiboot2/annotate/head:/doc/multiboot2.h(这不是真正的规范,它只是一个头文件)

所以,现在我正在使用这个多重启动 header :

.set flags, 0x0
.set magic, 0xe85250d6
.set magic_the_second, 0x36d76289
.set checksum, -(magic + flags)

.align 4
.long magic
.long flags
.long checksum

...

movl %eax, magic_the_second

但它也不起作用: 没有多重引导 header

有什么建议吗?

谢谢!

最佳答案

Multiboot 2 使用与原始 multiboot 不同的结构(即,它使用标签结构)。

这是我的一个旧项目中的示例 header :

    # multiboot 2 header (see http://download-mirror.savannah.gnu.org/releases/grub/phcoder/multiboot.pdf)
.balign 8
mbhdr:
.long 0xe85250d6 # magic
.long 0 # architecture (i386, 32-bit)
.long .LhdrEnd-mbhdr # header length
.long -(.LhdrEnd-mbhdr+0xe85250d6) # checksum
# tags
# module align
.word 6 # type
.word 0 # flags
.long 8 # size in bytes (spec says 12?)
.balign 8
# loader entry
.word 3
.word 0
.long 12
.long entry
.balign 8
# console flags
.word 4
.word 0
.long 12
.long 0x03 # EGA text support, require console
.balign 8
# info request
.word 1
.word 0
.long 4*6+8
.long 5 # BIOS boot device
.long 1 # command line
.long 3 # modules
.long 9 # ELF symbols
.long 6 # memory map
.long 10 # APM table
.balign 8
# address info
.word 2 # type
.word 0 # flags
.long 24 # size
.long mbhdr # header load addr
.long 0x100000 # load addr
.long 0 # load end addr (entire file)
.long 0 # BSS end addr (no BSS)
.balign 8
# terminating tag
.word 0
.word 0
.long 8
.LhdrEnd:

关于assembly - 在 Grub2 中引导自定义内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17389650/

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