feat(publish): Add publish.sh and sync docs for V1.0.3
publish/publish.sh packages src/Script_ABC_Blanton into
publish/Script_ABC_Blanton_<Ver>/, with -z for a zip, -f to overwrite,
-n for a dry run.
The version is read from Script A's "; Version :" header rather than
passed in, so the folder name cannot disagree with what the tester sees
on opening the macro. The header is CRLF, so the carriage return is
stripped -- left in, it becomes part of the directory name. Captured
logs are excluded (they carry DUT serials) but the empty logs/ is kept
because logopen writes there. .gitignore now admits the tool while
still ignoring its output.
config.ttl: testcase ENV, margin scan off for this run.
Docs brought up to date with the 14 commits since 8aa5c90 -- SWB
channel/address map, the traffic and BMC tooling, line-ending policy,
and the exec-bit and tail -f traps.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014RetWKFZFG1ZHcitQAyhwM
This commit is contained in:
@@ -9,6 +9,10 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` →
|
||||
|
||||
完整架構見 [ARCHITECTURE.md](ARCHITECTURE.md)。
|
||||
|
||||
**目前狀態(2026-08-21)**:Script A/B/C 為 **V1.0.3**,涵蓋 PCIe AER / DDR EDAC / PMON /
|
||||
電壓 margin(9 顆 LTC2980)/ SWB loopback 線速流量(兩個 switch unit)/ BMC 監控與 DDR 壓力。
|
||||
SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。交付用 `./publish/publish.sh` 打包。
|
||||
|
||||
## 技術棧
|
||||
|
||||
- **Host**:Tera Term 5.x TTL macro(`.ttl`),Windows
|
||||
@@ -19,6 +23,7 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` →
|
||||
- **Margin**:LTC2980(= 2 × LTC2977)over PMBus,LINEAR16
|
||||
- **資料面流量**:`bcmcmd`(Broadcom drivshell)SWB loopback,VLAN 30..137 成對 `cdN`/`cdN+32`,
|
||||
`tx 100 length=512`;判定讀 ASIC `MIB_TPOK`/`MIB_RPOK` 做 per-pair 雙向交叉比對
|
||||
- **BMC**:host 端 `bmc-manager run "<cmd>"`,不需對 BMC 開 SSH(繞開其 busybox 工具鏈)
|
||||
- **判定資料源**:PCIe AER sysfs(`aer_dev_*`)、EDAC sysfs(`dimm_{ce,ue}_count`)、SONiC `show platform *`
|
||||
- **無編譯步驟**:TTL 與 bash 都直譯執行
|
||||
|
||||
@@ -50,24 +55,44 @@ pwr_data # SWB VRM 全軌
|
||||
margin_init Blanton_CB_CONN13 && margin_status
|
||||
|
||||
# ── SWB loopback 流量(bcmcmd,unit 0/1)─────────────
|
||||
blanton_traffic_linespeed ps -u 0 # 對照線的 link/speed
|
||||
blanton_traffic_linespeed init -u 0 # VLAN 30..137,cdN <-> cdN+32
|
||||
blanton_traffic_linespeed clear -u 0 # clear c
|
||||
blanton_traffic_linespeed start -u 0 -tx 100 -length 512
|
||||
blanton_traffic_linespeed stop -u 0 # 移除 VLAN 成員(--destroy 連 VLAN 一起砍)
|
||||
blanton_traffic_linespeed report -u 0 # per-pair TX/RX + PASS/FAIL(exit 2 = 有 FAIL/NA)
|
||||
blanton_traffic_linespeed run -u 0 # ps → init → clear → start → report 一條龍
|
||||
blanton_traffic_linespeed init -u 0 -n # -n dry-run:只印要下的 bcmcmd,不碰 DUT
|
||||
# 不帶 -u 就是預設 TL_UNITS="0 1",兩塊 switch board 都做(TTL 三支腳本即如此)
|
||||
blanton_traffic_linespeed ps # 對照線的 link/speed
|
||||
blanton_traffic_linespeed init # VLAN 30..137,cdN <-> cdN+32
|
||||
blanton_traffic_linespeed clear # clear c
|
||||
blanton_traffic_linespeed start -tx 100 -length 512
|
||||
blanton_traffic_linespeed stop # 移除 VLAN 成員(--destroy 連 VLAN 一起砍)
|
||||
blanton_traffic_linespeed report # per-pair TX/RX + PASS/FAIL(exit 2 = 有 FAIL/NA)
|
||||
blanton_traffic_linespeed run # ps → init → clear → start → report 一條龍
|
||||
blanton_traffic_linespeed init -u 0 # 只做單一 unit 時才需要 -u
|
||||
blanton_traffic_linespeed init -n # -n dry-run:只印要下的 bcmcmd,不碰 DUT
|
||||
blanton_traffic_linespeed report -f <log> # 離線重解一份存下來的 console log
|
||||
|
||||
# 離線版報表(開發機上跑,選項更多)
|
||||
python3 tools/bcm_mibpair_report_V1.1.0.py <drivshell.log> -a
|
||||
|
||||
# ── BMC 監控 / 壓力(需先 chmod +x!)────────────────
|
||||
chmod +x ~/Blanton_Script/bmc_monitor*.sh # 佈署後必做一次
|
||||
~/Blanton_Script/bmc_monitor.sh start # free -m 取樣,log/bmc_poll.log
|
||||
~/Blanton_Script/bmc_monitor_ddr.sh start # memtester,log/bmc_ddr.log
|
||||
~/Blanton_Script/bmc_monitor.sh status # pid / log 路徑 / log 大小
|
||||
~/Blanton_Script/bmc_monitor.sh stop
|
||||
# ⚠️ tail 子命令是 tail -f,會卡住不返回;要倒 log 請直接 cat log/*.log
|
||||
|
||||
# ── 各工具的 help ───────────────────────────────────
|
||||
blanton_fpga_help ; blanton_cb_i2c_help ; vi2c_help
|
||||
temp_sensor_help ; pwr_data_help ; blanton_traffic_linespeed_help
|
||||
```
|
||||
|
||||
**打包交付(在開發機上):**
|
||||
|
||||
```bash
|
||||
./publish/publish.sh # 版號讀 Script A 檔頭 → publish/Script_ABC_Blanton_V1.0.3/
|
||||
./publish/publish.sh -z # 另出 zip
|
||||
./publish/publish.sh -n # dry run
|
||||
```
|
||||
|
||||
要出新版**先改 Script A 檔頭的 `; Version :`**,publish 才會用新版號建資料夾。
|
||||
|
||||
**Host 端跑一輪測試:**
|
||||
|
||||
```
|
||||
@@ -94,6 +119,10 @@ Tera Term 連 COM port (115200-8-N-1)
|
||||
若要回到「每支各自記錄」,B/C 的 History 需要補回去
|
||||
- **Commit**:Conventional Commits,**英文**。scope 用 `ttl` / `fpga` / `i2c` / `vi2c` /
|
||||
`margin` / `pwr` / `temp` / `docs`
|
||||
- **換行符**:由 `.gitattributes` 管理 —— `*.sh` `*.conf` `*.py` `*.txt` `*.md` 釘 **LF**
|
||||
(要在 SONiC 上跑/被 source),`*.ttl` 維持 **CRLF**(Tera Term 只在 Windows 跑)。
|
||||
編輯 `.ttl` 時要保留 CRLF,別讓整檔變成 LF 產生假 diff
|
||||
- **打包**:`./publish/publish.sh`,版號**讀 Script A 檔頭**不是參數 —— 先改檔頭再打包
|
||||
- **Status 表**:`docs/TTL_Script_Blanton_Status_*.xlsx` 是逐項進度的正本(OK / On-Going + Owner),
|
||||
完成一項就同步更新,別讓文件跟腳本脫節
|
||||
|
||||
@@ -130,9 +159,23 @@ Tera Term 連 COM port (115200-8-N-1)
|
||||
- ⚠️ **`stress_hhmd.py` / `stress_pcie.py` 已於 2026-08-17 由 KC 移除**(Status 表 ScriptB #5/#7)。
|
||||
Script B 現在是 **8 個背景 job**(1 mlucas + 5 mem + ssd + usb),不是 10 個。
|
||||
I2C/PCIe 的持續讀取壓力目前沒有替代品。
|
||||
- ⚠️ **Script B 的 traffic 與 soak 迴圈都寫死 `-u 0`、且迴圈沒有 `pause`**:
|
||||
只測到一塊 switch board,取樣間隔也不是 Status 表寫的 10 分鐘(取決於指令執行時間)。
|
||||
改之前先確認現場期待的是哪一種。
|
||||
- ⚠️ **soak 迴圈沒有 `pause`**:取樣間隔不是 Status 表寫的 10 分鐘,而是取決於指令執行時間。
|
||||
(`-u 0` 已於 `491e807` 移除,A/B/C 現在都跑兩個 switch unit。)
|
||||
- 🔒 **`.sh` / `.conf` 一定要 LF**。CRLF 的 shell script 在 SONiC 上直接掛(`$'\r': command not found`);
|
||||
`settings/*.conf` 更陰險 —— 它們是被 `source` 的,`CB_I2C_CH=6` 會變成 `"6\r"`,安靜地壞掉。
|
||||
`.gitattributes` 已擋住 git 這條路徑,但**不會回頭重寫既有工作區檔案**:早於它 clone 的目錄要
|
||||
`git rm --cached -r . && git reset --hard` 才會生效,而且 **`git status` 乾淨不代表磁碟上是 LF**
|
||||
(`--renormalize` 只在進 index 的路上轉換)。驗證要看 byte:`grep -rlU $'\r' <dir>`
|
||||
- ⚠️ **`bmc_monitor*.sh` 需要 exec bit**,且**不是改用 `bash x.sh start` 就能繞過** ——
|
||||
`do_start` 內部是 `setsid "$SCRIPT_PATH" __daemon`,直接執行該路徑。git 記錄是 `100644`,
|
||||
Windows → 隨身碟 → DUT 也帶不動權限位元,所以佈署後要 `chmod +x ~/Blanton_Script/bmc_monitor*.sh`。
|
||||
沒做的話 Script B 的 start 會 Permission denied、Script C 的 `cat` 撲空,而且**不會報錯**,
|
||||
只會得到一份 BMC 段全空的 log
|
||||
- ⚠️ **`bmc_monitor*.sh` 的 `tail` 子命令是 `tail -n 50 -f`,永遠不返回**。TTL 裡絕對不要呼叫它
|
||||
(Script C 曾因此卡死,`18ce7a1` 改成直接 `cat log/*.log`)
|
||||
- ⚠️ **DUT 的 awk 對 `%d` 會夾到 INT32**(2147483647)。線速流量的計數器是 ~10¹² 量級,
|
||||
所以 awk 裡輸出大數一律用 `%.0f`(double 域,精確到 2⁵³)。`blanton_traffic_linespeed.sh`
|
||||
V0.4.1 已修;寫新的 awk 報表時要記得同一件事
|
||||
|
||||
## 資料夾說明
|
||||
|
||||
@@ -141,6 +184,6 @@ Tera Term 連 COM port (115200-8-N-1)
|
||||
- `tools/` — Host / 離線端:`bcm_mibpair_report_V1.1.0.py`(drivshell log → per-pair 報表)、
|
||||
`traffic_loopback_*.txt`(bcmcmd 原始指令表,`blanton_traffic_linespeed.sh` 是其 bash 版,
|
||||
**改 loopback 線路時兩邊要同步**)
|
||||
- `publish/` — 交付用打包輸出(`Blanton_Script_ABC_v<ver>_<date>/` + zip)
|
||||
- `publish/` — `publish.sh`(打包工具,**進 git**)+ `Script_ABC_Blanton_<Ver>/` 產出(**gitignored**)
|
||||
- `secret/` — 🚫 gitignored(除 `README.md` 與 `*.example`):DUT 帳密、per-unit BDF 覆寫、COM 設定
|
||||
- `For_AI/` — 🚫 gitignored:AI 協作素材(波形截圖、草稿筆記)
|
||||
|
||||
Reference in New Issue
Block a user