Skip to content

Commit

Permalink
Merge branch 'for-5.11-null-console' into for-linus
Browse files Browse the repository at this point in the history
  • Loading branch information
pmladek committed Dec 14, 2020
2 parents b031a68 + 3cffa06 commit 5f3b8d3
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 19 deletions.
14 changes: 0 additions & 14 deletions drivers/tty/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -428,20 +428,6 @@ config MIPS_EJTAG_FDC_KGDB_CHAN
help
FDC channel number to use for KGDB.

config NULL_TTY
tristate "NULL TTY driver"
help
Say Y here if you want a NULL TTY which simply discards messages.

This is useful to allow userspace applications which expect a console
device to work without modifications even when no console is
available or desired.

In order to use this driver, you should redirect the console to this
TTY, or boot the kernel with console=ttynull.

If unsure, say N.

config TRACE_ROUTER
tristate "Trace data router for MIPI P1149.7 cJTAG standard"
depends on TRACE_SINK
Expand Down
3 changes: 1 addition & 2 deletions drivers/tty/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
obj-$(CONFIG_TTY) += tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o \
tty_buffer.o tty_port.o tty_mutex.o \
tty_ldsem.o tty_baudrate.o tty_jobctrl.o \
n_null.o
n_null.o ttynull.o
obj-$(CONFIG_LEGACY_PTYS) += pty.o
obj-$(CONFIG_UNIX98_PTYS) += pty.o
obj-$(CONFIG_AUDIT) += tty_audit.o
Expand All @@ -25,7 +25,6 @@ obj-$(CONFIG_ISI) += isicom.o
obj-$(CONFIG_MOXA_INTELLIO) += moxa.o
obj-$(CONFIG_MOXA_SMARTIO) += mxser.o
obj-$(CONFIG_NOZOMI) += nozomi.o
obj-$(CONFIG_NULL_TTY) += ttynull.o
obj-$(CONFIG_ROCKETPORT) += rocket.o
obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o
obj-$(CONFIG_SYNCLINKMP) += synclinkmp.o
Expand Down
18 changes: 18 additions & 0 deletions drivers/tty/ttynull.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@
/*
* Copyright (C) 2019 Axis Communications AB
*
* The console is useful for userspace applications which expect a console
* device to work without modifications even when no console is available
* or desired.
*
* In order to use this driver, you should redirect the console to this
* TTY, or boot the kernel with console=ttynull.
*
* Based on ttyprintk.c:
* Copyright (C) 2010 Samo Pogacnik
*/
Expand Down Expand Up @@ -59,6 +66,17 @@ static struct console ttynull_console = {
.device = ttynull_device,
};

void __init register_ttynull_console(void)
{
if (!ttynull_driver)
return;

if (add_preferred_console(ttynull_console.name, 0, NULL))
return;

register_console(&ttynull_console);
}

static int __init ttynull_init(void)
{
struct tty_driver *driver;
Expand Down
3 changes: 3 additions & 0 deletions include/linux/console.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,9 +187,12 @@ extern int braille_register_console(struct console *, int index,
extern int braille_unregister_console(struct console *);
#ifdef CONFIG_TTY
extern void console_sysfs_notify(void);
extern void register_ttynull_console(void);
#else
static inline void console_sysfs_notify(void)
{ }
static inline void register_ttynull_console(void)
{ }
#endif
extern bool console_suspend_enabled;

Expand Down
10 changes: 8 additions & 2 deletions init/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1480,8 +1480,14 @@ void __init console_on_rootfs(void)
struct file *file = filp_open("/dev/console", O_RDWR, 0);

if (IS_ERR(file)) {
pr_err("Warning: unable to open an initial console.\n");
return;
pr_err("Warning: unable to open an initial console. Fallback to ttynull.\n");
register_ttynull_console();

file = filp_open("/dev/console", O_RDWR, 0);
if (IS_ERR(file)) {
pr_err("Warning: Failed to add ttynull console. No stdin, stdout, and stderr for the init process!\n");
return;
}
}
init_dup(file);
init_dup(file);
Expand Down
9 changes: 8 additions & 1 deletion kernel/printk/printk.c
Original file line number Diff line number Diff line change
Expand Up @@ -2236,8 +2236,15 @@ static int __init console_setup(char *str)
char *s, *options, *brl_options = NULL;
int idx;

if (str[0] == 0)
/*
* console="" or console=null have been suggested as a way to
* disable console output. Use ttynull that has been created
* for exacly this purpose.
*/
if (str[0] == 0 || strcmp(str, "null") == 0) {
__add_preferred_console("ttynull", 0, NULL, NULL, true);
return 1;
}

if (_braille_console_setup(&str, &brl_options))
return 1;
Expand Down

0 comments on commit 5f3b8d3

Please sign in to comment.