home: hub: mkinitfs

Download patch

ref: f12b2df56e481db71f3d863d9f910f3678adfa10
parent: b09b86e6ccceeda5cbcee398feb5935297ea582c
author: Natanael Copa <ncopa@alpinelinux.org>
date: Mon May 1 17:08:06 CDT 2023

init: autodetect serial console and add to inittab

fixes https://gitlab.alpinelinux.org/alpine/mkinitfs/-/issues/37

--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -106,10 +106,17 @@
 	done
 }
 
-setup_inittab_console(){
+detect_serial_console() {
+	local n=$(awk '$7 ~ /CTS/ || $7 ~ /DSR/ { print $1 }' "$ROOT"/proc/tty/drivers/serial 2>/dev/null)
+	if [ -n "$n" ]; then
+		echo ttyS${n%:}
+	fi
+}
+
+setup_inittab_console() {
 	term=vt100
 	# Inquire the kernel for list of console= devices
-	consoles="$(for c in console $KOPT_consoles; do list_console_devices $c; done)"
+	consoles="$(for c in console $KOPT_consoles $(detect_serial_console); do list_console_devices $c; done)"
 	for tty in $consoles; do
 		# ignore tty devices that gives I/O error
 		if ! stty -g -F /dev/$tty >/dev/null 2>/dev/null; then
--- a/tests/initramfs-init.test
+++ b/tests/initramfs-init.test
@@ -8,7 +8,8 @@
 	initramfs_init_tmpfs_root \
 	initramfs_init_tmpfs_root_modloop_sign \
 	initramfs_init_tmpfs_root_net_apkovl \
-	initramfs_init_tmpfs_root_console_serial
+	initramfs_init_tmpfs_root_console_serial \
+	initramfs_init_tmpfs_root_autodetect_serial
 
 fake_cmdline() {
 	mkdir -p proc
@@ -110,6 +111,31 @@
 		initramfs-init
 	atf_check \
 		-o match:"tty0::respawn:/sbin/getty" \
+		-o match:"ttyS0::respawn:/sbin/getty" \
+		cat sysroot/etc/inittab
+}
+
+initramfs_init_tmpfs_root_autodetect_serial_body() {
+	fake_cmdline ""
+	fake_switch_root
+	fake_sysroot_init
+	fake_bin stty <<-EOF
+		#!/bin/sh
+		true
+	EOF
+
+	mkdir -p proc/tty/drivers
+	cat > proc/tty/drivers/serial <<-EOF
+		0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 CTS|DSR
+		1: uart:16550A port:000002F8 irq:3 tx:103 rx:0 RTS|DTR
+		2: uart:unknown port:000003E8 irq:4
+		3: uart:unknown port:000002E8 irq:3
+	EOF
+
+	atf_check \
+		-o ignore \
+		initramfs-init
+	atf_check \
 		-o match:"ttyS0::respawn:/sbin/getty" \
 		cat sysroot/etc/inittab
 }