linux/arch/um/drivers/stderr_console.c
<<
>>
Prefs
   1#include <linux/kernel.h>
   2#include <linux/init.h>
   3#include <linux/console.h>
   4
   5#include "chan_user.h"
   6
   7/* ----------------------------------------------------------------------------- */
   8/* trivial console driver -- simply dump everything to stderr                    */
   9
  10/*
  11 * Don't register by default -- as this registers very early in the
  12 * boot process it becomes the default console.
  13 *
  14 * Initialized at init time.
  15 */
  16static int use_stderr_console = 0;
  17
  18static void stderr_console_write(struct console *console, const char *string,
  19                                 unsigned len)
  20{
  21        generic_write(2 /* stderr */, string, len, NULL);
  22}
  23
  24static struct console stderr_console = {
  25        .name           = "stderr",
  26        .write          = stderr_console_write,
  27        .flags          = CON_PRINTBUFFER,
  28};
  29
  30static int __init stderr_console_init(void)
  31{
  32        if (use_stderr_console)
  33                register_console(&stderr_console);
  34        return 0;
  35}
  36console_initcall(stderr_console_init);
  37
  38static int stderr_setup(char *str)
  39{
  40        if (!str)
  41                return 0;
  42        use_stderr_console = simple_strtoul(str,&str,0);
  43        return 1;
  44}
  45__setup("stderr=", stderr_setup);
  46
  47/* The previous behavior of not unregistering led to /dev/console being
  48 * impossible to open.  My FC5 filesystem started having init die, and the
  49 * system panicing because of this.  Unregistering causes the real
  50 * console to become the default console, and /dev/console can then be
  51 * opened.  Making this an initcall makes this happen late enough that
  52 * there is no added value in dumping everything to stderr, and the
  53 * normal console is good enough to show you all available output.
  54 */
  55static int __init unregister_stderr(void)
  56{
  57        unregister_console(&stderr_console);
  58
  59        return 0;
  60}
  61
  62__initcall(unregister_stderr);
  63