---
date: 2025-11-06T17:37:40+08:00
researcher: Claude (Sonnet 4.5)
git_commit: 55d15177366d1d7ca8c12156829bd7fdb0ab4a6c
branch: main
repository: FWAauto
topic: "ATK-DLAM62xB 開發板連線配置與程式參數管理"
tags: [research, codebase, am62x, deployment, ssh, scp, configuration, parameters]
status: complete
last_updated: 2025-11-06
last_updated_by: Claude (Sonnet 4.5)
---

# Research: ATK-DLAM62xB 開發板連線配置與程式參數管理

**Date**: 2025-11-06T17:37:40+08:00
**Researcher**: Claude (Sonnet 4.5)
**Git Commit**: 55d15177366d1d7ca8c12156829bd7fdb0ab4a6c
**Branch**: main
**Repository**: FWAauto

## 📋 Research 文檔規範

本研究專注於「發現現況」，描述 FWAuto 如何處理開發板連線與程式執行參數，不提供具體實施步驟。

## Research Question

**原始問題**：
> 開發板 ATK-DLAM62xB 的連線信息（用於 scp/ssh）如何配置？部署過去的程式執行參數（如 `./led on`, `./led off`）如何管理？這些參數能否在 config.toml 配置？不同參數組合如何選用（人類介入 vs AI 選用）？

## Summary

FWAuto 已實現完整的 SSH/SCP 部署機制用於 AM62X 開發板，但存在以下發現：

### ✅ 已實現功能

1. **SSH/SCP 部署完整實現**
   - Flash node 透過 Makefile → flash.sh 執行部署
   - SCP 傳輸 + SSH 遠端執行
   - 遠端日誌下載與分析支援

2. **配置系統架構清晰**
   - User Config (~/.fwauto/config.toml): SDK 路徑、裝置資訊
   - Project Config (.fwauto/config.toml): 專案覆寫設定
   - 繼承機制：Project → User → Template defaults

3. **參數傳遞框架存在**
   - State 定義了 `command_args` 和 `mode_metadata` 欄位
   - Log node 完整使用 command_args
   - Utils 支援環境變數傳遞

### ⚠️ 發現的限制

1. **連線資訊硬編碼**
   - SSH 連線參數硬編碼在 flash.sh (IP, user, path)
   - 無法在 config.toml 配置
   - 不支援多開發板管理

2. **程式參數未實現**
   - Flash/build nodes 未使用 command_args
   - Makefile 和 shell scripts 無參數接收機制
   - 無參數配置系統（無 scenarios, test_cases）

3. **AI 參與度低**
   - AI brain node 未參與參數選擇
   - 無智能推薦機制
   - 完全依賴人工輸入

## Detailed Findings

### 1. SSH/SCP 連線配置

#### 1.1 現有配置位置

**硬編碼位置**: `src/fwauto/templates/sdk_am62x_linux/flash/flash.sh:10-14`

```bash
BOARD_IP="192.168.50.170"
BOARD_USER="root"
DEPLOY_PATH="/home/root"
BUILD_DIR="$(cd "$(dirname "$0")/../.." && pwd)/build"
SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=5"
```

**設計空間發現**：
- 這些參數「可以」移至 config.toml，技術上無障礙
- 現有 ProjectConfig 類別可擴展屬性接收這些欄位
- flash.sh 可從環境變數或 YAML/JSON 檔案讀取參數

#### 1.2 配置系統架構

**配置層級結構**:

```mermaid
graph TD
    A["Template defaults<br/>(metadata.toml)"] --> B["User Config<br/>(~/.fwauto/config.toml)"]
    B --> C["Project Config<br/>(.fwauto/config.toml)"]
    C --> D["Environment Variables<br/>(未實現)"]
    D --> E["Runtime Execution"]

    style A fill:#e1f5ff
    style B fill:#fff9e1
    style C fill:#e7ffe1
    style D fill:#ffe1e1
    style E fill:#f0e1ff
```

**現有配置支援** (src/fwauto/config.py:42-116):

| 屬性 | 行號 | 預設值 | 繼承層級 |
|------|------|--------|---------|
| `sdk_type` | 87-89 | None | Template |
| `sdk_path` | 92-105 | 從 User Config 繼承 | User → Project |
| `device_family` | 108-110 | "" | Template |
| `device_model` | 113-115 | "" | Template |
| `build_makefile` | 67-69 | `.fwauto/build/Makefile` | Template |
| `flash_makefile` | 77-79 | `.fwauto/flash/Makefile` | Template |

