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: select PLATFORM_LINUX 15//config: help 16//config: This program redirects the output console of kernel messages. 17 18//applet:IF_SETLOGCONS(APPLET_NOEXEC(setlogcons, setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP, setlogcons)) 19 20//kbuild:lib-$(CONFIG_SETLOGCONS) += setlogcons.o 21 22//usage:#define setlogcons_trivial_usage 23//usage: "[N]" 24//usage:#define setlogcons_full_usage "\n\n" 25//usage: "Pin kernel output to VT console N. Default:0 (do not pin)" 26 27// Comment from kernel source: 28/* ... 29 * By default, the kernel messages are always printed on the current virtual 30 * console. However, the user may modify that default with the 31 * TIOCL_SETKMSGREDIRECT ioctl call. 32 * 33 * This function sets the kernel message console to be @new. It returns the old 34 * virtual console number. The virtual terminal number 0 (both as parameter and 35 * return value) means no redirection (i.e. always printed on the currently 36 * active console). 37 */ 38 39#include "libbb.h" 40 41int setlogcons_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 42int setlogcons_main(int argc UNUSED_PARAM, char **argv) 43{ 44 char *devname; 45 struct { 46 char fn; 47 char subarg; 48 } arg = { 49 11, /* redirect kernel messages (TIOCL_SETKMSGREDIRECT) */ 50 0 51 }; 52 53 if (argv[1]) 54 arg.subarg = xatou_range(argv[1], 0, 63); 55 56 /* Can just call it on "/dev/tty1" always, but... 57 * in my testing, inactive (never opened) VTs are not 58 * redirected to, despite ioctl not failing. 59 * 60 * By using "/dev/ttyN", ensure it is activated. 61 */ 62 devname = xasprintf("/dev/tty%u", arg.subarg); 63 xioctl(xopen(devname, O_RDONLY), TIOCLINUX, &arg); 64 65 return EXIT_SUCCESS; 66} 67