Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2023, 15:26   #1
suigintou
 
Регистрация: 30.09.2012
Сообщений: 9
По умолчанию Сборка и загрузка ядра своей микро-ос

Всем привет. Я хочу анчать писать ядро своей операционной системы. Написал такой код:

boot.asm:

Код:
FLAGS equ 0
MAGIC equ 0x1BADB002
CHECKSUM equ -(MAGIC + FLAGS)

section .multiboot
align 4
	dd MAGIC
	dd FLAGS
	dd CHECKSUM

section .bss
align 16
stack_bottom:
resb 16384
stack_top:

global start
extern KernelMain

section .text
start:
	mov rsp, stack_top
	push rbx
	call KernelMain
	cli
.hang: hlt
	jmp .hang
.end:
kernel.cpp

Код:
#include <stddef.h>

extern "C" void KernelMain() {
	const char str[] = "H\x0F""e\x0Fl\x0Fl\x0Fo\x0F \x0Fw\x0Fo\x0Fr\x0Fl\x0F""d\x0F";
	char* buf = (char*) 0xB8000;
	char c;
	for(size_t i = 0; c = str[i]; i++) {
		buf[i] = str[i];
	}
	while(1);
}
Файл для линкера:

Код:
ENTRY(start)

SECTIONS
{
	. = 1M;

	.text BLOCK(4K) : ALIGN(4K)
	{
		*(.multiboot)
		*(.text)
	}

	.rodata BLOCK(4K) : ALIGN(4K)
	{
		*(.rodata)
	}

	.data BLOCK(4K) : ALIGN(4K)
	{
		*(.data)
	}

	.bss BLOCK(4K) : ALIGN(4K)
	{
		*(COMMON)
		*(.bss)
	}
}
Собираю проект так:

Компиляция boot.asm:
nasm src/boot.asm -f elf64 -o build/boot.o

Компиляция kernel.cpp:
gcc -c -ffreestanding src/kernel.cpp -o build/kernel.o

Линковка:
ld build/boot.o build/kernel.o -T src/linker.ld -n -o build/kernel

Получается исполняемый файл kernel. Собираю загрузочный образ. Для этого создал папки isofiles/boot/grub. Внутри isofiles/boot/grub создал grub.cfg:

Код:
set default=0
set timeout=0

menuentry "my kernel" {
	multiboot /boot/kernel
	boot
}
Ядро поместил в isofiles/boot
Собираю образ так: grub-mkrescue -o os.iso isofiles

После этого пытаюсь загрузить ядро в qemu: qemu-system-x86_64 -cdrom os.iso
И ничего не выводится на экран. QEMU зависает в бесконечных попытках загрузить ядро. Как собрать ядро так, чтобы все заработало?
suigintou вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Карта микро-СД 128 Гб Spinner2017 Компьютерное железо 1 17.08.2017 13:49
Сборка ядра с нуля и запись Linux на флешку в виде iso-образа Yurko_San Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 08.06.2016 17:58
Микро Alarm Maguark Общие вопросы C/C++ 1 15.04.2015 13:56
Микро програмка tigatiga Фриланс 17 04.03.2015 22:11
Проблема с Микро СД DRAGGER Компьютерное железо 1 21.10.2009 08:52