2016-03-19 03:45:23 -04:00
|
|
|
/* Main.cc
|
|
|
|
* vim: set tw=80:
|
|
|
|
* Eryn Wells <eryn@erynwells.me>
|
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* Entry point for the kernel in C/C++.
|
|
|
|
*/
|
|
|
|
|
2016-02-26 22:31:34 -08:00
|
|
|
#include <stddef.h>
|
2016-02-27 13:50:51 -05:00
|
|
|
#include "Console.hh"
|
2016-02-28 23:26:42 -05:00
|
|
|
#include "Descriptors.hh"
|
2016-03-09 01:23:06 -05:00
|
|
|
#include "Interrupts.hh"
|
2016-03-23 00:33:45 -04:00
|
|
|
#include "Kernel.hh"
|
2016-03-19 03:45:23 -04:00
|
|
|
#include "Multiboot.hh"
|
2016-03-20 12:56:43 -04:00
|
|
|
#include "kstd/Types.hh"
|
2016-02-26 22:31:34 -08:00
|
|
|
|
|
|
|
#if defined(__linux__)
|
|
|
|
#error "This file should be compiled with a cross-compiler, not the Linux system compiler!"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if !defined(__i386__)
|
|
|
|
#error "This file should be compiled with an ix86-elf compiler!"
|
|
|
|
#endif
|
|
|
|
|
2016-03-25 01:21:49 -04:00
|
|
|
// Linker script defined symbols. See linker.ld.
|
2016-03-25 00:39:11 -04:00
|
|
|
extern u32 kernelStart;
|
|
|
|
extern u32 kernelEnd;
|
|
|
|
|
2016-02-28 13:33:20 -05:00
|
|
|
|
|
|
|
/** The beginning of the world... */
|
|
|
|
extern "C"
|
|
|
|
void
|
2016-03-23 01:01:16 -04:00
|
|
|
kmain(multiboot::Information *information,
|
|
|
|
u32 magic)
|
2016-03-01 12:01:51 -05:00
|
|
|
{
|
2016-03-23 01:42:52 -04:00
|
|
|
auto& kernel = kernel::Kernel::systemKernel();
|
2016-03-19 03:45:23 -04:00
|
|
|
|
2016-03-25 01:21:49 -04:00
|
|
|
kernel::StartupInformation startupInformation;
|
|
|
|
startupInformation.kernelStart = u32(&kernelStart);
|
|
|
|
startupInformation.kernelEnd = u32(&kernelEnd);
|
2016-04-09 15:22:23 -04:00
|
|
|
// TODO: Define this somewhere else.
|
2016-03-25 01:39:07 -04:00
|
|
|
startupInformation.multibootMagic = magic;
|
2016-03-25 01:21:49 -04:00
|
|
|
startupInformation.multibootInformation = information;
|
2016-03-25 00:39:11 -04:00
|
|
|
|
2016-03-25 01:21:49 -04:00
|
|
|
kernel.initialize(startupInformation);
|
2016-03-20 00:43:26 -04:00
|
|
|
|
2016-03-25 01:21:49 -04:00
|
|
|
auto& console = kernel.console();
|
2016-03-02 02:57:35 -05:00
|
|
|
|
2016-03-12 19:14:36 -05:00
|
|
|
auto& interruptHandler = x86::InterruptHandler::systemInterruptHandler();
|
2016-03-09 01:23:06 -05:00
|
|
|
interruptHandler.initialize();
|
2016-03-13 12:52:47 -04:00
|
|
|
interruptHandler.enableInterrupts();
|
2016-03-13 13:32:52 -04:00
|
|
|
console.printString("Interrupts enabled\n");
|
2016-03-13 12:52:47 -04:00
|
|
|
|
2016-03-23 00:55:42 -04:00
|
|
|
kernel::Kernel::systemKernel().halt();
|
2016-03-01 12:01:51 -05:00
|
|
|
}
|