Przeglądaj źródła

miniinit: new package

Waldemar Brodkorb 1 miesiąc temu
rodzic
commit
b7bcd37266

+ 31 - 0
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

+ 44 - 0
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);
+}

+ 1 - 1
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

+ 4 - 0
target/config/Config.in.runtime

@@ -30,6 +30,10 @@ config ADK_RUNTIME_INIT_SIMPLEINIT
 	bool "Use a very simple init"
 	select ADK_PACKAGE_SIMPLEINIT
 
+config ADK_RUNTIME_INIT_MINIINIT
+	bool "Use a minimal init"
+	select ADK_PACKAGE_MINIINIT
+
 endchoice
 
 choice