#define MODULE "init" #include "init/Init.h" #include "bootboot.h" #include "cpu/CPU.h" #include "init/InitRD.h" #include "interrupts/Interrupts.h" #include "io/Serial.h" #include "log/Log.h" #include "memory/MemoryManager.h" #include "memory/PMM.h" #include "memory/VMM.h" #include "misc/hang.h" #include "rand/Init.h" #include "rand/Mersenne.h" #include "render/Framebuffer.h" #include "render/TextRenderer.h" #include "std/assert.h" #include "std/string.h" extern BOOTBOOT bootboot; extern "C" char environment[4096]; uintptr_t __stack_chk_guard = 0xfeff34; void Init::check_magic() { ASSERT(strncmp((char*)bootboot.magic, BOOTBOOT_MAGIC, 4) == 0); } void Init::disable_smp() { if (CPU::get_initial_apic_id() != bootboot.bspid) { hang(); } return; } extern "C" void asm_enable_sse(); void Init::early_init() { Interrupts::disable(); asm volatile("cld"); asm_enable_sse(); framebuffer0.init((void*)bootboot.fb_ptr, bootboot.fb_type, bootboot.fb_scanline, bootboot.fb_width, bootboot.fb_height); MemoryManager::init(); if (strstr(environment, "quiet=1")) { KernelLog::toggle_log_level(LogLevel::DEBUG); KernelLog::toggle_log_level(LogLevel::INFO); } else if (!strstr(environment, "verbose=1")) { KernelLog::toggle_log_level(LogLevel::DEBUG); } InitRD::init(); Mersenne::init(); kdbgln("Page bitmap uses %ld bytes of memory", PMM::get_bitmap_size()); __stack_chk_guard = Mersenne::get(); } void Init::finish_kernel_boot() { KernelLog::toggle_log_backend(Backend::Console); framebuffer0.clear(Color::Black); TextRenderer::reset(); }