Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

printk: Add an option to allow ttynull to be a default console device

The new option is CONFIG_NULL_TTY_DEFAULT_CONSOLE.

if enabled, and CONFIG_VT is disabled, ttynull will become the default
primary console device.

ttynull will be the only console device usually with this option enabled.
Some architectures do call add_preferred_console() which may add another
console though.

Motivation:

Many distributions ship with CONFIG_VT enabled. On tested desktop hardware
if CONFIG_VT is disabled, the default console device falls back to
/dev/ttyS0 instead of /dev/tty.

This could cause issues in user space, and hardware problems:

1. The user space issues include the case where /dev/ttyS0 is
disconnected, and the TCGETS ioctl, which some user space libraries use
as a probe to determine if a file is a tty, is called on /dev/console and
fails. Programs that call isatty() on /dev/console and get an incorrect
false value may skip expected logging to /dev/console.

2. The hardware issues include the case if a user has a science instrument
or other device connected to the /dev/ttyS0 port, and they were to upgrade
to a kernel that is disabling the CONFIG_VT option, kernel logs will then
be sent to the device connected to /dev/ttyS0 unless they edit their
kernel command line manually.

The new CONFIG_NULL_TTY_DEFAULT_CONSOLE option will give users and
distribution maintainers an option to avoid this. Disabling CONFIG_VT and
enabling CONFIG_NULL_TTY_DEFAULT_CONSOLE will ensure the default kernel
console behavior is not dependent on hardware configuration by default, and
avoid unexpected new behavior on devices connected to the /dev/ttyS0 serial
port.

Reviewed-by: Petr Mladek <pmladek@suse.com>
Tested-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Adam Simonelli <adamsimonelli@gmail.com>
Link: https://lore.kernel.org/r/20250314160749.3286153-2-adamsimonelli@gmail.com
[pmladek@suse.com: Fixed indentation of the commit message.]
Signed-off-by: Petr Mladek <pmladek@suse.com>

authored by

Adam Simonelli and committed by
Petr Mladek
2f1f7787 4ca6c022

+26 -2
+3 -1
Documentation/admin-guide/serial-console.rst
··· 78 78 acting as a system console will be used. At this time, the system 79 79 first looks for a VGA card and then for a serial port. So if you don't 80 80 have a VGA card in your system the first serial port will automatically 81 - become the console. 81 + become the console, unless the kernel is configured with the 82 + CONFIG_NULL_TTY_DEFAULT_CONSOLE option, then it will default to using the 83 + ttynull device. 82 84 83 85 You will need to create a new device to use ``/dev/console``. The official 84 86 ``/dev/console`` is now character device 5,1.
+18 -1
drivers/tty/Kconfig
··· 383 383 available or desired. 384 384 385 385 In order to use this driver, you should redirect the console to this 386 - TTY, or boot the kernel with console=ttynull. 386 + TTY, boot the kernel with console=ttynull, or enable 387 + NULL_TTY_DEFAULT_CONSOLE. 388 + 389 + If unsure, say N. 390 + 391 + config NULL_TTY_DEFAULT_CONSOLE 392 + bool "Support for console on ttynull" 393 + depends on NULL_TTY=y && !VT_CONSOLE 394 + help 395 + Say Y here if you want the NULL TTY to be used as a /dev/console 396 + device by default. 397 + 398 + For example, it might be useful to prevent a VT-less kernel from 399 + writing the system log to a random device connected to the serial 400 + port. 401 + 402 + Another console driver still might get preferred via the command 403 + line, SPCR, or the device tree. 387 404 388 405 If unsure, say N. 389 406
+5
kernel/printk/printk.c
··· 4277 4277 initcall_t call; 4278 4278 initcall_entry_t *ce; 4279 4279 4280 + #ifdef CONFIG_NULL_TTY_DEFAULT_CONSOLE 4281 + if (!console_set_on_cmdline) 4282 + add_preferred_console("ttynull", 0, NULL); 4283 + #endif 4284 + 4280 4285 /* Setup the default TTY line discipline. */ 4281 4286 n_tty_init(); 4282 4287