tools: basic init

This commit is contained in:
Matheus
2023-06-26 23:36:38 -03:00
parent 0bb9ed191a
commit facd03f2e8
3 changed files with 38 additions and 4 deletions
+2
View File
@@ -14,3 +14,5 @@ kernel-src/io/printf.c
kernel-src/flanterm kernel-src/flanterm
sysroot sysroot
minimalsysroot minimalsysroot
tools/init/init
tools/init/main.o
+2 -2
View File
@@ -369,7 +369,7 @@ void sched_runinit() {
sched_initproc = proc; sched_initproc = proc;
vnode_t *initnode; vnode_t *initnode;
__assert(vfs_open(vfsroot, "/usr/bin/bash", 0, &initnode) == 0); __assert(vfs_open(vfsroot, "/init", 0, &initnode) == 0);
auxv64list_t auxv64; auxv64list_t auxv64;
char *interp = NULL; char *interp = NULL;
@@ -417,7 +417,7 @@ void sched_runinit() {
proc->root = vfsroot; proc->root = vfsroot;
VOP_HOLD(vfsroot); VOP_HOLD(vfsroot);
char *argv[] = {"/usr/bin/bash", "-l", NULL}; char *argv[] = {"/init", "-l", NULL};
char *envp[] = {NULL}; char *envp[] = {NULL};
void *stack = elf_preparestack(STACK_TOP, &auxv64, argv, envp); void *stack = elf_preparestack(STACK_TOP, &auxv64, argv, envp);
+34 -2
View File
@@ -1,6 +1,38 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pwd.h>
int main() { int main() {
printf("Hello, world!\n"); printf("init: Welcome to Astral!\n");
return 0;
struct passwd* pw = getpwuid(getuid());
//setenv("PWD", pw->pw_dir, 1);
setenv("HOME", pw->pw_dir, 1);
//chdir(pw->pw_dir);
setenv("PATH", "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin", 1);
setenv("TERM", "linux", 1);
printf("init: running /usr/bin/bash\n");
pid_t pid = fork();
if (pid == -1) {
perror("init: fork failed:");
return EXIT_FAILURE;
}
if (pid == 0) {
execl("/usr/bin/bash", "/usr/bin/bash", "-l", NULL);
perror("init: execl /usr/bin/bash failed:");
return EXIT_FAILURE;
}
for (;;) {
int status;
if (waitpid(-1, &status, 0) == -1) {
perror("init: waitpid failed:");
return EXIT_FAILURE;
}
}
} }