140 lines
5.6 KiB
Markdown
140 lines
5.6 KiB
Markdown
# 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 時才會用到。
|