Update testing_exec.sh

Update testing_exec.sh

Update Makefile
This commit is contained in:
Lakr
2026-03-05 02:48:54 +08:00
parent ba52c2274f
commit 4669bfbd17
2 changed files with 103 additions and 6 deletions

View File

@@ -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_<base> -> 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 \

View File

@@ -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