summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordzwdz2022-08-13 16:21:02 +0200
committerdzwdz2022-08-13 16:21:02 +0200
commit57427191e2cf0f08724b74fba3a35aa41ceda40d (patch)
treee78b02cfd05d978772cc8dfff8de1cb4791c8021 /src
parent1528e2153dfbd729916f1211a6f481a2171f855f (diff)
user: plan9-style /bin/ union
Diffstat (limited to 'src')
-rw-r--r--src/user/app/init/init.c8
-rw-r--r--src/user/bootstrap/main.c5
2 files changed, 10 insertions, 3 deletions
diff --git a/src/user/app/init/init.c b/src/user/app/init/init.c
index c788cb6..2ae8048 100644
--- a/src/user/app/init/init.c
+++ b/src/user/app/init/init.c
@@ -30,7 +30,13 @@ int main(void) {
printf("in init (stage 2), main at 0x%x\n", &main);
MOUNT_AT("/keyboard") { ps2_drv(); }
- MOUNT_AT("/bin/") { fs_passthru("/init/bin"); }
+ MOUNT_AT("/bin/") {
+ fs_union((const char*[]){
+ "/init/bin/amd64/",
+ "/init/bin/sh/",
+ NULL
+ });
+ }
MOUNT_AT("/tmp/") {
const char *argv[] = {"/bin/tmpfs", NULL};
execv(argv[0], (void*)argv);
diff --git a/src/user/bootstrap/main.c b/src/user/bootstrap/main.c
index fbcb641..f06401b 100644
--- a/src/user/bootstrap/main.c
+++ b/src/user/bootstrap/main.c
@@ -23,9 +23,10 @@ void _start(void) {
MOUNT_AT("/init/") { tar_driver(&_initrd); }
- void *init = tar_find("bin/init", 8, &_initrd, ~0) + 512;
+ const char *initpath = "bin/amd64/init";
+ void *init = tar_find(initpath, strlen(initpath), &_initrd, ~0) + 512;
if (init) {
- _klogf("execing init.elf");
+ _klogf("execing init");
elf_exec(init, NULL, NULL);
_klogf("elf_exec failed");
} else {