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
|
||||||
|
}
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
*.bin
|
*.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