From 4669bfbd178dad312f5039bc6ba0db92db228792 Mon Sep 17 00:00:00 2001 From: Lakr Date: Thu, 5 Mar 2026 02:48:54 +0800 Subject: [PATCH] Update testing_exec.sh Update testing_exec.sh Update Makefile --- Makefile | 5 +- scripts/testing_exec.sh | 104 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 103 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index cec6b44..55bfcb6 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,8 @@ help: @echo " make testing_ramdisk_send Send testing boot chain to device" @echo " make testing_checkpoint_save Save kernel checkpoint for patch testing" @echo " Options: BASE_PATCH=normal|dev|jb" - @echo " make testing_exec Quick test flow (prepare -> patch_jb -> build/send -> boot_dfu)" + @echo " make testing_exec Quick test flow (prepare -> patch_ -> build/send -> boot_dfu)" + @echo " Options: BASE_PATCH=normal|dev|jb" @echo "" @echo "CFW:" @echo " make cfw_install Install CFW mods via SSH" @@ -241,7 +242,7 @@ testing_checkpoint_save: VM_DIR="$(VM_DIR)" BASE_PATCH="$(if $(BASE_PATCH),$(BASE_PATCH),jb)" zsh "$(CURDIR)/$(SCRIPTS)/testing_checkpoint_save.sh" testing_exec: - VM_DIR="$(VM_DIR)" zsh "$(CURDIR)/$(SCRIPTS)/testing_exec.sh" + VM_DIR="$(VM_DIR)" BASE_PATCH="$(if $(BASE_PATCH),$(BASE_PATCH),jb)" zsh "$(CURDIR)/$(SCRIPTS)/testing_exec.sh" testing_kernel_patch: @if [ -z "$(strip $(or $(PATCHES),$(PATCH)))" ]; then \ diff --git a/scripts/testing_exec.sh b/scripts/testing_exec.sh index f8869a5..320dceb 100755 --- a/scripts/testing_exec.sh +++ b/scripts/testing_exec.sh @@ -4,7 +4,7 @@ set -euo pipefail # Quick testing flow: # pkill -9 vphone-cli # make fw_prepare -# make fw_patch_jb +# make fw_patch / fw_patch_dev / fw_patch_jb # make testing_ramdisk_build # make testing_ramdisk_send & # make boot_dfu @@ -13,6 +13,57 @@ PROJECT_DIR="$(cd "$(dirname "${0:a:h}")" && pwd)" cd "$PROJECT_DIR" VM_DIR="${VM_DIR:-vm}" +BASE_PATCH="${BASE_PATCH:-jb}" +WATCH_TIMEOUT_SECONDS="${WATCH_TIMEOUT_SECONDS:-30}" +RUN_TS="$(date '+%Y%m%d_%H%M%S')" + +case "$BASE_PATCH" in + normal) + PATCH_TARGET="fw_patch" + ;; + dev) + PATCH_TARGET="fw_patch_dev" + ;; + jb) + PATCH_TARGET="fw_patch_jb" + ;; + *) + echo "[-] Invalid BASE_PATCH: $BASE_PATCH" + echo " Use BASE_PATCH=normal|dev|jb" + exit 1 + ;; +esac + +if [[ "$VM_DIR" = /* ]]; then + VM_ABS_DIR="$VM_DIR" +else + VM_ABS_DIR="$PROJECT_DIR/$VM_DIR" +fi +mkdir -p "$VM_ABS_DIR" + +BOOT_LOG="$VM_ABS_DIR/testing_exec_boot_${RUN_TS}.log" +WATCH_LOG="$VM_ABS_DIR/testing_exec_watch_${RUN_TS}.log" +touch "$BOOT_LOG" "$WATCH_LOG" + +BOOT_PID="" +TAIL_PID="" + +log_watch() { + local ts="$1" + shift + echo "[testing_exec][watch][$ts] $*" | tee -a "$WATCH_LOG" +} + +cleanup() { + if [[ -n "${TAIL_PID:-}" ]]; then + kill "$TAIL_PID" 2>/dev/null || true + wait "$TAIL_PID" 2>/dev/null || true + fi + if [[ -n "${BOOT_PID:-}" ]]; then + kill "$BOOT_PID" 2>/dev/null || true + fi +} +trap cleanup EXIT INT TERM echo "[testing_exec] killing existing vphone-cli..." pkill -9 vphone-cli 2>/dev/null || true @@ -21,8 +72,8 @@ sleep 1 echo "[testing_exec] fw_prepare..." make fw_prepare VM_DIR="$VM_DIR" -echo "[testing_exec] fw_patch_jb..." -make fw_patch_jb VM_DIR="$VM_DIR" +echo "[testing_exec] $PATCH_TARGET (base_patch=$BASE_PATCH)..." +make "$PATCH_TARGET" VM_DIR="$VM_DIR" echo "[testing_exec] testing_ramdisk_build..." make testing_ramdisk_build VM_DIR="$VM_DIR" @@ -32,6 +83,51 @@ make testing_ramdisk_send VM_DIR="$VM_DIR" & SEND_PID=$! echo "[testing_exec] boot_dfu..." -make boot_dfu VM_DIR="$VM_DIR" +log_watch "$(date '+%Y-%m-%d %H:%M:%S')" \ + "start boot_dfu, inactivity timeout=${WATCH_TIMEOUT_SECONDS}s, boot_log=$BOOT_LOG" + +tail -n +1 -f "$BOOT_LOG" & +TAIL_PID=$! + +make boot_dfu VM_DIR="$VM_DIR" >>"$BOOT_LOG" 2>&1 & +BOOT_PID=$! + +LAST_SIZE="$(stat -f%z "$BOOT_LOG" 2>/dev/null || echo 0)" +LAST_ACTIVITY="$(date +%s)" +WATCHDOG_TRIGGERED=0 + +while kill -0 "$BOOT_PID" 2>/dev/null; do + sleep 1 + CURRENT_SIZE="$(stat -f%z "$BOOT_LOG" 2>/dev/null || echo 0)" + if (( CURRENT_SIZE > LAST_SIZE )); then + LAST_SIZE="$CURRENT_SIZE" + LAST_ACTIVITY="$(date +%s)" + fi + + NOW="$(date +%s)" + if (( NOW - LAST_ACTIVITY >= WATCH_TIMEOUT_SECONDS )); then + WATCHDOG_TRIGGERED=1 + log_watch "$(date '+%Y-%m-%d %H:%M:%S')" \ + "no new boot output for ${WATCH_TIMEOUT_SECONDS}s, killing vphone-cli and boot_dfu" + pkill -9 vphone-cli 2>/dev/null || true + kill "$BOOT_PID" 2>/dev/null || true + break + fi +done + +BOOT_STATUS=0 +wait "$BOOT_PID" 2>/dev/null || BOOT_STATUS=$? + +if (( WATCHDOG_TRIGGERED == 1 )); then + log_watch "$(date '+%Y-%m-%d %H:%M:%S')" "watchdog timeout exit (124)" + exit 124 +fi + +if (( BOOT_STATUS != 0 )); then + log_watch "$(date '+%Y-%m-%d %H:%M:%S')" "boot_dfu failed with exit code $BOOT_STATUS" + exit "$BOOT_STATUS" +fi + +log_watch "$(date '+%Y-%m-%d %H:%M:%S')" "boot_dfu completed successfully" wait "$SEND_PID" 2>/dev/null || true