# 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) ```sh 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) ```sh 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` 範例:** ```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` 邏輯草稿:** ```sh #!/bin/sh NEW_BIN="$1" TARGET="/mnt/flash/vienna/kp_firmware_host_stream" # 停止現有韌體 killall kp_firmware_host_stream # 替換 binary(flash 需 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 VML(Vatics Middleware Library)Package 的建置系統框架: - `drivers/` — Linux kernel modules(vpl_dmac_v2.0.0.3) - `include/` — 共用 headers(dbgdefs.h, typedef.h, vivo_codec.h 等) - `scripts/` — Makefile 建置系統 與 Allxon OTA 無關。是 VMF Vienna SDK 的 driver/library 開發框架,若未來需要自訂 KL630 上的 kernel module 或 VMF library 時才會用到。