2013-06-30 38 views
1

我想用Grub2启动定制内核。我用老(蛴螬1)多重头:在Grub2中启动定制内核

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

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

... 

movl %eax, magic 

但它不与GRUB2工作,所以我已经搜查了新的多重引导规范,并发现它: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 

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

有什么建议吗?

谢谢!

回答

2

多重引导2使用与原始多重引导不同的结构(即使用标记结构)。

下面是我的大项目之一的示例联箱:

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

感谢,但所需的所有信息?或者从#multiboot 2标题到#tags? – Vanzef

+0

我认为装载机入口和地址信息都是需要的(加上结尾的当然),但我会检查代码中的链接以确保 –

+1

如果内核采用ELF格式,则不需要额外的标签除了终止标签。 –