From a6c5d56ade2d03cbcdc7c336b4dcef5bcd7fa24f Mon Sep 17 00:00:00 2001 From: Adolfo Delorenzo Date: Thu, 12 Feb 2026 20:50:20 -0600 Subject: [PATCH] rpi: drop to interactive shell on boot failure, add initcall_debug Instead of returning 1 (which triggers kernel panic via set -e before emergency_shell runs), exec an interactive shell on /dev/console so the user can run dmesg and debug interactively. Add initcall_debug and loglevel=7 to cmdline.txt to show every driver probe during boot. Also dump last 60 lines of dmesg before dropping to shell. Co-Authored-By: Claude Opus 4.6 --- build/scripts/create-rpi-image.sh | 2 +- init/lib/20-persistent-mount.sh | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/build/scripts/create-rpi-image.sh b/build/scripts/create-rpi-image.sh index a1fe64b..a3f0b06 100755 --- a/build/scripts/create-rpi-image.sh +++ b/build/scripts/create-rpi-image.sh @@ -173,7 +173,7 @@ CFGTXT # cmdline.txt — kernel command line # Note: must be a single line - echo "console=serial0,115200 console=tty1 kubesolo.data=LABEL=KSOLODATA" > "$MNT/cmdline.txt" + echo "console=serial0,115200 console=tty1 kubesolo.data=LABEL=KSOLODATA initcall_debug loglevel=7" > "$MNT/cmdline.txt" # Copy kernel as kernel8.img (RPi 3/4/5 ARM64 convention) cp "$KERNEL" "$MNT/kernel8.img" diff --git a/init/lib/20-persistent-mount.sh b/init/lib/20-persistent-mount.sh index e1c7d54..de2de6f 100755 --- a/init/lib/20-persistent-mount.sh +++ b/init/lib/20-persistent-mount.sh @@ -84,8 +84,20 @@ if [ ! -b "$KUBESOLO_DATA_DEV" ]; then dmesg 2>/dev/null | grep -i -e 'error' -e 'fail' -e 'unable' | while read -r line; do log_err " $line" done + log_err "--- Full dmesg (last 60 lines) ---" + dmesg 2>/dev/null | tail -60 | while read -r line; do + log_err " $line" + done log_err "=== End diagnostics ===" - return 1 + log_err "" + log_err "Dropping to debug shell in 10 seconds..." + log_err "Run 'dmesg' to see full kernel log." + log_err "Run 'ls /sys/class/block/' to check block devices." + log_err "" + sleep 10 + # Drop to interactive shell instead of returning failure + # (returning 1 with set -e causes kernel panic before emergency_shell) + exec /bin/sh /dev/console 2>&1 fi # Mount data partition (format on first boot if unformatted)