aboutsummaryrefslogtreecommitdiff
path: root/kernel/main
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/main')
-rw-r--r--kernel/main/kmain.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/kernel/main/kmain.c b/kernel/main/kmain.c
index 8dcb7e5..4c49b9a 100644
--- a/kernel/main/kmain.c
+++ b/kernel/main/kmain.c
@@ -86,6 +86,8 @@ void kmain()
for (size_t i = 0; i < sizeof(init_funcs) / sizeof(init_funcs[0]); i++)
init_funcs[i]();
+ dbg(DBG_PROC, "Starting init process\n");
+
initproc_start();
panic("\nReturned to kmain()\n");
}
@@ -156,7 +158,35 @@ static void *initproc_run(long arg1, void *arg2)
make_devices();
#endif
- NOT_YET_IMPLEMENTED("PROCS: initproc_run");
+ // NOT_YET_IMPLEMENTED("PROCS: initproc_run");
+
+ // print all the threads in the system
+ // list_iterate(&curproc->p_threads, thread, kthread_t, kt_plink)
+ // {
+ // dbg(DBG_THR, "Thread: %s\n", thread->kt_proc->p_name);
+ // }
+
+ // proctest_main(0, NULL);
+
+ // dbg(DBG_PROC, "%s", "In main thread!\n");
+
+#ifdef __DRIVERS__
+ // driverstest_main(0, NULL);
+ char name[32] = {0};
+ for (long i = 0; i < __NTERMS__; i++)
+ {
+ snprintf(name, sizeof(name), "kshell%ld", i);
+ proc_t *proc = proc_create("ksh");
+ kthread_t *thread = kthread_create(proc, kshell_proc_run, i, NULL);
+ sched_make_runnable(thread);
+ }
+#endif
+
+ // see if there are any children to wait for
+ while (do_waitpid(-1, 0, 0) != -ECHILD)
+ {
+ // do nothing
+ }
return NULL;
}
@@ -175,7 +205,21 @@ static void *initproc_run(long arg1, void *arg2)
*/
void initproc_start()
{
- NOT_YET_IMPLEMENTED("PROCS: initproc_start");
+ // NOT_YET_IMPLEMENTED("PROCS: initproc_start");
+
+ dbg(DBG_PROC, "Setting up the initial process and preparing it to run\n");
+
+ proc_t *init_proc = proc_create("init");
+ KASSERT(init_proc != NULL);
+
+ kthread_t *init_thread = kthread_create(init_proc, initproc_run, 0, NULL);
+ KASSERT(init_thread != NULL);
+
+ sched_make_runnable(init_thread);
+
+ context_make_active(&curcore.kc_ctx); // start the scheduler
+ // context_make_active(&init_thread->kt_ctx);
+ // TODO: ask about how the core is linked to scheduler
}
void initproc_finish()