У меня проблема с Grub 2 (и -kernel
), не обнаруживающая заголовок Multiboot v1 в моем ядре. У меня есть заголовок в отдельном разделе до .text
.Grub 2 не обнаруживает заголовок Multiboot в ядре
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. Адер, и используя -kernel
вариант из QEMU причиняет:
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a000
, который, как представляется, адрес в диапазоне BIOS-карту, не там, где Мультизагрузочный должно быть.
Я сравнивал с обычным кодом в Bran's и OSDev (плюс предыдущее ядро), но я не могу понять, что я делаю неправильно.
Я exaclt ту же ошибку, что неправильно. я могу найти решение – rkmax