qemu: Error loading uncompressed kernel without PVH ELF note

Пытаюсь запустить простое ядро (написано на Си и NASM) через команду qemu-system-x86_64 -kernel kernel, однако получаю ошибку: Error loading uncompressed kernel without PVH ELF Note. Раньше этого не было и ядро нормально запускалось, но я так и не смог понял причину ошибки. В интернете мало ответов на подобный вопрос и я не могу их нормально совместить со своим кодом.

boot.asm:

bits 32
section .bss
resb 8192
stack:

section .text
align 4
    dd 0x1BADB002
    dd 0x00
    dd -(0x1BADB002 + 0x00)
global _start
extern kmain
_start:
    cli
    mov esp, stack
    call kmain
    hlt

    jmp $

link.ld:

ENTRY(_start)
SECTIONS {
    . = 1M;
    .text   : { *(.text)   }
    .data   : { *(.data)   }
    .bss    : { *(.bss)    }
    .rodata : { *(.rodata) }
}

Makefile:

ASMFLAGS = -felf64
CFLAGS=-c -nostdlib -m32 -fno-stack-protector --no-warnings -I./include -ggdb -finline-functions
OBJS=bin/mem.o bin/string.o bin/idt.o bin/irq.o bin/isr.o \
       bin/main.o bin/system.o bin/vga.o bin/keyboard.o \
       bin/boot.o bin/io.o bin/idt_load.o bin/isr_handler.o bin/irq_handler.o

all: bin/kernel

bin/kernel: link.ld $(OBJS)
    ld -T $< -m elf_i386 -o $@ $(OBJS) -M > bin/map.map

bin/boot.o: boot/boot.asm
    nasm -felf32 $^ -o $@
bin/io.o: kernel/io.asm
    nasm -felf32 $^ -o $@
bin/idt_load.o: kernel/interrupts/idt_load.asm
    nasm -felf32 $^ -o $@
bin/isr_handler.o: kernel/interrupts/isr_handler.asm
    nasm -felf32 $^ -o $@
bin/irq_handler.o: kernel/interrupts/irq_handler.asm
    nasm -felf32 $^ -o $@

bin/main.o: kernel/main.c
    gcc $(CFLAGS) $^ -o $@
bin/vga.o: kernel/vga.c
    gcc $(CFLAGS) $^ -o $@
bin/system.o: kernel/system.c
    gcc $(CFLAGS) $^ -o $@
bin/keyboard.o: kernel/keyboard.c
    gcc $(CFLAGS) $^ -o $@

bin/%.o: kernel/*/%.c
    gcc $(CFLAGS) $^ -o $@

clean:
    rm bin/*

Что вообще означает эта ошибка?


Ответы (0 шт):