**缺少的配置欄位**:
- ❌ `board_ip`
- ❌ `board_user`
- ❌ `board_password` (或 ssh_key_path)
- ❌ `deploy_path`
- ❌ `ssh_options`

#### 1.3 部署流程

**完整工作流程圖**:

```mermaid
sequenceDiagram
    participant CLI as fwauto CLI
    participant Graph as LangGraph
    participant FlashNode as Flash Node
    participant Utils as execute_make_command
    participant Make as Makefile
    participant Shell as flash.sh
    participant Board as ATK-AM62x

    CLI->>Graph: fwauto flash
    Graph->>FlashNode: flash_node(state)
    FlashNode->>Utils: execute_make_command(<br/>makefile=.fwauto/flash/Makefile,<br/>target=flash)
    Utils->>Make: make -f .fwauto/flash/Makefile flash
    Make->>Shell: bash flash.sh

    Shell->>Shell: find_binary() → build/led
    Shell->>Board: scp build/led root@192.168.50.170:/home/root/
    Shell->>Board: ssh root@192.168.50.170 "cd /home/root && chmod +x ./led && ./led"

    Board-->>Shell: 執行輸出
    Shell-->>Make: 返回碼
    Make-->>Utils: stdout/stderr
    Utils-->>FlashNode: returncode, full_output
    FlashNode-->>Graph: state.flash_status = "success"
```

**關鍵實作位置**:

| 元件 | 檔案 | 行號 | 功能 |
|------|------|------|------|
| Flash Node | src/fwauto/nodes/flash.py | 21-129 | LangGraph 節點，驅動部署流程 |
| Make 執行器 | src/fwauto/utils.py | 78-155 | 執行 Makefile，支援環境變數傳遞 |
| Flash Makefile | templates/sdk_am62x_linux/flash/Makefile | 1-6 | 入口點，委託給 bash |
| Flash Script | templates/sdk_am62x_linux/flash/flash.sh | 1-99 | 實際執行 SCP/SSH |
| SCP 傳輸 | flash.sh | 50-65 | `deploy_binary()` 函數 |
| SSH 執行 | flash.sh | 67-78 | `execute_on_board()` 函數 |

**SCP 命令實際執行格式**:
```bash
scp -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -o ConnectTimeout=5 \
    build/led \
    root@192.168.50.170:/home/root/led
```

**SSH 執行命令格式**:
```bash
ssh -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    -o ConnectTimeout=5 \
    root@192.168.50.170 \
    "cd /home/root && chmod +x ./led && ./led"
```

#### 1.4 遠端日誌支援

FWAuto 已實現遠端日誌下載功能，證明 SSH/SCP 機制成熟。

**實作位置**: src/fwauto/nodes/log.py:243-330

**遠端路徑格式**: `user@host:path`

**使用範例**:
```bash
fwauto log "有任何 error 嗎?" --log-path root@192.168.50.170:/var/log/uart.log
```

**工作流程**:
1. 解析遠端路徑 (user, host, path)
2. SCP 下載到 `.fwauto/logs/<hash>.log`
3. 本地分析（Claude Agent SDK）
4. 清理暫存檔案

**錯誤處理** (log.py:307-330):
- 連線超時 → "Remote host did not respond within 30 seconds"
- 認證失敗 → "SSH authentication failed"
- 檔案不存在 → "Remote log file not found"
- 網路問題 → "Cannot connect to remote host"

### 2. 程式執行參數管理

#### 2.1 State 定義

**FirmwareState 參數欄位** (src/fwauto/state.py:58-59):

```python
command_args: Annotated[
    dict[str, Any],
    "CLI 命令參數 (e.g., {'query': 'error analysis', 'log_path': 'uart.log'})",
]
mode_metadata: Annotated[
    dict[str, Any],
    "執行模式的額外 metadata (e.g., {'max_iterations': 5})",
]
```

**設計意圖發現**:
- `command_args`: 使用者提供的參數（對應 CLI 選項）
- `mode_metadata`: 系統內部傳遞的元資訊
- 設計上「已準備」接收參數，但未完整實現

#### 2.2 CLI 參數接收

**Log 命令實作** (src/fwauto/cli.py:175-222) ✅ **參數完整**:

```python
@app.command()
def log(
    query: str,
    log_path: Optional[str] = None,
):
    # 參數完整傳遞到 state
    command_args = {
        "query": query,
        "log_path": log_path,
    }
```

