diff options
Diffstat (limited to 'sys/kern/init_main.c')
-rw-r--r-- | sys/kern/init_main.c | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 667bb97..797319f 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -35,6 +35,8 @@ #include <sys/exec.h> #include <sys/driver.h> #include <sys/panic.h> +#include <sys/systm.h> +#include <dev/acpi/uacpi.h> #include <dev/cons/cons.h> #include <dev/acpi/acpi.h> #include <machine/cpu.h> @@ -42,7 +44,13 @@ #include <vm/vm.h> #include <string.h> -static struct proc proc0; +#if defined(_INSTALL_MEDIA) +#define _START_PATH "/usr/sbin/install" +#else +#define _START_PATH "/usr/sbin/init" +#endif /* _INSTALL_MEDIA */ + +struct proc g_proc0; static void copyright(void) @@ -56,9 +64,10 @@ start_init(void) { struct proc *td = this_td(); struct execve_args execve_args; - char *argv[] = { "/usr/bin/osh", NULL }; + char *argv[] = { _START_PATH, NULL, NULL }; char *envp[] = { NULL }; + kprintf("starting init...\n"); execve_args.pathname = argv[0]; execve_args.argv = argv; execve_args.envp = envp; @@ -95,19 +104,30 @@ main(void) /* Expose the console to devfs */ cons_expose(); + uacpi_init(); + /* Start scheduler and bootstrap APs */ md_intoff(); sched_init(); + memset(&g_proc0, 0, sizeof(g_proc0)); + /* Startup pid 1 */ - memset(&proc0, 0, sizeof(proc0.tf)); - fork1(&proc0, 0, start_init, NULL); + spawn(&g_proc0, start_init, NULL, 0, NULL); + md_inton(); - /* Load all drivers */ + /* Load all early drivers */ DRIVERS_INIT(); - /* Bootstrap APs and here we go! */ + /* Only log to kmsg from here */ + syslog_silence(true); + + /* + * Bootstrap APs, schedule all other drivers + * and here we go! + */ mp_bootstrap_aps(&g_bsp_ci); + DRIVERS_SCHED(); sched_enter(); __builtin_unreachable(); } |