gf_ai_box/docs/allxon_ota.md

5.6 KiB
Raw Permalink Blame History

Allxon 奧創雲 OTA 與事件上傳架構

相關資源位置

資源 路徑
kCurl 執行檔 /home/user/Documents/GOFACE/奧創雲/kCurl-1.1.1-release/
kCurl ARMv7 binary kCurl-linux-armv7(給 KL630 用)
golf.cgi (OOB Enabler CGI) /home/user/Documents/GOFACE/奧創雲/golf/content/golf.cgi
golf.cgi 安裝 script golf/install.sh → 複製到 OOB Enabler /usr/local/sbin/www/api/
Wrapper_mantratec Vatics VML 建置系統(與 OTA 無關,是 VMF SDK 的 driver/lib 框架)

kCurl 工具說明v1.1.1

kCurl 是 Allxon 提供的輕量 HTTP 工具,有兩個模式:

Client 模式KL630 → OOB Enabler

kCurl-linux-armv7 --data-binary @/tmp/sdcard/events/event_001.tar.gz \
    http://169.254.208.208/api/golf.cgi
  • POST binary 檔案到 OOB Enabler 的 golf.cgi
  • golf.cgi 計算 MD5 後回傳 {"MD5": "..."},並將資料轉發至 Allxon Cloud
  • golf.cgi 限制:只接受 192.168.、169.254.、10.* 的 REMOTE_ADDR

Server 模式OOB Enabler → KL630用於 OTA

kCurl-linux-armv7 -server -port 8192 -config /mnt/flash/vienna/ota_config.json &
  • 在 KL630 上監聽 port 8192
  • 收到檔案後,存到 data-store-path,再執行 post-command
  • $UPLOADED_FILE_PATH 是自動帶入的收到檔案路徑

ota_config.json 範例:

{
  "data-store-path": "/tmp/sdcard/ota",
  "post-command": "sh /mnt/flash/vienna/ota_update.sh $UPLOADED_FILE_PATH"
}

雙向資料流架構

┌─────────────────────────────────────────────────────────┐
│                     Allxon Cloud                        │
└──────────┬──────────────────────────┬───────────────────┘
           │ 接收事件上傳              │ 下發 OTA 韌體
           ▼                          ▼
┌─────────────────────────────────────────────────────────┐
│         OOB Enabler Bolt (169.254.208.208)              │
│  - 獨立 4G LTE 上網                                      │
│  - golf.cgi 安裝於 /usr/local/sbin/www/api/             │
│  - 內建 NTP提供 KL630 對時用)                         │
└──────────┬──────────────────────────┬───────────────────┘
           │ golf.cgi (HTTP POST)      │ kCurl client POST 韌體
           │ ← KL630 上傳事件          │ → KL630:8192
           ▼                          ▼
┌─────────────────────────────────────────────────────────┐
│                KL630 (ARMv7, uClibc)                    │
│                                                         │
│  [事件上傳] kCurl client → POST tar.gz to golf.cgi       │
│  [OTA接收] kCurl server (port 8192) ← 接收韌體          │
│            └─ post-command: ota_update.sh               │
└─────────────────────────────────────────────────────────┘

事件上傳流程KL630 → Cloud

STDC 偵測違規
    → 抓截圖 (JPEG)
    → 打包 tar.gz含 level1.jpg / level2.jpg / level3.jpg + event.json
    → 存入 /tmp/sdcard/events/
    → kCurl-linux-armv7 --data-binary @event.tar.gz http://169.254.208.208/api/golf.cgi
    → OOB Enabler 轉發至 Allxon Cloud

OTA 韌體更新流程Cloud → KL630

  1. 在 KL630 啟動時跑 kCurl server 常駐
  2. Allxon Cloud 下發 OTA 觸發 → OOB Enabler 用 kCurl client POST 韌體到 KL630:8192
  3. kCurl server 收到後儲存,執行 ota_update.sh

ota_update.sh 邏輯草稿:

#!/bin/sh
NEW_BIN="$1"
TARGET="/mnt/flash/vienna/kp_firmware_host_stream"

# 停止現有韌體
killall kp_firmware_host_stream

# 替換 binaryflash 需 remount rw
mount -o remount,rw /mnt/flash
cp "$NEW_BIN" "$TARGET"
chmod +x "$TARGET"
mount -o remount,ro /mnt/flash

# 重啟韌體
/mnt/flash/vienna/start_firmware.sh &

待確認:

  • /mnt/flash 是否允許 remount rw還是 binary 放在 SD 卡?
  • Allxon Cloud 下發 OTA 的具體觸發機制(是 golf.cgi 擴充還是 OOB Enabler 的另一個 API
  • kCurl server 在 OOB Enabler 上如何被觸發去 POST 到 KL630需看 Allxon Platform 的 OTA flow

golf.cgi 說明

  • 編譯環境GCC 9.4.0 Buildroot allxon-bolt-standard目標 ARMv7 uClibc
  • 安裝位置OOB Enabler 上):/usr/local/sbin/www/api/golf.cgi
  • 功能:接收 POST binary → 計算 MD5 → 回傳 JSON → 轉發至 Cloud
  • IP 白名單:僅接受 192.168.*169.254.*10.*(本地網路保護)

Wrapper_mantratec 說明(非 OTA 相關)

這是 Vatics VMLVatics Middleware LibraryPackage 的建置系統框架:

  • drivers/ — Linux kernel modulesvpl_dmac_v2.0.0.3
  • include/ — 共用 headersdbgdefs.h, typedef.h, vivo_codec.h 等)
  • scripts/ — Makefile 建置系統

與 Allxon OTA 無關。是 VMF Vienna SDK 的 driver/library 開發框架,若未來需要自訂 KL630 上的 kernel module 或 VMF library 時才會用到。