diff options
Diffstat (limited to 'main/mkinitfs/0005-Reuse-kernel-side-configuration-for-console-devices.patch')
-rw-r--r-- | main/mkinitfs/0005-Reuse-kernel-side-configuration-for-console-devices.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/main/mkinitfs/0005-Reuse-kernel-side-configuration-for-console-devices.patch b/main/mkinitfs/0005-Reuse-kernel-side-configuration-for-console-devices.patch new file mode 100644 index 0000000000..26b310e0bb --- /dev/null +++ b/main/mkinitfs/0005-Reuse-kernel-side-configuration-for-console-devices.patch @@ -0,0 +1,100 @@ +From 99716520d4cf093d42f5a93cac73964ceffc6b4e Mon Sep 17 00:00:00 2001 +From: Ain <41307858+nero@users.noreply.github.com> +Date: Mon, 13 Aug 2018 12:16:35 +0200 +Subject: [PATCH 5/5] Reuse kernel-side configuration for console= devices + +Instead of parsing the console= options in the initramfs, we ask the +kernel of its interpretation of the console= parameters. The kernel +does the console setup as part of its early startup, including the +configuration of the baud rate, control bits and flow control. + +The options and format of the console= parameter are documented here: +https://www.kernel.org/doc/html/v4.15/admin-guide/serial-console.html + +By keeping the settings from the kernel, we avoid baud rate switching +between printk and getty output on edge cases. + +This adds support for additional tty types, like hvc, while removing +string parsing code from the initramfs. +--- + initramfs-init.in | 44 +++++++++++++++++--------------------------- + 1 file changed, 17 insertions(+), 27 deletions(-) + +diff --git a/initramfs-init.in b/initramfs-init.in +index 1d0f079..020f13c 100755 +--- a/initramfs-init.in ++++ b/initramfs-init.in +@@ -105,34 +105,28 @@ rc_add() { + ln -sf /etc/init.d/$1 $sysroot/etc/runlevels/$2/$1 + } + +-setup_inittab_console(){ +- while [ $# -gt 0 ]; do +- local tty=${1%,*} +- local speed=${1#*,} +- local line= +- local term= +- case "$tty" in +- ttyS*|ttyMFD*|ttyUSB*|ttyAMA*) +- term=vt100 +- line=-L +- flow=${speed##*[^r]} +- speed=${speed%%[^0-9]*} +- speed=${speed:-115200} +- ;; +- *) +- [ "$speed" = "$1" ] && speed=38400 +- ;; +- esac +- shift ++# Recursively resolve tty aliases like console or tty0 ++list_console_devices() { ++ if ! [ -e /sys/class/tty/$1/active ]; then ++ echo $1 ++ return ++ fi + +- # skip "current console" from being added to inittab +- [ "$tty" = "tty0" ] && continue ++ for dev in $(cat /sys/class/tty/$1/active); do ++ list_console_devices $dev ++ done ++} + ++setup_inittab_console(){ ++ term=vt100 ++ # Inquire the kernel for list of console= devices ++ for tty in $(list_console_devices console); do + # do nothing if inittab already have the tty set up + if ! grep -q "^$tty:" $sysroot/etc/inittab; then + echo "# enable login on alternative console" \ + >> $sysroot/etc/inittab +- echo "$tty::respawn:/sbin/getty ${flow:+-h }$line $speed $tty $term" \ ++ # Baudrate of 0 keeps settings from kernel ++ echo "$tty::respawn:/sbin/getty -L 0 $tty $term" \ + >> $sysroot/etc/inittab + fi + if [ -e "$sysroot"/etc/securetty ] && ! grep -q -w "$tty" "$sysroot"/etc/securetty; then +@@ -302,10 +296,6 @@ for opt; do + SINGLEMODE=yes + continue + ;; +- console=*) +- CONSOLE="$CONSOLE ${opt#console=}" +- continue +- ;; + esac + + for i in $myopts; do +@@ -731,7 +721,7 @@ if [ -f "$sysroot"/etc/fstab ]; then + fi + + # fix inittab if alternative console +-setup_inittab_console $CONSOLE ++setup_inittab_console + + # copy alpine release info + #if ! [ -f "$sysroot"/etc/alpine-release ] && [ -f $ALPINE_MNT/.alpine-release ]; then +-- +2.18.0 + |