exec_initd()
{
int errno = 0;
+ const char* argv[] = { "/mnt/lunaix-os/usr/bin/init", 0 };
+ const char* envp[] = { 0 };
- if ((errno = exec_kexecve("/mnt/lunaix-os/usr/bin/init", NULL, NULL))) {
+ if ((errno = exec_kexecve(argv[0], argv, envp))) {
goto fail;
}
static void
lunad_do_usr() {
// No, these are not preemptive
- cpu_disable_interrupt();
-
+ no_preemption();
+
if (!mount_bootmedium() || !exec_initd()) {
fail("failed to initd");
}
void _preemptible
lunad_main()
{
- /*
- * We must defer boot code/data cleaning to here, after we successfully
- * escape that area
- */
- boot_cleanup();
-
spawn_kthread((ptr_t)init_platform);
/*
thread (which is preemptive!)
*/
- cpu_enable_interrupt();
+ set_preemption();
while (1)
{
cleanup_detached_threads();
- sched_pass();
+ yield_current();
}
}