2013-06-30 47 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格式,則不需要額外的標籤除了終止標籤。 –