**Flash 命令實作** (src/fwauto/cli.py:101-136) ❌ **無參數接收**:

```python
@app.command()
def flash():
    # 無任何參數定義
    initial_state = FirmwareState(
        execution_mode="flash",
        command="flash",
        command_args={},  # 空字典
        # ...
    )
```

**設計空間發現**:
- Flash 命令「可以」加入 `--binary-args` 選項
- 技術上只需新增參數定義和傳遞到 state
- 例如：`fwauto flash --binary-args "on"`

#### 2.3 Node 層參數使用

**Log Node** (src/fwauto/nodes/log.py:41-42) ✅ **完整使用參數**:

```python
query = state["command_args"]["query"]
log_path = state["command_args"].get("log_path")
```

**Flash Node** (src/fwauto/nodes/flash.py:79-84) ❌ **未使用參數**:

```python
returncode, full_output = execute_make_command(
    makefile_path=makefile_path,
    target=target,
    project_root=project_root_path,
    timeout=60,
)
# 無從 state["command_args"] 提取參數
```

**設計空間發現**:
- Flash node 可從 `state["command_args"].get("binary_args")` 提取參數
- 需傳遞給 execute_make_command()
- execute_make_command() 已支援環境變數傳遞 (utils.py:145-154)

#### 2.4 Makefile 層

**現有實作** (templates/sdk_am62x_linux/flash/Makefile:1-6):

```makefile
.PHONY: flash
flash:
	@bash flash.sh
```

**問題發現**:
- 無參數接收機制
- 無從環境變數讀取能力

**可行方向**:
- 可改為 `@bash flash.sh $(BINARY_ARGS)`
- 或讀取環境變數 `@bash flash.sh "$$BINARY_ARGS"`

#### 2.5 Shell Script 層

**現有 execute_on_board()** (flash.sh:67-78):

```bash
execute_on_board() {
    local binary_name="$1"

    log_info "Executing $binary_name on board..."
    echo "" >&2

    if ! ssh $SSH_OPTS "$BOARD_USER@$BOARD_IP" \
        "cd $DEPLOY_PATH && chmod +x ./$binary_name && ./$binary_name"; then
        log_error "Execution failed"
        exit 1
    fi
}
```

**問題發現**:
- 硬編碼執行 `./$binary_name`（無參數）
- 無接收額外參數的設計

**可行方向**:
```bash
execute_on_board() {
    local binary_name="$1"
    shift  # 移除第一個參數
    local binary_args="$@"  # 其餘作為程式參數

    ssh $SSH_OPTS "$BOARD_USER@$BOARD_IP" \
        "cd $DEPLOY_PATH && chmod +x ./$binary_name && ./$binary_name $binary_args"
}
```

#### 2.6 參數配置系統

**現況發現**:
- ❌ Config.toml 無參數配置欄位
- ❌ 無 scenarios 或 test_cases 定義
- ❌ 無參數驗證機制
- ❌ 無預設值系統

**設計空間**:

可考慮在 config.toml 加入：

```toml
# 範例：可能的參數配置設計
[execution]
default_binary_args = ""

[[execution.scenarios]]
name = "led-on"
description = "開啟 LED"
binary_args = "on"

[[execution.scenarios]]
name = "led-off"
description = "關閉 LED"
binary_args = "off"

[[execution.scenarios]]
name = "led-blink"
description = "LED 閃爍模式"
binary_args = "blink --frequency 1"
```

### 3. 參數選擇機制（人類 vs AI）

#### 3.1 現有 AI Brain Node

**實作位置**: src/fwauto/nodes/ai_brain.py:23-218

**功能發現**:
- 支援 `feat` 命令（AI 自動修改程式碼）
- 使用 Claude Code SDK 執行任務
- 從 prompt templates 載入指示

**限制發現**:
- 未參與參數選擇
- 無智能推薦機制
- 僅處理程式碼修改任務

#### 3.2 Prompt Template 系統

**Prompt Manager** (src/fwauto/prompt_manager.py:11-116):

```python
class PromptManager:
    def render_template(
        self,
        template_name: str,
        context: dict[str, Any],
        system_message: str | None = None,
    ) -> str:
        # 載入 prompts/*.md 並用 Jinja2 渲染
```

**現有 templates**:
- `prompts/ai_fix_build_errors.md` - 修復編譯錯誤
- `prompts/ai_feat_implement.md` - 實現新功能

