feat: 5G自动拨号、软件时钟同步、机器人端控制程序自启。

This commit is contained in:
2026-04-11 16:06:51 +08:00
parent 84e0cc54d2
commit 14ce3d4e1d
18 changed files with 1032 additions and 0 deletions

78
scripts/boot/5g-dial.sh Normal file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/common.sh"
STEP="5g-dial"
wait_for_serial() {
local serial_port="$1"
local timeout_sec="$2"
local waited=0
while (( waited < timeout_sec )); do
if [[ -e "${serial_port}" ]]; then
blitz_log "${STEP}" "wait-serial" "success" "serial_port=${serial_port} waited_sec=${waited}" 0
return 0
fi
if (( waited == 0 || waited % 5 == 0 )); then
blitz_log "${STEP}" "wait-serial" "waiting" "serial_port=${serial_port} waited_sec=${waited}" 0
fi
sleep 1
waited=$(( waited + 1 ))
done
blitz_log "${STEP}" "wait-serial" "failure" "serial_port=${serial_port} timeout_sec=${timeout_sec}" 1
return 1
}
wait_for_route() {
local target_ip="$1"
local timeout_sec="$2"
local waited=0
local route_output
while (( waited < timeout_sec )); do
route_output="$(blitz_route_ready "${target_ip}" || true)"
if [[ -n "${route_output}" ]]; then
blitz_log "${STEP}" "route-check" "success" "target_ip=${target_ip} route=${route_output}" 0
return 0
fi
if (( waited == 0 || waited % 5 == 0 )); then
blitz_log "${STEP}" "route-check" "waiting" "target_ip=${target_ip} waited_sec=${waited}" 0
fi
sleep 1
waited=$(( waited + 1 ))
done
blitz_log "${STEP}" "route-check" "failure" "target_ip=${target_ip} timeout_sec=${timeout_sec}" 1
return 1
}
blitz_load_boot_env
blitz_require_root "${STEP}"
blitz_require_command ip "${STEP}"
blitz_require_command python3 "${STEP}"
blitz_require_file "${BLITZ_5G_DIAL_DIR}/rndis_dial.py" "${STEP}"
if [[ -z "${BLITZ_TIME_SERVER_IP}" ]]; then
blitz_log "${STEP}" "precheck" "failure" "BLITZ_TIME_SERVER_IP is empty and no fallback could be derived" 1
exit 1
fi
route_output="$(blitz_route_ready "${BLITZ_TIME_SERVER_IP}" || true)"
if [[ -n "${route_output}" ]]; then
blitz_log "${STEP}" "dial" "already_up" "target_ip=${BLITZ_TIME_SERVER_IP} route=${route_output}" 0
exit 0
fi
wait_for_serial "${BLITZ_5G_SERIAL_PORT}" "${BLITZ_5G_SERIAL_WAIT_SEC}"
pushd "${BLITZ_5G_DIAL_DIR}" >/dev/null
blitz_run "${STEP}" "dial" python3 rndis_dial.py --serial-port "${BLITZ_5G_SERIAL_PORT}"
popd >/dev/null
wait_for_route "${BLITZ_TIME_SERVER_IP}" "${BLITZ_5G_ROUTE_WAIT_SEC}"
blitz_log "${STEP}" "complete" "success" "5G dial completed and route is ready" 0