1/* vi: set sw=4 ts=4: */ 2/* 3 * setlogcons: Send kernel messages to the current console or to console N 4 * 5 * Copyright (C) 2006 by Jan Kiszka <jan.kiszka@web.de> 6 * 7 * Based on setlogcons (kbd-1.12) by Andries E. Brouwer 8 * 9 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 10 */ 11//config:config SETLOGCONS 12//config: bool "setlogcons (1.8 kb)" 13//config: default y 14//config: help 15//config: This program redirects the output console of kernel messages. 16 17//applet:IF_SETLOGCONS(APPLET_NOEXEC(setlogcons, setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP, setlogcons)) 18 19//kbuild:lib-$(CONFIG_SETLOGCONS) += setlogcons.o 20 21//usage:#define setlogcons_trivial_usage 22//usage: "[N]" 23//usage:#define setlogcons_full_usage "\n\n" 24//usage: "Pin kernel output to VT console N. Default:0 (do not pin)" 25 26// Comment from kernel source: 27/* ... 28 * By default, the kernel messages are always printed on the current virtual 29 * console. However, the user may modify that default with the 30 * TIOCL_SETKMSGREDIRECT ioctl call. 31 * 32 * This function sets the kernel message console to be @new. It returns the old 33 * virtual console number. The virtual terminal number 0 (both as parameter and 34 * return value) means no redirection (i.e. always printed on the currently 35 * active console). 36 */ 37 38#include "libbb.h" 39 40int setlogcons_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 41int setlogcons_main(int argc UNUSED_PARAM, char **argv) 42{ 43 char *devname; 44 struct { 45 char fn; 46 char subarg; 47 } arg = { 48 11, /* redirect kernel messages (TIOCL_SETKMSGREDIRECT) */ 49 0 50 }; 51 52 if (argv[1]) 53 arg.subarg = xatou_range(argv[1], 0, 63); 54 55 /* Can just call it on "/dev/tty1" always, but... 56 * in my testing, inactive (never opened) VTs are not 57 * redirected to, despite ioctl not failing. 58 * 59 * By using "/dev/ttyN", ensure it is activated. 60 */ 61 devname = xasprintf("/dev/tty%u", arg.subarg); 62 xioctl(xopen(devname, O_RDONLY), TIOCLINUX, &arg); 63 64 return EXIT_SUCCESS; 65} 66