#include <string.h>
#include <termios.h>
#include <unistd.h>
-#include <asm/types.h>
-#include <linux/serial.h> /* for serial_struct */
-#include <linux/version.h>
-#include <linux/reboot.h>
-#include <linux/unistd.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <sys/types.h>
-#include <sys/vt.h> /* for vt_stat */
#include <sys/wait.h>
#ifdef BB_SYSLOGD
# include <sys/syslog.h>
#endif
+#define bb_need_full_version
+#define BB_DECLARE_EXTERN
+#include "messages.c"
+
+/* From <linux/vt.h> */
+struct vt_stat {
+ unsigned short v_active; /* active vt */
+ unsigned short v_signal; /* signal to send */
+ unsigned short v_state; /* vt bitmask */
+};
+#define VT_GETSTATE 0x5603 /* get global vt state info */
+
+/* From <linux/serial.h> */
+struct serial_struct {
+ int type;
+ int line;
+ int port;
+ int irq;
+ int flags;
+ int xmit_fifo_size;
+ int custom_divisor;
+ int baud_base;
+ unsigned short close_delay;
+ char reserved_char[2];
+ int hub6;
+ unsigned short closing_wait; /* time to wait before closing */
+ unsigned short closing_wait2; /* no longer used... */
+ int reserved[4];
+};
+
+
#ifndef RB_HALT_SYSTEM
#define RB_HALT_SYSTEM 0xcdef0123
#include <sys/time.h>
#endif
-#ifndef KERNEL_VERSION
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
-#endif
#if defined(__GLIBC__)
#include <sys/kdaemon.h>
{"wait", WAIT},
{"once", ONCE},
{"ctrlaltdel", CTRLALTDEL},
- {0}
+ {0, 0}
};
/* Set up a linked list of initActions, to be read from inittab */
}
}
-#define CTRLCHAR(ch) ((ch)&0x1f)
-
/* Set terminal settings to reasonable defaults */
void set_term(int fd)
{
tcgetattr(fd, &tty);
/* set control chars */
- tty.c_cc[VINTR] = CTRLCHAR('C'); /* Ctrl-C */
- tty.c_cc[VQUIT] = CTRLCHAR('\\'); /* Ctrl-\ */
- tty.c_cc[VERASE] = CTRLCHAR('?'); /* Ctrl-? */
- tty.c_cc[VKILL] = CTRLCHAR('U'); /* Ctrl-U */
- tty.c_cc[VEOF] = CTRLCHAR('D'); /* Ctrl-D */
- tty.c_cc[VSTOP] = CTRLCHAR('S'); /* Ctrl-S */
- tty.c_cc[VSTART] = CTRLCHAR('Q'); /* Ctrl-Q */
- tty.c_cc[VSUSP] = CTRLCHAR('Z'); /* Ctrl-Z */
+ tty.c_cc[VINTR] = 3; /* C-c */
+ tty.c_cc[VQUIT] = 28; /* C-\ */
+ tty.c_cc[VERASE] = 127; /* C-? */
+ tty.c_cc[VKILL] = 21; /* C-u */
+ tty.c_cc[VEOF] = 4; /* C-d */
+ tty.c_cc[VSTART] = 17; /* C-q */
+ tty.c_cc[VSTOP] = 19; /* C-s */
+ tty.c_cc[VSUSP] = 26; /* C-z */
/* use line dicipline 0 */
tty.c_line = 0;
run_lastAction();
sync();
- if (kernelVersion > 0 && kernelVersion <= 2 * 65536 + 2 * 256 + 11) {
+ if (kernelVersion > 0 && kernelVersion <= KERNEL_VERSION(2,2,11)) {
/* bdflush, kupdate not needed for kernels >2.2.11 */
bdflush(1, 0);
sync();
/* allow time for last message to reach serial console */
sleep(2);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
- if (sig == SIGUSR2)
+ if (sig == SIGUSR2 && kernelVersion >= KERNEL_VERSION(2,2,0))
init_reboot(RB_POWER_OFF);
else
-#endif
init_reboot(RB_HALT_SYSTEM);
exit(0);
}
/* Expect to be invoked as init with PID=1 or be invoked as linuxrc */
if (getpid() != 1
#ifdef BB_FEATURE_LINUXRC
- && strstr(argv[0], "linuxrc") == NULL
+ && strstr(applet_name, "linuxrc") == NULL
#endif
)
{
/* Set up sig handlers -- be sure to
* clear all of these in run() */
signal(SIGUSR1, halt_signal);
- signal(SIGUSR2, reboot_signal);
+ signal(SIGUSR2, halt_signal);
signal(SIGINT, reboot_signal);
signal(SIGTERM, reboot_signal);
#if defined BB_FEATURE_INIT_CHROOT
CONSOLE|
#endif
LOG,
- "init started: BusyBox v%s (%s) multi-call binary\r\n",
- BB_VER, BB_BT);
+ "init started: %s\r\n", full_version);
#else
message(
#if ! defined BB_FEATURE_EXTRA_QUIET
CONSOLE|
#endif
LOG,
- "init(%d) started: BusyBox v%s (%s) multi-call binary\r\n",
- getpid(), BB_VER, BB_BT);
+ "init(%d) started: %s\r\n", getpid(), full_version);
#endif