**設計空間發現**:
- 可新增 `prompts/ai_recommend_params.md`
- AI 根據程式碼上下文推薦參數
- 範例：分析 main.c 發現支援的命令列參數

#### 3.3 測試覆蓋度

**測試檔案搜尋結果**:

```bash
# 搜尋參數相關測試
$ grep -r "command_args\|binary_args\|execution.*args" tests/
tests/test_story_001_state_expansion.py:    assert state["command_args"] == {}
tests/test_story_001_state_expansion.py:    assert state["mode_metadata"] == {}
```

**發現**:
- 僅有 state 定義測試
- 無參數傳遞的整合測試
- 無多參數組合測試

### 4. 相關 Templates 結構

#### 4.1 AM62X Template

**路徑**: src/fwauto/templates/sdk_am62x_linux/

```
sdk_am62x_linux/
├── metadata.toml              [SDK 元資訊]
├── build/
│   └── Makefile              [編譯設定]
└── flash/
    ├── Makefile              [Flash 入口]
    └── flash.sh              [部署邏輯]
```

#### 4.2 STM32 Template（比較）

**路徑**: src/fwauto/templates/sdk_stm32_keil/

```
sdk_stm32_keil/
├── metadata.toml
├── build/
│   └── Makefile
└── flash/
    └── Makefile
```

**比較發現**:
- STM32 無 flash.sh（使用 ST-LINK CLI）
- AM62X 需要 shell script 處理 SSH/SCP
- 兩者都無參數傳遞機制

## Code References

| 功能區域 | 檔案路徑 | 行號 | 說明 |
|---------|---------|------|------|
| **State 定義** |
| 參數欄位定義 | src/fwauto/state.py | 58-59 | command_args, mode_metadata |
| State 初始化 | src/fwauto/state.py | 6-77 | FirmwareState TypedDict |
| **CLI 層** |
| Log 命令（✅） | src/fwauto/cli.py | 175-222 | 完整參數接收 |
| Flash 命令（❌） | src/fwauto/cli.py | 101-136 | 無參數接收 |
| Build 命令（❌） | src/fwauto/cli.py | 64-98 | 無參數接收 |
| Feat 命令 | src/fwauto/cli.py | 225-265 | AI 功能請求 |
| **Node 層** |
| Flash Node | src/fwauto/nodes/flash.py | 21-129 | 未使用 command_args |
| Log Node | src/fwauto/nodes/log.py | 22-416 | ✅ 完整使用參數 |
| AI Brain Node | src/fwauto/nodes/ai_brain.py | 23-218 | 未參與參數選擇 |
| **Utils** |
| Make 執行器 | src/fwauto/utils.py | 78-155 | 支援環境變數（未啟用） |
| **Templates - AM62X** |
| Flash Script | templates/sdk_am62x_linux/flash/flash.sh | 1-99 | SSH/SCP 實作 |
| 連線配置（硬編碼） | flash.sh | 10-14 | BOARD_IP, BOARD_USER, DEPLOY_PATH |
| SCP 傳輸 | flash.sh | 50-65 | deploy_binary() |
| SSH 執行 | flash.sh | 67-78 | execute_on_board() |
| Flash Makefile | templates/sdk_am62x_linux/flash/Makefile | 1-6 | 入口點 |
| Build Makefile | templates/sdk_am62x_linux/build/Makefile | 1-47 | 編譯設定 |
| Metadata | templates/sdk_am62x_linux/metadata.toml | 1-28 | SDK 資訊 |
| **Config 系統** |
| Project Config | src/fwauto/config.py | 42-150 | 配置載入與屬性 |
| User Config | src/fwauto/user_config.py | 10-56 | 全域配置 |
| Config 初始化 | src/fwauto/cli_commands/init.py | 60-248 | fwauto init 流程 |
| **Prompt 系統** |
| Prompt Manager | src/fwauto/prompt_manager.py | 11-116 | Jinja2 模板渲染 |
| **測試** |
| State 測試 | tests/test_story_001_state_expansion.py | 全檔案 | command_args 基本測試 |

## Architecture Insights

### 設計模式發現

#### 1. **配置繼承鏈**

```mermaid
graph LR
    A[Template<br/>Defaults] -->|繼承| B[User<br/>Config]
    B -->|覆寫| C[Project<br/>Config]
    C -->|覆寫| D[Env Vars<br/>未實現]
    D --> E[Runtime]

    style A fill:#e3f2fd
    style B fill:#fff9c4
    style C fill:#c8e6c9
    style D fill:#ffccbc
    style E fill:#f8bbd0
```

