#!/usr/bin/env bash RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' CYAN='\033[0;36m' RESET='\033[m' UPDATE_BIN="macos/update" # 检查运行环境 if [ "$(uname -s)" != "Darwin" ]; then echo "❌ 该脚本只支持 macOS 运行" exit 1 fi # 检查 update 工具是否存在 if [ ! -f "$UPDATE_BIN" ]; then echo "❌ 找不到刷机工具: $UPDATE_BIN" exit 1 fi # 运行 update 命令 run_update() { local cmd="$UPDATE_BIN 2>/dev/null" local need_spaces=0 if [[ "$1" == "bulkcmd" ]]; then need_spaces=1 fi cmd+=" $1" shift 1 for arg in "$@"; do if [[ $need_spaces == 1 ]]; then cmd+=" \" $arg\"" else cmd+=" $arg" fi done echo -e "${CYAN}执行: $cmd${RESET}" local result=$(eval "$cmd") echo -e "${YELLOW}$result${RESET}" if echo "$result" | grep -q "ERR"; then echo -e "${RED}命令执行失败${RESET}" return 1 fi return 0 } # 显示帮助信息 show_help() { echo "" echo "小爱音箱刷机工具 v1.0.0 by https://del.wang" echo "" echo "使用方法:" echo " ./flash connect # 连接设备" echo " ./flash delay <秒数> # 设置启动延时,如 5 秒" echo " ./flash switch # 设置启动分区,如 boot0" echo " ./flash system <分区> <固件路径> # 把固件刷到指定分区,如 system0" } # 连接设备 cmd_connect() { echo "🔌 请先拔掉设备电源,然后重新插上电源" echo "💡 如果长时间未连接,请拔插电源后重试..." while true; do run_update identify 7 if [ $? -eq 0 ]; then echo -e "${GREEN}✅ 设备已连接${RESET}" return 0 fi echo "⏳ 等待设备连接..." sleep 1 done } # 设置启动分区 cmd_switch() { if [ -z "$1" ]; then echo "❌ 请指定启动分区名称,如: ./flash switch boot0" return 1 fi echo "📋 设置启动分区为: $1" run_update bulkcmd "setenv boot_part $1" run_update bulkcmd "saveenv" echo -e "${GREEN}✅ 设置成功${RESET}" } # 设置启动延时 cmd_delay() { if [ -z "$1" ]; then echo "❌ 请指定启动延时(秒),如: ./flash delay 15" return 1 fi echo "⏱️ 设置启动延时为: $1 秒" run_update bulkcmd "setenv bootdelay $1" run_update bulkcmd "saveenv" echo -e "${GREEN}✅ 设置成功${RESET}" } # 刷入分区 cmd_system() { if [ -z "$1" ] || [ -z "$2" ]; then echo "❌ 请指定分区名称和文件,如: ./flash system system0 root.squashfs" return 1 fi if [ ! -f "$2" ]; then echo "❌ 文件不存在: $2" return 1 fi echo "💾 正在刷入 $2 到 $1 分区..." run_update partition "$1" "$2" if [ $? -eq 0 ]; then echo -e "${GREEN}✅ 刷入成功${RESET}" else echo -e "${RED}❌ 刷入失败${RESET}" return 1 fi } # 主命令处理 case "$1" in connect) cmd_connect ;; switch) cmd_switch "$2" ;; delay) cmd_delay "$2" ;; system) cmd_system "$2" "$3" ;; *) show_help ;; esac