From 3abc004465bb0e22164d1d156944feab6b20a408 Mon Sep 17 00:00:00 2001 From: nearxos Date: Wed, 18 Feb 2026 19:07:24 +0200 Subject: [PATCH] Update eMMC provisioning scripts: enhance error handling in flash-emmc-on-connect.sh to provide clearer instructions for fixing boot file issues, and improve fix-gadget-bootcode-on-host.sh to remove broken symlinks and ensure required tools are installed. --- .../host/flash-emmc-on-connect.sh | 2 +- .../scripts/fix-gadget-bootcode-on-host.sh | 34 +++++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/chromium-setup/emmc-provisioning/host/flash-emmc-on-connect.sh b/chromium-setup/emmc-provisioning/host/flash-emmc-on-connect.sh index 5f042a0..b011f37 100644 --- a/chromium-setup/emmc-provisioning/host/flash-emmc-on-connect.sh +++ b/chromium-setup/emmc-provisioning/host/flash-emmc-on-connect.sh @@ -92,7 +92,7 @@ fi # rpiboot requires bootfiles.bin or one of bootcode*.bin in the gadget dir; empty dir causes "No 'bootcode' files found" if [[ ! -f "$RPIBOOT_GADGET/bootfiles.bin" && ! -f "$RPIBOOT_GADGET/bootcode.bin" && ! -f "$RPIBOOT_GADGET/bootcode4.bin" && ! -f "$RPIBOOT_GADGET/bootcode5.bin" ]]; then log "rpiboot gadget dir has no boot files: $RPIBOOT_GADGET (reinstall usbboot)" - write_status "error" "rpiboot gadget empty" "null" "No boot files in $RPIBOOT_GADGET. Reinstall usbboot: run install-usbboot-on-host.sh on the host or build-and-deploy-usbboot-to-host.sh from your machine." + write_status "error" "rpiboot gadget empty" "null" "No boot files in $RPIBOOT_GADGET. On the host run: fix-gadget-bootcode-on-host.sh (or from your machine: ssh root@HOST 'bash -s' < scripts/fix-gadget-bootcode-on-host.sh). See docs troubleshooting." exit 1 fi diff --git a/chromium-setup/emmc-provisioning/scripts/fix-gadget-bootcode-on-host.sh b/chromium-setup/emmc-provisioning/scripts/fix-gadget-bootcode-on-host.sh index f61bc56..4743441 100644 --- a/chromium-setup/emmc-provisioning/scripts/fix-gadget-bootcode-on-host.sh +++ b/chromium-setup/emmc-provisioning/scripts/fix-gadget-bootcode-on-host.sh @@ -1,23 +1,37 @@ #!/usr/bin/env bash -# Run on the Proxmox host (as root) when rpiboot fails with "No 'bootcode' files found". -# Cause: mass-storage-gadget64/bootfiles.bin is a broken symlink (-> ../firmware/bootfiles.bin). -# This script removes the symlink and extracts bootcode4.bin from the installed rpiboot binary. +# Run on the Proxmox host (as root) when rpiboot fails with "No 'bootcode' files found" / "rpiboot gadget empty". +# Cause: mass-storage-gadget64 has no real boot files (broken symlinks or Git LFS not pulled). +# This script removes broken symlinks and extracts bootcode4.bin from the installed rpiboot binary. # # On host: bash fix-gadget-bootcode-on-host.sh -# From your machine: ssh root@10.130.60.224 'bash -s' < scripts/fix-gadget-bootcode-on-host.sh +# From your machine: ssh root@HOST 'bash -s' < chromium-setup/emmc-provisioning/scripts/fix-gadget-bootcode-on-host.sh set -e GADGET="${1:-/opt/usbboot/mass-storage-gadget64}" RPIBOOT="${2:-/opt/usbboot/rpiboot}" [[ -d "$GADGET" ]] || { echo "Error: $GADGET not found"; exit 1; } -[[ -x "$RPIBOOT" ]] || { echo "Error: $RPIBOOT not found"; exit 1; } +[[ -x "$RPIBOOT" ]] || { echo "Error: $RPIBOOT not found (install usbboot first: install-usbboot-on-host.sh)"; exit 1; } -# Remove broken bootfiles.bin symlink if present -if [[ -L "$GADGET/bootfiles.bin" ]] && ! [[ -f "$GADGET/bootfiles.bin" ]]; then - rm -f "$GADGET/bootfiles.bin" - echo "Removed broken symlink $GADGET/bootfiles.bin" -fi +# Ensure readelf and objdump are available (binutils) +for cmd in readelf objdump; do + if ! command -v "$cmd" &>/dev/null; then + echo "Installing binutils (required for $cmd)..." + apt-get update -qq && apt-get install -y -qq binutils 2>/dev/null || { + echo "Error: $cmd not found. Install binutils: apt-get install -y binutils" + exit 1 + } + break + fi +done + +# Remove broken symlinks in gadget dir so we can replace with real boot file +for f in bootfiles.bin bootcode.bin bootcode4.bin bootcode5.bin; do + if [[ -L "$GADGET/$f" ]] && ! [[ -f "$GADGET/$f" ]]; then + rm -f "$GADGET/$f" + echo "Removed broken symlink $GADGET/$f" + fi +done # If we already have a valid boot file, done if [[ -f "$GADGET/bootcode4.bin" ]] || [[ -f "$GADGET/bootfiles.bin" ]]; then