/* Check if the compiler thinks you are targeting the wrong operating system. */ #if defined(__linux__) #error "You are not using a cross-compiler, you will most certainly run into trouble" #endif /* This tutorial will only work for the 32-bit ix86 targets. */ #if !defined(__i386__) #error "This kernel needs to be compiled with a ix86-elf compiler" #endif #include #include #include #include #include #include #include #include #include #include #include #include //#include #include #include #include #include #include #include #include #define DEBUG /*extern HBA_MEM *abar; extern HBA_PORT *ahci_port;*/ extern void _hang_asm(void); void kernel_main(multiboot_info_t* mbd, unsigned int magic) { /* --- BEGIN INITIALIZATION SECTION --- */ /* We need to initialize the terminal so that any error/debuging messages show. */ terminal_initialize(); terminal_setcolor(VGA_COLOR_RED); /* Make sure the magic number matches for memory mapping*/ if(magic != MULTIBOOT_BOOTLOADER_MAGIC) { printf("[ ERROR ] invalid magic number!\n"); _hang_asm(); } /* Check bit 6 to see if we have a valid memory map */ if(!(mbd->flags >> 6 & 0x1)) { printf("[ ERROR ] invalid memory map given by GRUB bootloader\n"); _hang_asm(); } gdt_install(); pic_remap(); idt_install_isrs(); idt_install(); terminal_setcolor(VGA_COLOR_GREEN); printd("Initializing physical memory manager...\n"); pmm_init(mbd); printd("Physical memory manager initialized\n"); printd("Initializing paging...\n"); paging_init(); printd("Paging initialized\n"); printd("Initializing heap allocator...\n"); heap_init(); printd("Heap allocator initialized\n"); printd("Testing SSE...\n"); int32_t sse_test_result = test_sse(); if (sse_test_result != 0) { printf("[ DEBUG ] SSE test failed with RV %d\n", sse_test_result); } else { printd("SSE test succeeded\n"); } /* printd("Initalizing AHCI...\n"); ahci_init(); printd("AHCI initialized\n"); */ /*printd("Initializing RAMFS...\n"); ramfs_init(); printd("RAMFS initialized.\n");*/ printd("Initializing IDE system...\n"); ide_initialize(); printd("IDE initialized\n"); printd("Initializing DuckFS...\n"); int32_t duckfs_init_rv = duckfs_init(0); printf("[ DEBUG ] DuckFS initialized with RV %d\n", duckfs_init_rv); /* --- END INITIALIZATION SECTION --- */ terminal_setcolor(VGA_COLOR_LIGHT_GREEN); const char* espresso_kernel_version = "0.0.0b"; printf("Loading Espresso %s...\n", espresso_kernel_version); /*begin_anim(espresso_kernel_version);*/ printf("Hello and welcome to Espresso\n"); _hang_asm(); }