summaryrefslogtreecommitdiff
path: root/src/sys/os/os_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/os/os_init.c')
-rw-r--r--src/sys/os/os_init.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/sys/os/os_init.c b/src/sys/os/os_init.c
index 3772229..f244a75 100644
--- a/src/sys/os/os_init.c
+++ b/src/sys/os/os_init.c
@@ -1,14 +1,17 @@
#include <sys/cdefs.h>
#include <sys/panic.h>
#include <sys/syslog.h>
+#include <sys/proc.h>
#include <sys/cpuvar.h>
#include <os/sched.h>
+#include <os/elfload.h>
#include <acpi/acpi.h>
#include <io/cons/cons.h>
#include <vm/vm.h>
#include <logo.h>
struct pcore g_bsp;
+struct proc g_rootproc;
static void
boot_print(void)
@@ -23,6 +26,9 @@ boot_print(void)
__dead void
main(void)
{
+ struct loaded_elf elf;
+ struct pcore *core;
+ int error;
acpi_early_init();
@@ -37,6 +43,17 @@ main(void)
bsp_ap_startup();
sched_init();
+ core = this_core();
+ proc_init(&g_rootproc, 0);
+ core->curproc = &g_rootproc;
+
+ error = elf_load("/usr/bin/init", &g_rootproc, &elf);
+ if (error < 0) {
+ panic("could not load init\n");
+ }
+
+ md_set_ip(&g_rootproc, elf.entrypoint);
+ md_proc_kick(&g_rootproc);
panic("end of kernel reached\n");
for (;;);
}