diff --git a/Makefile b/Makefile index 038150f..2e1aff2 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ CC = ${HOME}/opt/cross/bin/i686-elf-gcc CPP = ${HOME}/opt/cross/bin/i686-elf-g++ CFLAGS = -ffreestanding -Og -ggdb -Wall -Wextra -OFILES =$(BUILD_DIR)/boot.o $(BUILD_DIR)/kterm.o $(BUILD_DIR)/kernel.o $(BUILD_DIR)/memory.o $(BUILD_DIR)/paging.o $(BUILD_DIR)/pit.o $(BUILD_DIR)/time.o $(BUILD_DIR)/keyboard.o $(BUILD_DIR)/io.o $(BUILD_DIR)/gdtc.o $(BUILD_DIR)/idt.o $(BUILD_DIR)/pic.o $(BUILD_DIR)/sv-terminal.o $(BUILD_DIR)/string.o $(BUILD_DIR)/launcher.o +OFILES =$(BUILD_DIR)/boot.o $(BUILD_DIR)/kterm.o $(BUILD_DIR)/kernel.o $(BUILD_DIR)/memory.o $(BUILD_DIR)/paging.o $(BUILD_DIR)/pit.o $(BUILD_DIR)/time.o $(BUILD_DIR)/keyboard.o $(BUILD_DIR)/io.o $(BUILD_DIR)/gdtc.o $(BUILD_DIR)/idt.o $(BUILD_DIR)/pic.o $(BUILD_DIR)/sv-terminal.o $(BUILD_DIR)/string.o $(BUILD_DIR)/prekernel.o SRC_DIR = source BUILD_DIR = build @@ -30,7 +30,7 @@ clean_iso: iso: clean_iso clean build mkdir -p root/boot/grub cp build/myos.bin root/boot/myos.bin - cp src/grub.cfg root/boot/grub/grub.cfg + cp source/grub.cfg root/boot/grub/grub.cfg grub-mkrescue -o build/barinkOS.iso root run: all @@ -58,13 +58,13 @@ $(BUILD_DIR)/kterm.o: $(CPP) -c $(SRC_DIR)/kernel/Terminal/kterm.cpp -o $(BUILD_DIR)/kterm.o $(CFLAGS) -fno-exceptions -fno-rtti $(BUILD_DIR)/boot.o: - $(AS) $(SRC_DIR)/kernel/KernelLauncher/boot.s -o $(BUILD_DIR)/boot.o + $(AS) $(SRC_DIR)/kernel/Boot/boot.s -o $(BUILD_DIR)/boot.o $(BUILD_DIR)/crti.o: - $(AS) $(SRC_DIR)/kernel/KernelLauncher/crti.s -o $(BUILD_DIR)/crti.o + $(AS) $(SRC_DIR)/kernel/crti.s -o $(BUILD_DIR)/crti.o $(BUILD_DIR)/crtn.o: - $(AS) $(SRC_DIR)/kernel/KernelLauncher/crtn.s -o $(BUILD_DIR)/crtn.o + $(AS) $(SRC_DIR)/kernel/crtn.s -o $(BUILD_DIR)/crtn.o $(BUILD_DIR)/io.o: $(CPP) -c $(SRC_DIR)/kernel/io.cpp -o $(BUILD_DIR)/io.o $(CFLAGS) -fno-exceptions -fno-rtti @@ -104,5 +104,5 @@ $(BUILD_DIR)/memory.o: $(BUILD_DIR)/paging.o: $(CPP) -c $(SRC_DIR)/kernel/Memory/VirtualMemoryManager.cpp -o $(BUILD_DIR)/paging.o $(CFLAGS) -fno-exceptions -fno-rtti -$(BUILD_DIR)/launcher.o: - $(CPP) -c $(SRC_DIR)/kernel/KernelLauncher/launcher.cpp -o $(BUILD_DIR)/launcher.o $(CFLAGS) -fno-exceptions -fno-rtti \ No newline at end of file +$(BUILD_DIR)/prekernel.o: + $(CPP) -c $(SRC_DIR)/kernel/PreKernel/prekernel.cpp -o $(BUILD_DIR)/prekernel.o $(CFLAGS) -fno-exceptions -fno-rtti \ No newline at end of file diff --git a/source/grub.cfg b/source/grub.cfg index df39e08..30bb80f 100644 --- a/source/grub.cfg +++ b/source/grub.cfg @@ -1,3 +1,9 @@ menuentry "BarinkOS" { multiboot /boot/myos.bin } + +menuentry "BarinkOS Tests" { + multiboot /boot/myos.bin +} + + diff --git a/source/kernel/KernelLauncher/boot.s b/source/kernel/Boot/boot.s similarity index 92% rename from source/kernel/KernelLauncher/boot.s rename to source/kernel/Boot/boot.s index 140630c..fb98575 100644 --- a/source/kernel/KernelLauncher/boot.s +++ b/source/kernel/Boot/boot.s @@ -43,6 +43,14 @@ multiboot_page_table: .global _start .type _start, @function _start: + + /* push the pointer to the Multiboot information structure*/ + pushl %ebx + + /* push the magic value */ + pushl %eax + call testLauncher + # Get physical address of the boot_page_table movl $(boot_page_table - 0xC0000000), %edi # Map address 0 @@ -112,11 +120,7 @@ isPaging: pushl $0 popf - /* push the pointer to the Multiboot information structure*/ - pushl %ebx - /* push the magic value */ - pushl %eax call early_main @@ -129,11 +133,11 @@ isPaging: jmp 1b -.include "./src/kernel/Memory/GDT/gdt.s" -.include "./src/kernel/irs_table.s" -.include "./src/kernel/irq_table.s" -.include "./src/kernel/Interrupts/idt/idt.s" -.include "./src/kernel/Memory/paging.s" -.include "./src/kernel/cpu.s" +.include "./source/kernel/Memory/GDT/gdt.s" +.include "./source/kernel/irs_table.s" +.include "./source/kernel/irq_table.s" +.include "./source/kernel/Interrupts/idt/idt.s" +.include "./source/kernel/Memory/paging.s" +.include "./source/kernel/cpu.s" diff --git a/source/kernel/KernelLauncher/bootcheck.h b/source/kernel/KernelLauncher/bootcheck.h deleted file mode 100644 index cb7e30c..0000000 --- a/source/kernel/KernelLauncher/bootcheck.h +++ /dev/null @@ -1,91 +0,0 @@ -#pragma once -#include "../multiboot.h" -#define CHECK_FLAG(flags, bit) ((flags) & (1 <<(bit))) -#define __VERBOSE__ -#include "../Terminal/kterm.h" - - - -void CheckMBT ( multiboot_info_t* mbt ){ - /* Set MBI to the addresss of the multiboot information structure*/ - multiboot_info_t * mbi = (multiboot_info_t *) mbt; - -#ifdef __VERBOSE__ - /* Print out the flags */ - printf("flags = 0x%x\n", (unsigned) mbi->flags); -#endif - /* Are mem_* valid? */ - if ( CHECK_FLAG(mbi->flags,0)){ - // Do nothing - } - - /* is boot device valid ? */ - if (CHECK_FLAG (mbi->flags, 1)) - { -#ifdef __VERBOSE__ - printf("boot_device = 0x0%x\n", (unsigned) mbi->boot_device); -#endif - } - - /* is the command line passed? */ - if (CHECK_FLAG ( mbi->flags,2)) - { -#ifdef __VERBOSE__ - printf("cmdline = %s\n", (char *) (mbi->cmdline + 0xC0000000)); -#endif - } - - /* Are mods_* valid? */ - if(CHECK_FLAG ( mbi->flags, 3)){ - multiboot_module_t *mod; - uint32_t i; -#ifdef __VERBOSE__ - printf("mods count = %d, mods_addr = 0x%x\n", (int) mbi->mods_count, (int) mbi->mods_addr); - - for(i = 0, mod = (multiboot_module_t *) mbi->mods_addr; i < mbi->mods_count; i++ , mod++){ - printf(" mod start = 0x%x, mod_end = 0x%x, cmdline = %s\n", (unsigned) mod->mod_start, (unsigned) mod->mod_end, (char*) mod->cmdline); - } -#endif - } - - /* Bits 4 and 5 are mutually exclusive! */ - if (CHECK_FLAG (mbi->flags, 4) && CHECK_FLAG(mbi->flags, 5)) - { -#ifdef __VERBOSE__ - printf("Both bits 4 and 5 are set.\n"); -#endif - return; - } - - /* Is the symbol table of a.out valid? */ - if (CHECK_FLAG(mbi->flags, 4)){ - multiboot_aout_symbol_table_t *multiboot_aout_sym = &(mbi->u.aout_sym); -#ifdef __VERBOSE__ - printf( "multiboot_aout_symbol_table: tabsize = 0x%0x, strsize = 0x%x, addr = 0x%x\n", - (unsigned) multiboot_aout_sym->tabsize, - (unsigned) multiboot_aout_sym->strsize, - (unsigned) multiboot_aout_sym->addr); -#endif - } - - /* Is the section header table of ELF valid? */ - if (CHECK_FLAG(mbi->flags, 5)){ - multiboot_elf_section_header_table_t *multiboot_elf_sec = &(mbi->u.elf_sec); -#ifdef __VERBOSE__ - printf("multiboot_elf_sec: num = %u, size = 0x%x, addr = 0x%x, shnd = 0x%x\n", - - (unsigned) multiboot_elf_sec->num, (unsigned) multiboot_elf_sec->size, - (unsigned) multiboot_elf_sec->addr, (unsigned) multiboot_elf_sec->shndx); -#endif - - } - - /* Draw diagonal blue line */ - if (CHECK_FLAG (mbt->flags, 12)){ -#ifdef __VERBOSE__ - printf("Can draw!\n"); -#endif - } - - -} \ No newline at end of file diff --git a/source/kernel/KernelLauncher/launcher.cpp b/source/kernel/KernelLauncher/launcher.cpp deleted file mode 100644 index 471053c..0000000 --- a/source/kernel/KernelLauncher/launcher.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -void put_char(char ch, size_t x, size_t y ){ - *((uint16_t*)0xb8000+(y * 80 + x)) = ch | ((7 | 0 << 4) << 8); -} - -void write_ln(char* s, size_t length, size_t x , size_t y) -{ - // Because read only data is linked at a virtual address we'll need to convert - // the string adddres from virtual to phys. - s = s - 0xC0000000; - size_t column , row; - column = x; - row = y; - for(int i = 0; i < length ; i ++) - { - - put_char(s[i] , column,row ); - column ++; - - } - -} - -extern "C" void testLauncher () { - write_ln("hello", 5 ,0,0); -} \ No newline at end of file diff --git a/source/kernel/Memory/MBIMMap/MBI_MMap.cpp b/source/kernel/Memory/MBIMMap/MBI_MMap.cpp index dc5da2f..4dffba6 100644 --- a/source/kernel/Memory/MBIMMap/MBI_MMap.cpp +++ b/source/kernel/Memory/MBIMMap/MBI_MMap.cpp @@ -1,6 +1,6 @@ #include "MBI_MMap.h" - +/* void mapMultibootMemoryMap( MemoryInfo* memInfo , multiboot_info_t *mbt) { printf("mmap_addr = 0x%x, mmap_length = 0x%x\n", (unsigned) mbt->mmap_addr , (unsigned) mbt->mmap_length ); @@ -23,13 +23,13 @@ void mapMultibootMemoryMap( MemoryInfo* memInfo , multiboot_info_t *mbt) { } - +*/ /** * @brief Debug Verbose functions * * @param mmap */ - +/* void print_Multiboot_memory_Map(multiboot_memory_map_t* mmap) { printf( "size = 0x%x, base_addr = 0x%x%08x, length = 0x%x%08x, type = 0x%x\n", @@ -41,3 +41,4 @@ void print_Multiboot_memory_Map(multiboot_memory_map_t* mmap) { (unsigned) mmap->type ); } +*/ \ No newline at end of file diff --git a/source/kernel/Memory/MBIMMap/MBI_MMap.h b/source/kernel/Memory/MBIMMap/MBI_MMap.h index bd24198..1bd1ad3 100644 --- a/source/kernel/Memory/MBIMMap/MBI_MMap.h +++ b/source/kernel/Memory/MBIMMap/MBI_MMap.h @@ -1,16 +1,18 @@ #pragma once #include -#include "../../multiboot.h" +//#include "../../multiboot.h" #include "../memoryinfo.h" void initialise_available_regions(uint32_t memoryMapAddr, uint32_t memoryMapLastAddr, uint32_t* memoryBitMap, int* used_blocks); - +/* void mapMultibootMemoryMap( MemoryInfo* memInfo , multiboot_info_t *mbt); - +*/ /** * @brief Debug Verbose Functions * * @param mmap */ +/* void print_Multiboot_memory_Map(multiboot_memory_map_t* mmap); +*/ diff --git a/source/kernel/PreKernel/bootstructure.h b/source/kernel/PreKernel/bootstructure.h new file mode 100644 index 0000000..6d87ab1 --- /dev/null +++ b/source/kernel/PreKernel/bootstructure.h @@ -0,0 +1,28 @@ +#pragma once +#include +#include + + +extern "C" const uint32_t kernel_begin; +extern "C" const uint32_t kernel_end; +struct BootInfoBlock { + bool MapIsInvalid; + uint32_t bootDeviceID ; + + uint32_t GrubModuleCount; + + bool ValidSymbolTable; + uint32_t SymbolTableAddr; + uint32_t SymbolTabSize; + uint32_t SymbolStrSize; + + bool ValidELFHeader; + + bool EnabledVBE; + + bool PhysicalMemoryMapAvailable; + +}; + +// Put the BootInfoBlock 1MB above the kernel. +const uint32_t BootInfoBlock_pptr = kernel_end - 0xC0000000 + 0x1000; diff --git a/source/kernel/multiboot.h b/source/kernel/PreKernel/multiboot.h similarity index 100% rename from source/kernel/multiboot.h rename to source/kernel/PreKernel/multiboot.h diff --git a/source/kernel/PreKernel/prekernel.cpp b/source/kernel/PreKernel/prekernel.cpp new file mode 100644 index 0000000..6b910a2 --- /dev/null +++ b/source/kernel/PreKernel/prekernel.cpp @@ -0,0 +1,93 @@ +#include +#include +#include "multiboot.h" +#include "bootstructure.h" +#define CHECK_FLAG(flags, bit) ((flags) & (1 <<(bit))) + + +extern "C" void testLauncher ( unsigned long magic, multiboot_info_t* mbi) { + + // Create the bootInfoBlock at its location + BootInfoBlock* BIB = (BootInfoBlock*) BootInfoBlock_pptr; + + /* + * Check Multiboot magic number + */ + if (magic != MULTIBOOT_BOOTLOADER_MAGIC) + { + BIB->MapIsInvalid = true; + return; + } else{ + BIB->MapIsInvalid = false; + } + + /* is boot device valid ? */ + if (CHECK_FLAG (mbi->flags, 1)) + { + BIB->bootDeviceID = mbi->boot_device; + } + + /* Are mods_* valid? */ + if(CHECK_FLAG ( mbi->flags, 3)){ + multiboot_module_t *mod; + uint32_t i; + + BIB->GrubModuleCount = mbi->mods_count; + + + for(i = 0, mod = (multiboot_module_t *) mbi->mods_addr; i < mbi->mods_count; i++ , mod++){ + + } + } + + /* Is the symbol table of a.out valid? */ + if (CHECK_FLAG(mbi->flags, 4)) + { + BIB->ValidSymbolTable = true; + multiboot_aout_symbol_table_t *multiboot_aout_sym = &(mbi->u.aout_sym); + + } else{ + BIB->ValidSymbolTable = false; + } + + /* Is the section header table of ELF valid? */ + if (CHECK_FLAG(mbi->flags, 5)) + { + BIB->ValidELFHeader = true; + multiboot_elf_section_header_table_t *multiboot_elf_sec = &(mbi->u.elf_sec); + + }else{ + BIB->ValidELFHeader = false; + } +/* + If we got a memory map from our bootloader we + should be parsing it to find out the memory regions available. + */ + if (CHECK_FLAG(mbi->flags, 6)) + { + BIB->PhysicalMemoryMapAvailable = true; + multiboot_memory_map_t *mmap = (multiboot_memory_map_t*) (mbi->mmap_addr) ; + + for (; (unsigned long) mmap < mbi->mmap_addr + mbi->mmap_length; mmap = (multiboot_memory_map_t *) ((unsigned long) mmap + mmap->size + sizeof(mmap->size))){ + + if ( mmap->type == MULTIBOOT_MEMORY_AVAILABLE){ + + } else{ + + + } + + + } + + } else{ + BIB->PhysicalMemoryMapAvailable = false; + } + + /* Draw diagonal blue line */ + if (CHECK_FLAG (mbi->flags, 12)){ + BIB->EnabledVBE = true; + } else{ + BIB->EnabledVBE; + } +} diff --git a/source/kernel/Terminal/kterm.cpp b/source/kernel/Terminal/kterm.cpp index 95573c6..ede8bbd 100644 --- a/source/kernel/Terminal/kterm.cpp +++ b/source/kernel/Terminal/kterm.cpp @@ -22,6 +22,7 @@ void kterm_init () { kterm_column = 0; kterm_color = vga_entry_color ( VGA_COLOR_LIGHT_GREY , VGA_COLOR_BLACK); kterm_buffer = (uint16_t*) 0xC03FF000; + for (size_t y = 0; y < VGA_HEIGHT; y++ ){ for( size_t x = 0; x < VGA_WIDTH; x++){ const size_t index = y * VGA_WIDTH + x; @@ -31,7 +32,6 @@ void kterm_init () { } } - void kterm_resetcolor(){ kterm_color = vga_entry_color ( VGA_COLOR_LIGHT_GREY , VGA_COLOR_BLACK); } @@ -42,9 +42,7 @@ void kterm_setcolor(uint8_t color){ void kterm_putat (char c, uint8_t color, size_t x, size_t y ) { const size_t index = y * VGA_WIDTH + x; - kterm_buffer[index] = vga_entry(c, color); - } void enable_cursor (uint8_t start_cursor , uint8_t end_cursor ){ diff --git a/source/kernel/KernelLauncher/crti.s b/source/kernel/crti.s similarity index 100% rename from source/kernel/KernelLauncher/crti.s rename to source/kernel/crti.s diff --git a/source/kernel/KernelLauncher/crtn.s b/source/kernel/crtn.s similarity index 100% rename from source/kernel/KernelLauncher/crtn.s rename to source/kernel/crtn.s diff --git a/source/kernel/kernel.cpp b/source/kernel/kernel.cpp index 0387146..0b232a9 100644 --- a/source/kernel/kernel.cpp +++ b/source/kernel/kernel.cpp @@ -1,15 +1,13 @@ #include "kernel.h" - -extern "C" void early_main(unsigned long magic, unsigned long addr){ - - // Convert MBI address to higher quarter kernel space - addr += KERNEL_BASE_ADDR; - /** +extern "C" void early_main() +{ + /* * Initialize terminal interface - * NOTE: This should be done later on , the magic value should be checked first. */ initGDT(); + kterm_init(); + init_serial(); print_serial("Hello Higher half kernel!\n"); @@ -17,110 +15,38 @@ extern "C" void early_main(unsigned long magic, unsigned long addr){ // Enable interrupts asm volatile("STI"); - - printf("DEBUG:\n Magic: 0x%x\n MBT_addr: 0x%x\n", magic, addr); - /** - * Check Multiboot magic number - * NOTE: Printf call should not be a thing this early on ... - */ - if (magic != MULTIBOOT_BOOTLOADER_MAGIC){ - printf("Invalid magic number: 0x%x\n", magic); - return; - } - - /** + /* * Show a little banner for cuteness */ printf("|=== BarinkOS ===|\n"); - /** - * Use the address given as an argument as the pointer - * to a Multiboot information structure. - */ - multiboot_info_t* mbt = (multiboot_info_t*) (addr ); - /** - * Construct our own bootInfo structure - */ - BootInfo bootinfo = {}; - - - /* - If we got a memory map from our bootloader we - should be parsing it to find out the memory regions available. - */ - if (CHECK_FLAG(mbt->flags, 6)) - { - - /* - Setup Physical memory managment - */ - MemoryInfo meminfo = {}; - bootinfo.memory = &meminfo; - - ///mapMultibootMemoryMap(bootinfo.memory , mbt); - printf("Memory size: 0x%x bytes\n", bootinfo.memory->TotalMemory ); + BootInfoBlock* BootInfo = (BootInfoBlock*) ( BootInfoBlock_pptr + 0xC0000000 ); - /* - PhysicalMemory memAlloc = PhysicalMemory{}; - memAlloc.setup(bootinfo.memory ); - */ + printf("Bootloader information:\n"); + if( BootInfo->ValidELFHeader ) + { + printf("- Valid ELF Header is available!\n"); + } - // TODO: FIX physical allocator - /* - Mark already in use sections - */ - - // Mark kernel memory as used - printf("Kernel Begin Pointer: 0x%x, Kernel end pointer: 0x%x\n", &kernel_begin , &kernel_end ); - - - multiboot_memory_map_t *mmap = (multiboot_memory_map_t*) (mbt->mmap_addr + KERNEL_BASE_ADDR) ; + if(BootInfo->EnabledVBE) + { + printf("- VBE graphics mode is available!\n"); + } - for (; (unsigned long) mmap < mbt->mmap_addr + mbt->mmap_length; mmap = (multiboot_memory_map_t *) ((unsigned long) mmap + mmap->size + sizeof(mmap->size))){ + if(BootInfo->ValidSymbolTable) + { + printf("- Valid Symbol Table available at 0x%x.\n Tab Size: %d, str Size: %d\n", BootInfo->SymbolTableAddr, BootInfo->SymbolTabSize, BootInfo->SymbolStrSize); + } - if ( mmap->type == MULTIBOOT_MEMORY_AVAILABLE){ - - } else{ - printf("allocate region: 0x%x, size : 0x%x bytes\n", (unsigned) mmap->addr,(unsigned) mmap->len ); - // memAlloc.allocate_region((unsigned)mmap->addr , (unsigned)mmap->len); - } - - - } - - - printf("allocate region: 0x%x, size : 0x%x bytes\n", &kernel_begin, &kernel_end - &kernel_begin ); - //memAlloc.allocate_region(kernel_end, kernel_end - kernel_begin); - - // test alloc_block - /* - uint8_t* memory = (uint8_t*) memAlloc.allocate_block(); - printf("Got a new pointer: 0x%x\n", memory); - - uint8_t* memory2 = (uint8_t*) memAlloc.allocate_block(); - printf("Got a new pointer: 0x%x\n", memory2); - - - memAlloc.free_block((void*) memory); - - uint8_t* newBlockPlse = (uint8_t*) memAlloc.allocate_block(); - */ - - - - //memAlloc.free_block((void*) memory); - //InitializePaging(); - //IdentityMap(); - //Enable(); - } else{ - printf("memory flag not set!"); + if(BootInfo->PhysicalMemoryMapAvailable) + { + printf("- Physical Memory Map available!\n"); } - CheckMBT( (multiboot_info_t *) addr); asm volatile("mov %cr0, %eax "); asm volatile("or $1, %eax"); asm volatile("mov %eax, %cr0"); - kernel_main(&bootinfo); + kernel_main(); } @@ -151,9 +77,28 @@ void map_multiboot_info_structure(unsigned long addr){ asm("movl %cr3, %ecx;" "movl %ecx, %cr3" ); } - -extern "C" void kernel_main (BootInfo* bootinfo) { +void PhysicalMemoryAllocatorTest(){ +#ifdef UNIT_TESTS + // test alloc_block + uint8_t* memory = (uint8_t*) memAlloc.allocate_block(); + printf("Got a new pointer: 0x%x\n", memory); + + uint8_t* memory2 = (uint8_t*) memAlloc.allocate_block(); + printf("Got a new pointer: 0x%x\n", memory2); + + memAlloc.free_block((void*) memory); + uint8_t* newBlockPlse = (uint8_t*) memAlloc.allocate_block(); +#endif +} + + +extern "C" void kernel_main () { pit_initialise(); + // Create a dummy BootInfo object + // TODO: This should be done properly or the dependency should + // be removed from the SuperVisorTerminal. + BootInfo* bootinfo = {}; + startSuperVisorTerminal(bootinfo); } \ No newline at end of file diff --git a/source/kernel/kernel.h b/source/kernel/kernel.h index 529fb5e..86bf667 100644 --- a/source/kernel/kernel.h +++ b/source/kernel/kernel.h @@ -3,19 +3,16 @@ extern "C" { #include "Lib/string.h" } - #include "definitions.h" #include "Drivers/VGA/VBE.h" #include "Terminal/kterm.h" -#include "multiboot.h" #include "bootinfo.h" #include "Memory/PhysicalMemoryManager.h" #include "Memory/memoryinfo.h" #include "Memory/VirtualMemoryManager.h" -#include "KernelLauncher/bootcheck.h" #include "Memory/GDT/gdtc.h" #include "Interrupts/idt/idt.h" @@ -27,17 +24,15 @@ extern "C" #include "time.h" #include "SuperVisorTerminal/superVisorTerminal.h" +#include "PreKernel/bootstructure.h" #define CHECK_FLAG(flag, bit) ( flag & (1 << bit )) #define PANIC(message) {return;} - void map_multiboot_info_structure(unsigned long addr); -extern "C" void kernel_main (BootInfo* bootinfo); +extern "C" void kernel_main (); -extern "C" const void* kernel_begin; -extern "C" const void* kernel_end; extern "C" uint32_t boot_page_directory; extern "C" uint32_t multiboot_page_table; diff --git a/source/kernel/linker.ld b/source/kernel/linker.ld index b564172..ef2b6a1 100644 --- a/source/kernel/linker.ld +++ b/source/kernel/linker.ld @@ -16,7 +16,7 @@ SECTIONS .multiboot.text : { *(multiboot.text) - *launcher.o(.text) + *prekernel.o(.text) } . += 0xC0000000; /* Addresses in the following code need to be above the 3Gb mark */