svn commit: trunk/busybox: include init

landley at busybox.net landley at busybox.net
Mon Jan 30 08:31:40 UTC 2006


Author: landley
Date: 2006-01-30 00:31:37 -0800 (Mon, 30 Jan 2006)
New Revision: 13701

Log:
Re-add initrd support, unify halt/reboot/poweroff, add -n and -f options.


Removed:
   trunk/busybox/init/poweroff.c
   trunk/busybox/init/reboot.c

Modified:
   trunk/busybox/include/applets.h
   trunk/busybox/include/usage.h
   trunk/busybox/init/Config.in
   trunk/busybox/init/halt.c
   trunk/busybox/init/init.c


Changeset:
Modified: trunk/busybox/include/applets.h
===================================================================
--- trunk/busybox/include/applets.h	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/include/applets.h	2006-01-30 08:31:37 UTC (rev 13701)
@@ -517,8 +517,8 @@
 #ifdef CONFIG_PIVOT_ROOT
 	APPLET(pivot_root, pivot_root_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
 #endif
-#ifdef CONFIG_POWEROFF
-	APPLET(poweroff, poweroff_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
+#ifdef CONFIG_HALT
+	APPLET(poweroff, halt_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
 #endif
 #ifdef CONFIG_PRINTENV
 	APPLET(printenv, printenv_main, _BB_DIR_BIN, _BB_SUID_NEVER)
@@ -544,8 +544,8 @@
 #ifdef CONFIG_REALPATH
 	APPLET(realpath, realpath_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
 #endif
-#ifdef CONFIG_REBOOT
-	APPLET(reboot, reboot_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
+#ifdef CONFIG_HALT
+	APPLET(reboot, halt_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
 #endif
 #ifdef CONFIG_RENICE
 	APPLET(renice, renice_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)

Modified: trunk/busybox/include/usage.h
===================================================================
--- trunk/busybox/include/usage.h	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/include/usage.h	2006-01-30 08:31:37 UTC (rev 13701)
@@ -1010,11 +1010,13 @@
 	"-rw-rw-r--    1 andersen andersen   554058 Apr 14 17:49 /tmp/busybox.tar.gz\n"
 
 #define halt_trivial_usage \
-	"[-d<delay>]"
+	"[-d<delay>] [-n<nosync>] [-f<force>]"
 #define halt_full_usage \
 	"Halt the system.\n" \
 	"Options:\n" \
-	"\t-d\t\tdelay interval for halting"
+	"\t-d\t\tdelay interval for halting\n" \
+	"\t-n\t\tno call to sync()\n" \
+	"\t-f\t\tforce halt (don't go through init)\n"
 
 #ifdef CONFIG_FEATURE_HDPARM_GET_IDENTITY
 #define USAGE_HDPARM_IDENT(a) a
@@ -2372,11 +2374,13 @@
 	"the new root file system."
 
 #define poweroff_trivial_usage \
-	"[-d<delay>]"
+	"[-d<delay>] [-n<nosync>] [-f<force>]"
 #define poweroff_full_usage \
-	"Halt the system and request that the kernel shut off the power.\n" \
+	"Halt and shut off power.\n" \
 	"Options:\n" \
-	"\t-d\t\tdelay interval for shutting off"
+	"\t-d\t\tdelay interval for halting\n" \
+	"\t-n\t\tno call to sync()\n" \
+	"\t-f\t\tforce power off (don't go through init)\n"
 
 #define printenv_trivial_usage \
 	"[VARIABLES...]"
@@ -2475,11 +2479,13 @@
 	"Returns the absolute pathnames of given argument."
 
 #define reboot_trivial_usage \
-	"[-d<delay>]"
+	"[-d<delay>] [-n<nosync>] [-f<force>]"
 #define reboot_full_usage \
 	"Reboot the system.\n" \
 	"Options:\n" \
-	"\t-d\t\tdelay interval for rebooting"
+	"\t-d\t\tdelay interval for rebooting\n" \
+	"\t-n\t\tno call to sync()\n" \
+	"\t-f\t\tforce reboot (don't go through init)\n"
 
 #define renice_trivial_usage \
 	"{{-n INCREMENT} | PRIORITY} [[ -p | -g | -u ] ID ...]"

Modified: trunk/busybox/init/Config.in
===================================================================
--- trunk/busybox/init/Config.in	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/init/Config.in	2006-01-30 08:31:37 UTC (rev 13701)
@@ -12,21 +12,32 @@
 	  init is the first program run when the system boots.
 
 config CONFIG_FEATURE_USE_INITTAB
-	bool "  Support reading an inittab file?"
+	bool "  Support reading an inittab file"
 	default y
 	depends on CONFIG_INIT
 	help
 	  Allow init to read an inittab file when the system boot.
 
-config CONFIG_FEATURE_INITRD
-	bool "  Support running init from within an initrd?"
+config CONFIG_FEATURE_INIT_SCTTY
+	bool "  Support running commands with a controlling-tty"
+	default n
+	depends on CONFIG_INIT
+	help
+	  If this option is enabled a command starting with hyphen (-)
+	  is run in its own session (setsid(2)) and possibly with a
+	  controlling tty (TIOCSCTTY).  This is not the traditional init
+	  behavour, but is often what you want in an embedded system where
+	  the console is only accessed during development or for maintenance.
+
+config CONFIG_FEATURE_EXTRA_QUIET
+	bool "  Be _extra_ quiet on boot"
 	default y
 	depends on CONFIG_INIT
 	help
-	  Allow init to be called from an initrd as linuxrc.
+	  Prevent init from logging some messages to the console during boot.
 
 config CONFIG_FEATURE_INIT_COREDUMPS
-	bool "  Support dumping core for child processes (debugging only)?"
+	bool "  Support dumping core for child processes (debugging only)"
 	default n
 	depends on CONFIG_INIT
 	help
@@ -35,30 +46,24 @@
 	  core file sizes.  If this option is disabled, processes
 	  will not generate any core files.
 
-config CONFIG_FEATURE_INIT_SCTTY
-	bool "  Support running commands with a controlling-tty?"
-	default n
-	depends on CONFIG_INIT
-	help
-	  If this option is enabled a command starting with hyphen (-)
-	  is run in its own session (setsid(2)) and possibly with a
-	  controlling tty (TIOCSCTTY).  This is not the traditional init
-	  behavour, but is often what you want in an embedded system where
-	  the console is only accessed during development or for maintenance.
 
-config CONFIG_FEATURE_EXTRA_QUIET
-	bool "  Should init be _extra_ quiet on boot?"
+
+config CONFIG_FEATURE_INITRD
+	bool "  Support running init from within an initrd (not initramfs)"
 	default y
 	depends on CONFIG_INIT
 	help
-	  Prevent init from logging some messages to the console
-	  during boot.
+	  Legacy support for running init under the old-style initrd.  Allows
+	  the name linuxrc to act as init, and it doesn't assume init is PID 1.
 
+	  This does not apply to initramfs, which runs /init as PID 1 and
+	  requires no special support.
+
 config CONFIG_HALT
-	bool "halt"
+	bool "poweroff, halt, and reboot"
 	default y
 	help
-	  Stop all processes and halt the system.
+	  Stop all processes and either halt, reboot, or power off the system.
 
 config CONFIG_MESG
 	bool "mesg"
@@ -67,17 +72,9 @@
 	  Mesg controls access to your terminal by others.  It is typically
 	  used to allow or disallow other users to write to your terminal
 
-config CONFIG_POWEROFF
-	bool "poweroff"
 	default y
 	help
 	  Stop all processes and (try to) power off the system.
 
-config CONFIG_REBOOT
-	bool "reboot"
-	default y
-	help
-	  Stop all processes and reboot the system.
-
 endmenu
 

Modified: trunk/busybox/init/halt.c
===================================================================
--- trunk/busybox/init/halt.c	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/init/halt.c	2006-01-30 08:31:37 UTC (rev 13701)
@@ -1,28 +1,42 @@
 /* vi: set sw=4 ts=4: */
 /*
- * Mini halt implementation for busybox
+ * Poweroff reboot and halt, oh my.
  *
- * Copyright (C) 1999-2004 by Erik Andersen <andersen at codepoet.org>
+ * Copyright 2006 by Rob Landley <rob at landley.net>
  *
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
 #include <signal.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
 #include <sys/reboot.h>
 #include "busybox.h"
-#include "init_shared.h"
 
+#include <unistd.h>
 
-extern int halt_main(int argc, char **argv)
+int halt_main(int argc, char *argv[])
 {
-	char *delay; /* delay in seconds before rebooting */
+	char *delay = "hpr";
+	int which, flags, magic[] = {RB_HALT_SYSTEM, RB_POWER_OFF, RB_AUTOBOOT},
+		signals[] = {SIGUSR1, SIGUSR2, SIGTERM}, rc = 1;
 
-	if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
-		sleep(atoi(delay));
-	}
+	/* Figure out which applet we're running */
+	for(which=0;delay[which]!=*bb_applet_name;which++);
 
-	return ENABLE_INIT ? kill(1,SIGUSR1) : bb_shutdown_system(RB_HALT_SYSTEM);
+	/* Parse and handle arguments */
+	flags = bb_getopt_ulflags(argc, argv, "d:nf", &delay);
+	if (flags&1) sleep(atoi(delay));
+	if (!(flags&2)) sync();
+	
+	/* Perform action. */
+	if (ENABLE_INIT && !(flags & 4)) {
+		if (ENABLE_FEATURE_INITRD) {
+			long *pidlist=find_pid_by_name("linuxrc");
+			if (*pidlist>0) rc = kill(*pidlist,signals[which]);
+			if (ENABLE_FEATURE_CLEAN_UP) free(pidlist);
+		}
+		if (rc) rc = kill(1,signals[which]);
+	} else rc = reboot(magic[which]);
+
+	if (rc) bb_error_msg("No.");
+	return rc;
 }

Modified: trunk/busybox/init/init.c
===================================================================
--- trunk/busybox/init/init.c	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/init/init.c	2006-01-30 08:31:37 UTC (rev 13701)
@@ -751,14 +751,7 @@
 static void halt_signal(int sig)
 {
 	shutdown_system();
-	message(CONSOLE | LOG,
-#if #cpu(s390)
-			/* Seems the s390 console is Wierd(tm). */
-			"The system is halted. You may reboot now."
-#else
-			"The system is halted. Press Reset or turn off power"
-#endif
-		);
+	message(CONSOLE | LOG, "The system is halted.");
 	sync();
 
 	/* allow time for last message to reach serial console */
@@ -1024,11 +1017,9 @@
 	}
 #ifndef DEBUG_INIT
 	/* Expect to be invoked as init with PID=1 or be invoked as linuxrc */
-	if (getpid() != 1
-#ifdef CONFIG_FEATURE_INITRD
-		&& strstr(bb_applet_name, "linuxrc") == NULL
-#endif
-		) {
+	if (getpid() != 1 &&
+		(!ENABLE_FEATURE_INITRD || !strstr(bb_applet_name, "linuxrc")))
+	{
 		bb_show_usage();
 	}
 	/* Set up sig handlers  -- be sure to

Deleted: trunk/busybox/init/poweroff.c
===================================================================
--- trunk/busybox/init/poweroff.c	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/init/poweroff.c	2006-01-30 08:31:37 UTC (rev 13701)
@@ -1,28 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Mini poweroff implementation for busybox
- *
- * Copyright (C) 1999-2004 by Erik Andersen <andersen at codepoet.org>
- *
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
- */
-
-#include <signal.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/reboot.h>
-#include "busybox.h"
-#include "init_shared.h"
-
-
-extern int poweroff_main(int argc, char **argv)
-{
-	char *delay; /* delay in seconds before rebooting */
-
-	if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
-		sleep(atoi(delay));
-	}
-
-	return ENABLE_INIT ? kill(1,SIGUSR2) : bb_shutdown_system(RB_POWER_OFF);
-}

Deleted: trunk/busybox/init/reboot.c
===================================================================
--- trunk/busybox/init/reboot.c	2006-01-30 07:51:24 UTC (rev 13700)
+++ trunk/busybox/init/reboot.c	2006-01-30 08:31:37 UTC (rev 13701)
@@ -1,28 +0,0 @@
-/* vi: set sw=4 ts=4: */
-/*
- * Mini reboot implementation for busybox
- *
- * Copyright (C) 1999-2004 by Erik Andersen <andersen at codepoet.org>
- *
- * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
- */
-
-#include <signal.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/reboot.h>
-#include "busybox.h"
-#include "init_shared.h"
-
-
-extern int reboot_main(int argc, char **argv)
-{
-	char *delay; /* delay in seconds before rebooting */
-
-	if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
-		sleep(atoi(delay));
-	}
-
-	return ENABLE_INIT ? kill(1,SIGTERM) : bb_shutdown_system(RB_AUTOBOOT);
-}




More information about the busybox-cvs mailing list