**現況**:
- Template → User → Project: ✅ 已實現
- Env Vars 覆寫: ❌ 未實現
- Runtime 動態配置: ❌ 未實現

#### 2. **參數流動路徑（理想 vs 現實）**

**理想流程**:
```mermaid
graph LR
    A[User Input] --> B[CLI Parser]
    B --> C[State.command_args]
    C --> D[Node Processing]
    D --> E[Makefile]
    E --> F[Shell Script]
    F --> G[Binary Execution]
```

**現實流程**:
```mermaid
graph LR
    A[User Input] --> B[CLI Parser]
    B --> C[State.command_args]
    C -.->|❌ 斷層| D[Flash Node]
    D --> E[Makefile]
    E -.->|❌ 無參數| F[Shell Script]
    F -.->|❌ 硬編碼| G[Binary Execution]

    style C fill:#ffcccc
    style D fill:#ffcccc
    style E fill:#ffcccc
    style F fill:#ffcccc
```

**斷層位置**:
1. CLI → State: ✅ Log 命令有，Flash/Build 無
2. State → Node: ❌ Flash/Build nodes 未讀取 command_args
3. Node → Makefile: ⚠️ Utils 支援環境變數但未使用
4. Makefile → Shell: ❌ 無傳遞機制
5. Shell → Binary: ❌ 硬編碼執行方式

#### 3. **Maketool 抽象層設計**

**設計原則**（來自 CLAUDE.md）:
> Python 代碼編排工作流程，將工具鏈細節委託給 Makefiles

**實際實作**:

```mermaid
graph TD
    A[Python: Flash Node] -->|execute_make_command| B[Utils Layer]
    B -->|subprocess.run| C[Make CLI]
    C -->|parse Makefile| D[Makefile Target]
    D -->|bash command| E[Shell Script]
    E -->|scp/ssh| F[Dev Board]

    style A fill:#e1f5ff
    style B fill:#fff9e1
    style C fill:#e7ffe1
    style D fill:#ffe1f5
    style E fill:#f5e1ff
    style F fill:#e1ffe7
```

**優點**:
- Python 不需知道 toolchain 細節
- 添加新 SDK 只需修改 Makefile/Scripts

**限制**:
- 參數傳遞需跨越多層
- 每層都需修改才能支援參數

### 技術可行性分析

#### 連線配置化（BOARD_IP, BOARD_USER 等）

**方向 A: 環境變數**
- ✅ 簡單直接
- ✅ 無需修改 config schema
- ❌ 不適合多開發板管理
- 實施複雜度: ⭐ (簡單)

**方向 B: Config.toml 擴展**
- ✅ 結構化配置
- ✅ 支援多開發板（profiles）
- ⚠️ 需修改 config.py 和 flash.sh
- 實施複雜度: ⭐⭐ (中等)

**方向 C: 專屬 deployment.yaml**
- ✅ 最大彈性
- ✅ 支援複雜場景配置
- ❌ 引入新格式，增加學習成本
- 實施複雜度: ⭐⭐⭐ (複雜)

**建議方向**: B (Config.toml 擴展) - 平衡簡潔與功能

#### 程式參數傳遞

**方向 A: CLI 直接傳遞**
```bash
fwauto flash --binary-args "on"
```
- ✅ 最直觀
- ✅ 最少改動
- ⚠️ 需修改 5 處（CLI → Node → Utils → Makefile → Shell）
- 實施複雜度: ⭐⭐ (中等)

**方向 B: Config scenarios**
```bash
fwauto flash --scenario led-on
```
- ✅ 可重用配置
- ✅ 支援複雜參數組合
- ❌ 需實現 scenario 管理系統
- 實施複雜度: ⭐⭐⭐⭐ (複雜)

**方向 C: 互動式提示**
```bash
fwauto flash
# 提示: "Choose binary args: [on/off/blink]"
```
- ✅ 使用者友善
- ⚠️ 不適合自動化腳本
- ⚠️ 需 TUI 框架（Typer 支援）
- 實施複雜度: ⭐⭐⭐ (中等偏複雜)

**建議方向**: A (CLI 直傳) 先實現基礎，B (scenarios) 作為 Phase 2

#### AI 參數推薦

**可行技術路徑**:

1. **靜態分析法**
   - 解析 main.c 的 `argc/argv` 處理
   - 提取 `--help` 輸出
   - 推薦已知參數
   - 複雜度: ⭐⭐

