150 lines
3.3 KiB
Bash
Executable File
150 lines
3.3 KiB
Bash
Executable File
#!/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 <boot分区> # 设置启动分区,如 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
|