Patch from David McCullough <davidm@snapgear.com>
diff --git a/init/reboot.c b/init/reboot.c
index 001a3c7..1c9eedd 100644
--- a/init/reboot.c
+++ b/init/reboot.c
@@ -23,21 +23,88 @@
 
 #include "busybox.h"
 #include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__) 
+  #include <sys/reboot.h>
+  #define init_reboot(magic) reboot(magic)
+#else
+  #define init_reboot(magic) reboot(0xfee1dead, 672274793, magic)
+#endif
+#ifndef RB_ENABLE_CAD
+static const int RB_ENABLE_CAD = 0x89abcdef;
+static const int RB_AUTOBOOT = 0x01234567;
+#endif
 
 extern int reboot_main(int argc, char **argv)
 {
+	int delay = 0; /* delay in seconds before rebooting */
+	int rc;
+
+	while ((rc = getopt(argc, argv, "d:")) > 0) {
+		switch (rc) {
+		case 'd':
+			delay = atoi(optarg);
+			break;
+
+		default:
+			show_usage();
+			break;
+		}
+	}
+
+	if(delay > 0)
+		sleep(delay);
+
+#ifdef CONFIG_USER_INIT
+		/* Don't kill ourself */
+        signal(SIGTERM,SIG_IGN);
+        signal(SIGHUP,SIG_IGN);
+        setpgrp();
+
+		/* Allow Ctrl-Alt-Del to reboot system. */
+		init_reboot(RB_ENABLE_CAD);
+
+		message(CONSOLE|LOG, "\n\rThe system is going down NOW !!\n");
+		sync();
+
+		/* Send signals to every process _except_ pid 1 */
+		message(CONSOLE|LOG, "\rSending SIGTERM to all processes.\n");
+		kill(-1, SIGTERM);
+		sleep(1);
+		sync();
+
+		message(CONSOLE|LOG, "\rSending SIGKILL to all processes.\n");
+		kill(-1, SIGKILL);
+		sleep(1);
+
+		sync();
+		if (kernelVersion > 0 && kernelVersion <= KERNEL_VERSION(2,2,11)) {
+			/* bdflush, kupdate not needed for kernels >2.2.11 */
+			bdflush(1, 0);
+			sync();
+		}
+
+		init_reboot(RB_AUTOBOOT);
+		exit(0); /* Shrug */
+#else
 #ifdef CONFIG_FEATURE_INITRD
-	/* don't assume init's pid == 1 */
-	long *pid = find_pid_by_name("init");
-	if (!pid || *pid<=0) {
-		pid = find_pid_by_name("linuxrc");
+	{
+		/* don't assume init's pid == 1 */
+		long *pid = find_pid_by_name("init");
+		if (!pid || *pid<=0)
+			pid = find_pid_by_name("linuxrc");
 		if (!pid || *pid<=0)
 			error_msg_and_die("no process killed");
+		fflush(stdout);
+		return(kill(*pid, SIGTERM));
 	}
-	return(kill(*pid, SIGTERM));
 #else
 	return(kill(1, SIGTERM));
 #endif
+#endif
 }
 
 /*