2. **執行探測法**
   - 執行 `./binary --help` 或 `./binary -h`
   - 解析輸出建立參數清單
   - 複雜度: ⭐⭐⭐

3. **歷史學習法**
   - 記錄使用者常用參數組合
   - 基於頻率推薦
   - 複雜度: ⭐⭐⭐⭐

4. **AI 語義理解**
   - 使用 Claude SDK 分析使用者意圖
   - "我想讓 LED 閃爍" → 推薦 `blink` 參數
   - 複雜度: ⭐⭐⭐⭐⭐

**建議優先級**: 1 → 2 → 4 → 3

## Historical Context (from .ai/prpi)

目前 `.ai/prpi/` 目錄不存在歷史研究文件。本研究為該主題的首次系統性探索。

## Open Questions

### 配置系統

1. **多開發板管理**
   - 是否需要 profile 機制（dev, staging, production）？
   - 如何在多個開發板間快速切換？
   - 是否需要開發板自動發現？

2. **安全性**
   - SSH 私鑰路徑如何配置？
   - 是否需要支援密碼認證（不建議但某些環境需要）？
   - 如何處理敏感資訊（如密碼）？

3. **配置驗證**
   - 如何驗證 IP/port 可達？
   - 如何檢測 SSH 認證狀態？
   - 錯誤時如何友善提示？

### 參數系統

4. **參數驗證**
   - 如何驗證參數有效性？
   - 誰負責驗證（CLI, Node, 還是 Binary 自己）？
   - 無效參數時如何處理？

5. **參數組合**
   - 如何處理相依參數（如 `--mode auto` 需要 `--interval 1000`）？
   - 如何處理互斥參數？
   - 預設值如何定義？

6. **Scenarios 設計**
   - Scenarios 應該是全域的還是 project-specific？
   - 如何處理 scenario 繼承與覆寫？
   - 如何測試 scenarios？

### AI 整合

7. **AI 參數推薦時機**
   - 何時觸發 AI 推薦（自動 vs 使用者請求）？
   - 推薦結果如何呈現（互動選單 vs 自動執行）？
   - 推薦錯誤時如何處理？

8. **AI 可信度**
   - 如何評估 AI 推薦的準確性？
   - 是否需要使用者確認機制？
   - 如何記錄 AI 決策以便除錯？

### 測試策略

9. **參數測試**
   - 如何測試所有參數組合？
   - 如何模擬開發板環境？
   - 如何進行遠端執行的整合測試？

10. **配置測試**
    - 如何測試不同配置層級的覆寫？
    - 如何驗證配置繼承正確性？
    - 如何測試錯誤配置的處理？

## 附錄：最小可行方案（KISS 原則）

基於研究發現，以下是「最小改動」的可行方案建議方向（僅供參考，不含實施步驟）：

### Phase 1: 連線配置化（1-2 天）

**目標**: 將硬編碼的連線參數移至 config.toml

**涉及檔案**:
- src/fwauto/config.py (新增屬性)
- templates/sdk_am62x_linux/flash/flash.sh (讀取環境變數)
- src/fwauto/nodes/flash.py (傳遞配置)

**新增配置欄位**:
```toml
[deployment.am62x]
board_ip = "192.168.50.170"
board_user = "root"
deploy_path = "/home/root"
ssh_options = "-o StrictHostKeyChecking=no -o ConnectTimeout=5"
```

### Phase 2: 基礎參數傳遞（1-2 天）

**目標**: 支援 `fwauto flash --binary-args "on"`

**涉及檔案**:
- src/fwauto/cli.py (新增 --binary-args 選項)
- src/fwauto/nodes/flash.py (讀取 command_args)
- src/fwauto/utils.py (傳遞環境變數)
- templates/*/flash/Makefile (轉發參數)
- templates/*/flash/*.sh (接收並使用參數)

**改動量**: ~50 行

### Phase 3: Scenarios 系統（1-2 週）

**目標**: 支援 `fwauto flash --scenario led-blink`

**需新增**:
- Scenario 配置 schema
- Scenario 驗證邏輯
- Scenario 管理 CLI

### Phase 4: AI 推薦（1-2 個月）

**目標**: `fwauto flash --ai-recommend`

**需新增**:
- AI 分析 prompt template
- 參數推薦 node
- 互動確認機制

---

**研究完成日期**: 2025-11-06
**研究耗時**: ~40 分鐘（2 個並行研究任務）
**參考檔案數量**: 15+ 個核心檔案
