From 42d8f26abbf2866a91c90874076fd3ae26e77b15 Mon Sep 17 00:00:00 2001 From: nub31 Date: Sat, 23 Aug 2025 16:54:09 +0200 Subject: [PATCH] move to grub --- .build/iso/boot/grub/grub.cfg | 4 ++ .gitignore | 3 +- grub.cfg | 4 ++ makefile | 28 ++++++++++++ src/boot/bootloader.asm | 84 ----------------------------------- src/boot/makefile | 5 --- src/entry.asm | 21 +++++++++ src/{kernel => }/kernel.c | 0 src/kernel/entry.asm | 4 -- src/kernel/linker.ld | 22 --------- src/kernel/makefile | 19 -------- src/makefile | 19 -------- src/{kernel => }/mem.c | 0 src/{kernel => }/mem.h | 0 src/{kernel => }/print.c | 0 src/{kernel => }/print.h | 0 16 files changed, 59 insertions(+), 154 deletions(-) create mode 100644 .build/iso/boot/grub/grub.cfg create mode 100644 grub.cfg create mode 100644 makefile delete mode 100644 src/boot/bootloader.asm delete mode 100644 src/boot/makefile create mode 100644 src/entry.asm rename src/{kernel => }/kernel.c (100%) delete mode 100644 src/kernel/entry.asm delete mode 100644 src/kernel/linker.ld delete mode 100644 src/kernel/makefile delete mode 100644 src/makefile rename src/{kernel => }/mem.c (100%) rename src/{kernel => }/mem.h (100%) rename src/{kernel => }/print.c (100%) rename src/{kernel => }/print.h (100%) diff --git a/.build/iso/boot/grub/grub.cfg b/.build/iso/boot/grub/grub.cfg new file mode 100644 index 0000000..08a2ab9 --- /dev/null +++ b/.build/iso/boot/grub/grub.cfg @@ -0,0 +1,4 @@ +menuentry "nub-os" { + multiboot /boot/kernel.bin + boot +} diff --git a/.gitignore b/.gitignore index e40bc17..4cf3c42 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.bin -*.o \ No newline at end of file +*.o +*.iso \ No newline at end of file diff --git a/grub.cfg b/grub.cfg new file mode 100644 index 0000000..08a2ab9 --- /dev/null +++ b/grub.cfg @@ -0,0 +1,4 @@ +menuentry "nub-os" { + multiboot /boot/kernel.bin + boot +} diff --git a/makefile b/makefile new file mode 100644 index 0000000..7a8c7bb --- /dev/null +++ b/makefile @@ -0,0 +1,28 @@ +CC = i386-elf-gcc -ffreestanding -m32 + +.build/nub-os.iso: .build/kernel.bin + mkdir -p .build/iso/boot/grub + cp grub.cfg .build/iso/boot/grub + cp .build/kernel.bin .build/iso/boot/ + grub-mkrescue -o .build/nub-os.iso .build/iso/ + +.build/kernel.bin: .build/entry.o .build/kernel.o .build/mem.o .build/print.o + i386-elf-ld -Ttext 0x100000 -o .build/kernel.bin .build/entry.o .build/kernel.o .build/mem.o .build/print.o + +.build/kernel.o: src/kernel.c + $(CC) -c -o .build/kernel.o src/kernel.c + +.build/mem.o: src/mem.c + $(CC) -c -o .build/mem.o src/mem.c + +.build/print.o: src/print.c + $(CC) -c -o .build/print.o src/print.c + +.build/entry.o: src/entry.asm + nasm -f elf -o .build/entry.o src/entry.asm + +run: .build/nub-os.iso + qemu-system-x86_64 -cdrom .build/nub-os.iso + +clean: + @rm -r .build/* 2>/dev/null || true diff --git a/src/boot/bootloader.asm b/src/boot/bootloader.asm deleted file mode 100644 index 127d9f7..0000000 --- a/src/boot/bootloader.asm +++ /dev/null @@ -1,84 +0,0 @@ -[org 0x7c00] -[bits 16] - -KERNEL_INIT equ 0x1000 - -mov [BOOT_DISK], dl - -xor ax, ax -mov es, ax -mov ds, ax -mov bp, 0x8000 -mov sp, bp - -mov bx, KERNEL_INIT -mov dh, 2 - -mov ah, 0x02 -mov al, dh -mov ch, 0x00 -mov dh, 0x00 -mov cl, 0x02 -mov dl, [BOOT_DISK] -int 0x13 - -mov ah, 0x0 -mov al, 0x3 -int 0x10 - -CODE_SEG equ gdt_code - gdt_start -DATA_SEG equ gdt_data - gdt_start - -cli -lgdt [gdt_descriptor] -mov eax, cr0 -or eax, 1 -mov cr0, eax -jmp CODE_SEG:start_protected_mode -jmp $ - -BOOT_DISK: db 0 - -gdt_start: - dd 0x0 - dd 0x0 - - gdt_code: - dw 0xffff - dw 0x0 - db 0x0 - db 0b10011010 - db 0b11001111 - db 0x0 - - gdt_data: - dw 0xffff - dw 0x0 - db 0x0 - db 0b10010010 - db 0b11001111 - db 0x0 - -gdt_end: - -gdt_descriptor: - dw gdt_end - gdt_start - 1 - dd gdt_start - -[bits 32] -start_protected_mode: - mov ax, DATA_SEG - mov ds, ax - mov ss, ax - mov es, ax - mov fs, ax - mov gs, ax - - mov ebp, 0x90000 - mov esp, ebp - - jmp KERNEL_INIT - hlt - -times 510-($-$$) db 0 -dw 0xaa55 \ No newline at end of file diff --git a/src/boot/makefile b/src/boot/makefile deleted file mode 100644 index c4a5056..0000000 --- a/src/boot/makefile +++ /dev/null @@ -1,5 +0,0 @@ -bootloader.bin: bootloader.asm - nasm -f bin -o bootloader.bin bootloader.asm - -clean: - @rm *.o *.bin 2>/dev/null || true diff --git a/src/entry.asm b/src/entry.asm new file mode 100644 index 0000000..addeaf4 --- /dev/null +++ b/src/entry.asm @@ -0,0 +1,21 @@ +extern kernel_init + +section .multiboot +align 4 + dd 0x1BADB002 ; multiboot magic number + dd 0x0 ; flags + dd -(0x1BADB002+0x0) ; checksum + +section .text +global _start +_start: + cli + mov esp, stack_top + call kernel_init +.hang: + hlt + jmp .hang + +section .bss +resb 8192 +stack_top: diff --git a/src/kernel/kernel.c b/src/kernel.c similarity index 100% rename from src/kernel/kernel.c rename to src/kernel.c diff --git a/src/kernel/entry.asm b/src/kernel/entry.asm deleted file mode 100644 index 9335809..0000000 --- a/src/kernel/entry.asm +++ /dev/null @@ -1,4 +0,0 @@ -[extern kernel_init] -[bits 32] -call kernel_init -hlt \ No newline at end of file diff --git a/src/kernel/linker.ld b/src/kernel/linker.ld deleted file mode 100644 index 5c77a0b..0000000 --- a/src/kernel/linker.ld +++ /dev/null @@ -1,22 +0,0 @@ -ENTRY(kernel_init) - -SECTIONS { - . = 0x1000; - - .text : { - *(.text) - } - - .rodata : { - *(.rodata) - } - - .data : { - *(.data) - } - - .bss : { - *(.bss) - *(COMMON) - } -} diff --git a/src/kernel/makefile b/src/kernel/makefile deleted file mode 100644 index 11a8c1c..0000000 --- a/src/kernel/makefile +++ /dev/null @@ -1,19 +0,0 @@ -CC = i386-elf-gcc -ffreestanding -m32 - -kernel.bin: entry.o kernel.o linker.ld mem.o print.o - i386-elf-ld -o kernel.bin -T linker.ld entry.o kernel.o mem.o print.o --oformat binary - -kernel.o: kernel.c - $(CC) -c -o kernel.o kernel.c - -mem.o: mem.c - $(CC) -c -o mem.o mem.c - -print.o: print.c - $(CC) -c -o print.o print.c - -entry.o: entry.asm - nasm -f elf entry.asm - -clean: - @rm *.o *.bin 2>/dev/null || true diff --git a/src/makefile b/src/makefile deleted file mode 100644 index 7721464..0000000 --- a/src/makefile +++ /dev/null @@ -1,19 +0,0 @@ -.PHONY: kernel/kernel.bin boot/bootloader.bin - -os.bin: boot/bootloader.bin kernel/kernel.bin - dd if=/dev/zero of=zeroes.bin bs=1 count=10240 - cat boot/bootloader.bin kernel/kernel.bin zeroes.bin > os.bin - -kernel/kernel.bin: - pushd kernel; make kernel.bin; popd - -boot/bootloader.bin: - pushd boot; make bootloader.bin; popd - -run: os.bin - qemu-system-x86_64 -drive file=os.bin,format=raw,index=0,media=disk - -clean: - pushd kernel; make clean; popd - pushd boot; make clean; popd - @rm *.o *.bin 2>/dev/null || true diff --git a/src/kernel/mem.c b/src/mem.c similarity index 100% rename from src/kernel/mem.c rename to src/mem.c diff --git a/src/kernel/mem.h b/src/mem.h similarity index 100% rename from src/kernel/mem.h rename to src/mem.h diff --git a/src/kernel/print.c b/src/print.c similarity index 100% rename from src/kernel/print.c rename to src/print.c diff --git a/src/kernel/print.h b/src/print.h similarity index 100% rename from src/kernel/print.h rename to src/print.h