/* * in freestanding mode we can just use this c lib headers * stdbool,sddef,stdint, * float,iso646,limits,stdarg */ #ifdef __linux__ #error "Watchout! this is not Linux but FoolOS. Use a cross-compiler" #endif #define FOOLOS_MODULE_NAME "kernel" #include #include "config.h" #include "asm/asm.h" #include "lib/logger/log.h" #include "lib/bool/bool.h" #include "lib/buffer/ringbuffer.h" #include "smp.h" #include "timer.h" #include "spinlock.h" #include "syscalls.h" #include "mem.h" #include "vmem.h" #include "interrupts.h" #include "acpi.h" #include "mp.h" #include "keyboard.h" #include "console.h" #include "fs/fs.h" #include "fs/ext2.h" #include "task.h" // // KERNEL MAIN // void kernel_main(uint32_t initial_stack, int mp) { // // Configuring the PIT timer. // timer_init(); // // Memory Init // // after this is set up we will be able to allocate and deallocate // blocks of physical memory :) // // we know that here, the bootloader placed the memory map and // the number of entries. // mem_init(0x7c00+1,*((uint16_t *)(0x7c00))); // // Activate Virtual Memory (paging) // //vmem_init(); // // init output to screen // console_init(); // log buffered messages to console log_log(); // // Setup PIC // pic_setup(); // mouse and kb driver init (before interrupts) // mouse_init(); keyboard_init(); // // Setup Interrupts (code segment: 0x08) // int_init(0x08); // // Gather Info about other processors. (APs) // ACPI or MP // // /* smp_processors procdata; if(!acpi_find(&procdata)) if(!mp_find(&procdata)) panic(FOOLOS_MODULE_NAME,"ACPI and MP search failed! I do not want to continue!"); */ // init spinlocks init_spinlocks(); // ringbuffer for stdin! ringbuffer_init(); // // Start the other Processors (also before paging for some reason!) // //smp_log_procdata(&procdata); //smp_start_aps(&procdata,0x80000); // starts at 0x80000 // but it will be copied over mbr // // Scan the PCI Bus // // We are interested in the E1000 Network Adapter in particular // Its driver will be hopefully implemented one day ;) TODO // //pci_init(); // // Initialize Floppy Disk if activated in config.h // Sadly we won't use it anyway so its uncommented anyway. // //#ifdef FOOLOS_COMPILE_FLOPPY //floppy_init(); //#endif // // Initialize Multitasking // // For now this starts three "tasks" which are scheduled // round robin style. // syscall_execve(15,0,0); // run fool-shell! (execve needs inode id) //task_init(); // //vesa_init_doublebuff(); // Just hang around here, if its reached. // we do our tasks anyway. on the next clock tick. while(1); }