diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2025-04-10 08:43:13 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2025-04-10 08:43:13 +0200 |
commit | b7bcd372663fbef6fcc3957310e3e315eef3526b (patch) | |
tree | 83030be4b78fea24d827f6a88fc47775a0f435a1 /package | |
parent | e488dc052ed1c425689d8dde902a4d7b12a5b8b4 (diff) |
miniinit: new package
Diffstat (limited to 'package')
-rw-r--r-- | package/miniinit/Makefile | 31 | ||||
-rw-r--r-- | package/miniinit/src/miniinit.c | 44 | ||||
-rw-r--r-- | package/toybox/files/config | 2 |
3 files changed, 76 insertions, 1 deletions
diff --git a/package/miniinit/Makefile b/package/miniinit/Makefile new file mode 100644 index 000000000..bef48e965 --- /dev/null +++ b/package/miniinit/Makefile @@ -0,0 +1,31 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include $(ADK_TOPDIR)/rules.mk + +PKG_NAME:= miniinit +PKG_VERSION:= 1.0 +PKG_RELEASE:= 1 +PKG_DESCR:= minimal init +PKG_SECTION:= base/init + +NO_DISTFILES:= 1 + +include $(ADK_TOPDIR)/mk/package.mk + +$(eval $(call PKG_template,MINIINIT,miniinit,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION))) + +CONFIG_STYLE:= manual +BUILD_STYLE:= manual +INSTALL_STYLE:= manual + +do-build: + PATH='$(HOST_PATH)' \ + $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(TARGET_LDFLAGS) \ + -o $(WRKBUILD)/miniinit $(WRKBUILD)/miniinit.c + +do-install: + $(INSTALL_DIR) $(IDIR_MINIINIT)/sbin + $(INSTALL_BIN) $(WRKBUILD)/miniinit $(IDIR_MINIINIT)/sbin/init + +include $(ADK_TOPDIR)/mk/pkg-bottom.mk diff --git a/package/miniinit/src/miniinit.c b/package/miniinit/src/miniinit.c new file mode 100644 index 000000000..69ad095c6 --- /dev/null +++ b/package/miniinit/src/miniinit.c @@ -0,0 +1,44 @@ +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/wait.h> +#include <unistd.h> + +int main() +{ + pid_t pid; + + printf("Started OpenADK miniinit\n"); + putenv("TERM=vt102"); + + // Redirect stdio to /dev/console + close(0); + close(1); + close(2); + open("/dev/console", O_RDWR); // stdin + dup(0); // stdout + dup(0); // stderr + + pid = vfork(); + if (pid == 0) { + setsid(); //new session + putenv("HOME=/"); + putenv("PATH=/sbin:/usr/sbin:/bin:/usr/bin"); + putenv("SHELL=/bin/sh"); + putenv("USER=root"); + // Child: start a shell (e.g., /bin/sh) + execl("/bin/sh", "/bin/sh", "-l", NULL); + perror("execl"); + exit(1); + } else if (pid > 0) { + // Parent: wait for child to exit + int status; + waitpid(pid, &status, 0); + printf("Shell exited, shutting down\n"); + } else if (pid < 0) { + printf("vfork failed"); + sleep(1); + return 0; + } + _exit(0); +} diff --git a/package/toybox/files/config b/package/toybox/files/config index 8d5769f78..5a14b8dd2 100644 --- a/package/toybox/files/config +++ b/package/toybox/files/config @@ -134,7 +134,7 @@ CONFIG_GETTY=y # CONFIG_GROUPDEL is not set # CONFIG_HEXDUMP is not set # CONFIG_HD is not set -CONFIG_INIT=y +# CONFIG_INIT is not set # CONFIG_IP is not set # CONFIG_IPCRM is not set # CONFIG_IPCS is not set |