diff --git a/package/petitboot/Config.in b/package/petitboot/Config.in index b81ab6310d..93ed3642c3 100644 --- a/package/petitboot/Config.in +++ b/package/petitboot/Config.in @@ -25,3 +25,11 @@ comment "petitboot needs a toolchain w/ wchar, dynamic library, threads, udev /d depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS || \ !BR2_TOOLCHAIN_HAS_THREADS || \ !BR2_PACKAGE_HAS_UDEV + +config BR2_PACKAGE_PETITBOOT_GETTY_PORT + string "TTY port(s)" + default "console" + depends on BR2_PACKAGE_PETITBOOT + help + Specify a space-separated list of ports to run the petitboot + UI on. Wildcards are allowed. Example: "hvc* ttys0 ttyS*" diff --git a/package/petitboot/pb-console b/package/petitboot/pb-console new file mode 100644 index 0000000000..407ff3b302 --- /dev/null +++ b/package/petitboot/pb-console @@ -0,0 +1,36 @@ +#!/bin/sh + +DAEMON="pb-console" + +PB_CONSOLE_PORT=${2:-"console"} +PB_CONSOLE_ARGS="--getty --detach -- -n -i 0 $PB_CONSOLE_PORT linux" + +# shellcheck source=/dev/null +[ -r "/etc/default/petitboot" ] && . "/etc/default/petitboot" + +start() { + printf 'Starting %s on %s: ' "$DAEMON" "$PB_CONSOLE_PORT" + mkdir -p /var/log/petitboot + + # shellcheck disable=SC2086 # we need the word splitting + start-stop-daemon -S -q -x "/usr/libexec/petitboot/$DAEMON" \ + -- $PB_CONSOLE_ARGS + status=$? + if [ "$status" -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + return "$status" +} + +case "$1" in + start) + "$1";; + stop|restart|reload) + ;; + *) + echo "Usage: $0 {start|stop|restart|reload} [port]" + exit 1 + ;; +esac diff --git a/package/petitboot/petitboot.mk b/package/petitboot/petitboot.mk index 0992111cb1..c4eb20b44d 100644 --- a/package/petitboot/petitboot.mk +++ b/package/petitboot/petitboot.mk @@ -46,6 +46,8 @@ else PETITBOOT_CONF_OPTS += --without-fdt endif +PETITBOOT_GETTY_PORT = $(patsubst %,'%',$(call qstrip,$(BR2_PACKAGE_PETITBOOT_GETTY_PORT))) + define PETITBOOT_POST_INSTALL $(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \ $(TARGET_DIR)/usr/libexec/petitboot/bb-kexec-reboot @@ -55,6 +57,14 @@ define PETITBOOT_POST_INSTALL $(TARGET_DIR)/etc/petitboot/boot.d/90-sort-dtb $(INSTALL) -m 0755 -D $(PETITBOOT_PKGDIR)/S15pb-discover \ $(TARGET_DIR)/etc/init.d/S15pb-discover + $(INSTALL) -D -m 0755 $(PETITBOOT_PKGDIR)/pb-console \ + $(TARGET_DIR)/etc/init.d/pb-console + + mkdir -p $(TARGET_DIR)/etc/udev/rules.d + (for port in $(PETITBOOT_GETTY_PORT); do \ + printf 'SUBSYSTEM=="tty", KERNEL=="%s", RUN+="/etc/init.d/pb-console start $$name"\n' "$$port"; \ + done) > $(TARGET_DIR)/etc/udev/rules.d/petitboot-console-ui.rules + mkdir -p $(TARGET_DIR)/usr/share/udhcpc/default.script.d/ ln -sf /usr/sbin/pb-udhcpc \ $(TARGET_DIR)/usr/share/udhcpc/default.script.d/ diff --git a/system/Config.in b/system/Config.in index 25485c2486..0b4dc9543e 100644 --- a/system/Config.in +++ b/system/Config.in @@ -403,7 +403,7 @@ config BR2_SYSTEM_BIN_SH menuconfig BR2_TARGET_GENERIC_GETTY bool "Run a getty (login prompt) after boot" - default y + default y if !BR2_PACKAGE_PETITBOOT if BR2_TARGET_GENERIC_GETTY config BR2_TARGET_GENERIC_GETTY_PORT