summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2025-04-10 08:43:13 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2025-04-10 08:43:13 +0200
commitb7bcd372663fbef6fcc3957310e3e315eef3526b (patch)
tree83030be4b78fea24d827f6a88fc47775a0f435a1 /package
parente488dc052ed1c425689d8dde902a4d7b12a5b8b4 (diff)
miniinit: new package
Diffstat (limited to 'package')
-rw-r--r--package/miniinit/Makefile31
-rw-r--r--package/miniinit/src/miniinit.c44
-rw-r--r--package/toybox/files/config2
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