gf_ai_box/docs/allxon_ota.md

140 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
# 替換 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 時才會用到。