커널의 Multiboot v1 헤더를 감지하지 못하는 Grub 2 (및 QEMU의 -kernel
)에 문제가 있습니다. 나는 .text
앞에 별도의 섹션에 머리글이 있습니다.커널에서 멀티 부트 헤더를 감지하지 못했습니다.
linker.ld
:
SECTIONS
{
. = 1M;
.multiboot ALIGN(4K) :
{
*(.multiboot)
}
.text ALIGN(4K) :
{
*(.text)
}
[snip]
boot.s
(구문으로 GNU) :
kernel.bin: file format elf32-i386
Contents of section .multiboot:
101000 02b0ad1b 03000000 fb4f52e4 .........OR.
Contents of section .text:
[snip]
: 나는 마법의 숫자로 지정된 헤더 섹션이 추가되고 있음을 확인했습니다
.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]
그래 브 2는 커널에 유효한 멀티 부팅이 없다고 말합니다. ADER, 그리고 QEMU의 -kernel
옵션을 사용하여 발생합니다
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a000
.
나는 Bran과 OSDev (이전의 광산 커널)의 일반적인 코드와 비교해 봤지만, 내가 잘못하고있는 것을 파악할 수는없는 것 같습니다.
저도 같은 오류를 exaclt 한 잘못된 것입니다. 나는 해결책을 발견 할 수있다. – rkmax