Jump to kernel

This commit is contained in:
Robbe Van Herck 2019-12-28 17:25:29 +01:00
parent b308617ac8
commit 984ef385f1
No known key found for this signature in database
GPG key ID: A66F76F7B81BD784
4 changed files with 23 additions and 13 deletions

View file

@ -2,13 +2,12 @@ run_kernel: compile_kernel
qemu-system-i386 -kernel target/kernel.bin qemu-system-i386 -kernel target/kernel.bin
compile_kernel: compile_kernel:
nasm -f bin kernel/boot.asm -o target/kernel_boot.o nasm -felf32 kernel/boot.asm -o target/boot.o
i686-elf-gcc -c kernel/kernel.c -o target/kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra i686-elf-gcc -c kernel/kernel.c -o target/kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra
i686-elf-gcc -T kernel/linker.ld -o target/kernel.bin -ffreestanding -O2 -nostdlib target/kernel_boot.o target/kernel.o -lgcc i686-elf-gcc -T kernel/linker.ld -o target/kernel.bin -ffreestanding -O2 -nostdlib target/boot.o target/kernel.o -lgcc
compile_bootloader: compile_bootloader: compile_kernel
rm -rf target/boot.bin rm -rf target/boot.bin
nasm -f bin bootloader/test_kernel.asm -o target/kernel.bin
nasm -f bin -o target/boot.bin bootloader/main.asm nasm -f bin -o target/boot.bin bootloader/main.asm
run_bootloader: compile_bootloader run_bootloader: compile_bootloader

View file

@ -219,7 +219,19 @@ mov ss, ax
; set up stack ; set up stack
mov esp, 0x090000 mov esp, 0x090000
jmp 0x08:0x8000 ; load offset from ELF file
; mind the differing endian
mov edx, 0x8018
mov ah, [ds:edx+2]
mov al, [ds:edx+3]
shl eax, 16
mov ah, [ds:edx]
mov al, [ds:edx+1]
; add the beginning 0x8000
add eax, 0x8000
jmp eax
.end: .end:
jmp .end jmp .end

View file

@ -110,9 +110,9 @@ void kernel_main(void)
terminal_initialize(); terminal_initialize();
/* Newline support is left as an exercise. */ /* Newline support is left as an exercise. */
terminal_writestring("Hello, "); // terminal_writestring("Hello, ");
terminal_setcolor(vga_entry_color(VGA_COLOR_GREEN, VGA_COLOR_BLACK)); // terminal_setcolor(vga_entry_color(VGA_COLOR_GREEN, VGA_COLOR_BLACK));
terminal_writestring("kernel"); // terminal_writestring("kernel");
terminal_setcolor(vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK)); // terminal_setcolor(vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK));
terminal_writestring(" World!\n"); // terminal_writestring(" World!\n");
} }

View file

@ -6,9 +6,8 @@ ENTRY(_start)
kernel image. */ kernel image. */
SECTIONS SECTIONS
{ {
/* Begin putting sections at 1 MiB, a conventional place for kernels to be /* Set this to 0, so the program entry is the relative position to the start of the kernel */
loaded at by the bootloader. */ . = 0;
. = 1M;
/* First put the multiboot header, as it is required to be put very early /* First put the multiboot header, as it is required to be put very early
early in the image or the bootloader won't recognize the file format. early in the image or the bootloader won't recognize the file format.