我遇到了Grub 2(和QEMU的-kernel
)未檢測到內核中的Multiboot v1標題的問題。在.text
之前,我有一個單獨的部分的標題。Grub 2未檢測到內核中的多引導標題
linker.ld
:
SECTIONS
{
. = 1M;
.multiboot ALIGN(4K) :
{
*(.multiboot)
}
.text ALIGN(4K) :
{
*(.text)
}
[snip]
boot.s
(GNU爲語法):
.set MAGIC, 0x1badb002
.set FLAGS, (1<<0 | 1<<1) # align, provide mem map
.set CHECKSUM, -(MAGIC + FLAGS)
.section .multiboot
.long MAGIC
.long FLAGS
.long CHECKSUM
.section .text
[snip]
我已驗證爲與幻數指定要添加的報頭部分:
kernel.bin: file format elf32-i386
Contents of section .multiboot:
101000 02b0ad1b 03000000 fb4f52e4 .........OR.
Contents of section .text:
[snip]
然而Grub 2說內核沒有一個有效的Multiboot他阿德爾,並使用QEMU的-kernel
選項的原因:
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a000
這似乎是在BIOS映射範圍內的地址,不要在那裏多引導應該是。
我已經比較了Bran和OSDev中的常用代碼(加上我以前的內核),但我似乎無法弄清楚我做錯了什麼。
我已經exaclt了同樣的錯誤,什麼是錯的。我可以找到一個解決方案 – rkmax