From: Matthias Kruk Date: Tue, 5 May 2020 17:24:55 +0000 (+0900) Subject: kernel/core: Execute system processes from initfs once the kernel has been initialized X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=e83ca074a8df564ab1e05186353b17d83f7c7d73;p=corax kernel/core: Execute system processes from initfs once the kernel has been initialized --- diff --git a/kernel/core/main.c b/kernel/core/main.c index dbadad8..4f94974 100644 --- a/kernel/core/main.c +++ b/kernel/core/main.c @@ -29,6 +29,7 @@ #include #include #include +#include void cpu_debug(void); int arch_init(void*); @@ -116,6 +117,7 @@ static void _init(void) { pid_t pid; int err; + int i; /* * Instead of something like /sbin/init, this process will behave more @@ -123,35 +125,54 @@ static void _init(void) * spawn the daemons necessary for basic system operation, and restart * them in case they should die. */ -#if 0 - pid = fork(); - if(!pid) { - /* this is the child */ - err = execfve(vga_main, NULL, NULL); + for(i = 0; i < initfs.ifs_num_entries; i++) { + char buffer[128]; + int len; - if(err < 0) { - for(;;); - } - } else if(pid < 0) { - /* FIXME: Handle error */ - } -#endif - pid = fork(); + len = snprintf(buffer, sizeof(buffer), "Executing %s\n", + initfs.ifs_entries[i].ife_name); + + debug(buffer, len); + + pid = fork(); + + len = snprintf(buffer, sizeof(buffer), "pid = %08u\n", pid); + debug(buffer, len); + + if(!pid) { + char argv1[16]; + char argv0[16]; + char *argv[3]; + char env1[16]; + char env0[16]; + char *envp[3]; - if(!pid) { - err = execfve(kbd_main, NULL, NULL); + snprintf(argv0, sizeof(argv0), "%s", initfs.ifs_entries[i].ife_name); + snprintf(argv1, sizeof(argv1), "--verbose"); - if(err < 0) { - for(;;); + argv[0] = argv0; + argv[1] = argv1; + argv[2] = NULL; + + snprintf(env0, sizeof(env0), "PWD=/"); + snprintf(env1, sizeof(env1), "USER=root"); + + envp[0] = env0; + envp[1] = env1; + envp[2] = NULL; + + err = execeve(initfs.ifs_entries[i].ife_base, + initfs.ifs_entries[i].ife_limit, + argv, envp); + + if(err < 0) { + debug("execeve failed\n", 15); + } } - } else if(pid < 0) { - /* FIXME: Handle error */ } - while(1) { - wait(NULL); - } + while(1); return; }