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
}