5.6 KiB
5.6 KiB
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)
- 在 KL630 啟動時跑 kCurl server 常駐
- Allxon Cloud 下發 OTA 觸發 → OOB Enabler 用 kCurl client POST 韌體到 KL630:8192
- 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
# 替換 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 時才會用到。