Разработка своей ОС на Windows

Возник такой вопрос, а возможно ли вообще создать свою ос, используя Windows(плюс ld, gcc, C, nasm, qemu), я пересмотрел множество вариантов простеньких ОС'ок, но там всегда появлялся elf, а он как известно Linux'овский.


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

Автор решения: SurfaceStack

Конечно можно. Ядро можно сделать файлом bin. Загрузчик пишется на NASM, ядро на C/C++. После с помощью ld все собирается в один файл. Вот пример моего linker.ld (ядро загружается по 0x200000 (2Мб) и имеет формат bin):

OUTPUT_FORMAT("binary")
ENTRY(_start)

SECTIONS {
    .text 0x200000 : {
        *(.text)
        *(.code)
        *(.rodata*)
    }
    .data ALIGN(0x1000) : {
        *(.data)
    }
    .bss ALIGN(0x1000) : {
        *(.bss)
    }
    /* .empty ALIGN(0x1000) - 1 : {
        BYTE(0)
    } */
} 

Линкуется такой командой ($(SOURCES) - все остальные файлики (*.o) для ядра):

x86_64-elf-ld -m elf_x86_64 -T src/kernel/linker.ld -nostdlib -o bin/kernel/kernel.bin bin/kernel/kentry.o $(SOURCES)

Вот мой kentry.o:

[bits 64]
extern kmain

section .text
global _start

_start:
    call kmain
    jmp $

В загрузчике надо загружать ядро с диска или просто определенные сектора по нужному адресу и передавать туда управление

→ Ссылка