Сборка — Тестирование собственного самодельного ОС с QEMU. Asm / Stack Overflow

Я сделал базовую операционную систему, которая пока ничего не делает, но я хочу протестировать ее на qemu. Но что я должен сделать для выходного файла ld-linker, чтобы заставить его работать с qemu (iso, или что-то?).

Это мой скрипт компоновщика:

OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
.text 0x00100000:
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
textEnd = .;

.data :
{
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(4096);
}
dataEnd = .;

.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
bssEnd = .;

end = .; _end = .; __end = .;
}

boot.s: (ASM)

[BITS 32]

MBOOT_PAGE_ALIGN    equ 1 << 0
MBOOT_MEM_INFO      equ 1 << 1
MBOOT_AOUT_KLUDGE   equ 1 << 16
MBOOT_MAGIC equ 0x1BADB002
MBOOT_FLAGS equ MBOOT_PAGE_ALIGN | MBOOT_MEM_INFO | MBOOT_AOUT_KLUDGE
CHECKSUM    equ -(MBOOT_MAGIC + MBOOT_FLAGS)
STACK_SIZE  equ 0x1000

[global start]
[extern main]
[extern textEnd]
[extern dataEnd]
[extern bssEnd]

entry:
jmp start

align 4, db 0
mBootHeader:
dd MBOOT_MAGIC
dd MBOOT_FLAGS
dd CHECKSUM
dd mBootHeader
dd entry
dd dataEnd
dd bssEnd
dd entry

start:
call main
cli
hlt

Я собрал все это следующим образом:

$ nasm -f aout boot.s -o boot.o
$ gcc -c kernel.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions -m32
$ ld -T link.ld -o kernel.bin boot.o kernel.o -melf_i386

Это все работает без ошибок, только проблема в том, как я загружаю его в qemu?
Выходной файл является исполняемым, но, конечно, я не могу запустить его на Linux, потому что это операционная система.

0

Решение

Если у вас есть qemu, вы можете запустить его с помощью:

qemu-system-i386 -kernel kernel.bin

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]