move to grub
This commit is contained in:
4
.build/iso/boot/grub/grub.cfg
Normal file
4
.build/iso/boot/grub/grub.cfg
Normal file
@@ -0,0 +1,4 @@
|
||||
menuentry "nub-os" {
|
||||
multiboot /boot/kernel.bin
|
||||
boot
|
||||
}
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
*.bin
|
||||
*.o
|
||||
*.o
|
||||
*.iso
|
||||
4
grub.cfg
Normal file
4
grub.cfg
Normal file
@@ -0,0 +1,4 @@
|
||||
menuentry "nub-os" {
|
||||
multiboot /boot/kernel.bin
|
||||
boot
|
||||
}
|
||||
28
makefile
Normal file
28
makefile
Normal 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
|
||||
@@ -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
|
||||
@@ -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
21
src/entry.asm
Normal 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:
|
||||
@@ -1,4 +0,0 @@
|
||||
[extern kernel_init]
|
||||
[bits 32]
|
||||
call kernel_init
|
||||
hlt
|
||||
@@ -1,22 +0,0 @@
|
||||
ENTRY(kernel_init)
|
||||
|
||||
SECTIONS {
|
||||
. = 0x1000;
|
||||
|
||||
.text : {
|
||||
*(.text)
|
||||
}
|
||||
|
||||
.rodata : {
|
||||
*(.rodata)
|
||||
}
|
||||
|
||||
.data : {
|
||||
*(.data)
|
||||
}
|
||||
|
||||
.bss : {
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
19
src/makefile
19
src/makefile
@@ -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
|
||||
Reference in New Issue
Block a user