diff --git a/firmware/update_fw.sh b/firmware/update_fw.sh index c760df7..d06c65a 100755 --- a/firmware/update_fw.sh +++ b/firmware/update_fw.sh @@ -78,6 +78,7 @@ on_err() { } on_exit() { local rc=$? + rm -rf "${BUILD_TMP:-}" if [ "$KLIPPER_STOPPED" = 1 ]; then echo; echo "=== Запуск klipper ===" sudo systemctl start klipper || echo "!!! Не удалось запустить klipper — запустите вручную: sudo systemctl start klipper" >&2 @@ -156,10 +157,15 @@ if [ "$BUILD_ONLY" = 0 ]; then fi # ---------- Сборка ---------- +BUILD_TMP=$(mktemp -d) build() { # build <цель> <конфиг> <артефакт: bin|elf> - local name=$1 cfg=$CONFIG_DIR/$2 ext=$3 + local name=$1 ext=$3 STAGE="сборка $name" section "Сборка $name ($2)" + # Собираем из копии: olddefconfig переписывает конфиг и создаёт <конфиг>.old, + # а файлы в репозитории должны оставаться нетронутыми + local cfg="$BUILD_TMP/$2" + cp "$CONFIG_DIR/$2" "$cfg" make -C "$KLIPPER" clean KCONFIG_CONFIG="$cfg" >/dev/null make -C "$KLIPPER" olddefconfig KCONFIG_CONFIG="$cfg" make -C "$KLIPPER" -j"$JOBS" KCONFIG_CONFIG="$cfg" @@ -192,7 +198,7 @@ if want host; then STAGE="прошивка host MCU" section "Прошивка host (klipper-mcu)" # flash-linux.sh копирует out/klipper.elf в /usr/local/bin/klipper_mcu и перезапускает klipper-mcu - make -C "$KLIPPER" flash KCONFIG_CONFIG="$CONFIG_DIR/$HOST_CFG" + make -C "$KLIPPER" flash KCONFIG_CONFIG="$BUILD_TMP/$HOST_CFG" [ "$(stat -c %Y "$HOST_BIN")" -ge "$START_TS" ] || die "$HOST_BIN не обновился" wait_for 10 "klipper-mcu не запустился" systemctl is-active --quiet klipper-mcu echo "klipper-mcu: $(systemctl is-active klipper-mcu), $HOST_BIN обновлён"