【问题标题】:Booting custom kernel in Grub2在 Grub2 中引导自定义内核
【发布时间】:2013-06-27 16:47:03
【问题描述】:

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

.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 (不是真正的规范,只是一个头文件)

所以,现在我正在使用这个多重引导标头:

.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

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

有什么建议吗?

谢谢!

【问题讨论】:

    标签: assembly x86 osdev multiboot


    【解决方案1】:

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

    这是我的一个旧项目的示例标题:

        # 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:
    

    【讨论】:

    • 谢谢,但是否需要所有信息?或者从#multiboot 2 标头到#tags?
    • 我认为加载器条目和地址信息是所有需要的(当然还有结尾),但我会检查代码中的链接以确保
    • 如果内核是 ELF 格式,那么除了终止标签之外不需要额外的标签。
    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 2017-10-30
    • 2019-10-24
    • 2019-09-23
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多