move to grub

This commit is contained in:
nub31
2025-08-23 16:54:09 +02:00
parent 9be2f8a948
commit 42d8f26abb
16 changed files with 59 additions and 154 deletions

View File

@@ -0,0 +1,4 @@
menuentry "nub-os" {
multiboot /boot/kernel.bin
boot
}

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
*.bin
*.o
*.o
*.iso

4
grub.cfg Normal file
View File

@@ -0,0 +1,4 @@
menuentry "nub-os" {
multiboot /boot/kernel.bin
boot
}

28
makefile Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -1,5 +0,0 @@
bootloader.bin: bootloader.asm
nasm -f bin -o bootloader.bin bootloader.asm
clean:
@rm *.o *.bin 2>/dev/null || true

21
src/entry.asm Normal file
View File

@@ -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:

View File

@@ -1,4 +0,0 @@
[extern kernel_init]
[bits 32]
call kernel_init
hlt

View File

@@ -1,22 +0,0 @@
ENTRY(kernel_init)
SECTIONS {
. = 0x1000;
.text : {
*(.text)
}
.rodata : {
*(.rodata)
}
.data : {
*(.data)
}
.bss : {
*(.bss)
*(COMMON)
}
}

View File

@@ -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

View File

@@ -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