From 642b5fb0007b64c77d186fcb018d571152ee1d47 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 14 Aug 2023 18:51:07 +0200 Subject: reorganization: first steps --- src/bootstrap/main.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/bootstrap/main.c (limited to 'src/bootstrap/main.c') diff --git a/src/bootstrap/main.c b/src/bootstrap/main.c new file mode 100644 index 0000000..d27da39 --- /dev/null +++ b/src/bootstrap/main.c @@ -0,0 +1,43 @@ +#include <_proc.h> +#include +#include +#include +#include +#include +#include + +#include "tar.h" + +extern char _bss_start; +extern char _bss_end; +extern char _initrd; + +__attribute__((section(".text"))) +int main(void) { + _sys_memflag(_psdata_loc, 1, MEMFLAG_PRESENT); + setprogname("bootstrap"); + + _sys_mount(HANDLE_PROCFS, "/proc/", strlen("/proc/")); + MOUNT_AT("/") { + fs_dirinject2((const char*[]) { + "/proc/", + "/init/", + NULL + }); + } + MOUNT_AT("/init/") { + tar_driver(&_initrd); + } + + const char *initpath = "bin/amd64/init"; + char *initargv[] = {"init", NULL}; + void *init = tar_find(initpath, strlen(initpath), &_initrd, ~0) + 512; + if (init) { + _klogf("execing init"); + elf_exec(init, initargv, NULL); + _klogf("elf_exec failed"); + } else { + _klogf("couldn't find init.elf"); + } + _sys_exit(1); +} -- cgit v1.2.3