Skip to content

遠端開發體系 ​

板子永遠掛公司 VM 10.8.0.6 上;其餘裝置通過 WireGuard 遠端使用它的序列埠、ADB、燒錄能力。 開發板零改動,人在哪臺機器上都一樣幹活。

全景 ​

星型拓撲:所有節點只和雲端互加 peer,跨節點流量經雲端 ip_forward 中轉。新裝置入網只需動兩處:自己 + 雲端。

機器清單 ​

單一事實源是 machines.tsv(版本化,權威副本在雲端 /srv/mesh/)。換機先自檢身份:

bash
mesh-whoami        # 按本机 WireGuard IP 自动匹配身份
idIP角色
cloud10.8.0.1WG 中轉 · 清單權威宿主 · nginx 託管 · 檔案庫
home-vm10.8.0.4家裡編譯 VM · 常駐 Agent
company-vm10.8.0.6接板子:ser2net / adb-server / 板子鎖
mac10.8.0.10互動 · AI Agent · 隨身編譯燒錄
phone10.8.0.100Termius SSH · 遠端檢視
home-host10.8.0.2home-vm 宿主機(平時不線上)

同名陷阱

vms 與 vmt 的 hostname 都叫 olicca-vm——認 IP 不認 hostname。

WireGuard:新裝置入網 ​

以 iPhone 入網為例的完整鏈路(2026-09 實測):

配置紀律:客戶端配置存 ~/.wireguard-mesh/<设备>.conf(0600,含私鑰不進 git);二維碼用 qrcode 庫出 PNG,別用終端 ASCII(顯示不全)。

日常開發鏈路速查 ​

需求通道關鍵命令
shell / 推拉檔案adb client → 遠端 adb serveradb -H 10.8.0.6 shell
MCU 日誌 / 控制台ser2net raw TCPsocket://10.8.0.6:400x
燒錄產物推遠端,刷機命令在遠端跑rsync + ssh
板端網頁forward 在 vmt 本地執行http://10.8.0.6:18080
隨便跑點啥SSH 免密(ed25519)ssh olicca@10.8.0.6

遠端 ADB ​

bash
adb -H 10.8.0.6 devices                                  # 显式走远端
export ADB_SERVER_SOCKET=tcp:10.8.0.6:5037               # 脚本里免 -H

遠端本地 adb shell 與遠端 adb -H 共用同一 server,可併發;兩端 adb 版本須接近(當前均 28.0.2)。

遠端序列埠(ser2net) ​

埠板子功能波特率
4000S100PMCU-COM921600
4001S100PMain-COM921600
4002RV1126BAP (Linux)1500000
4003RV1126BMCU (RT-Thread)1500000
python
import serial
s = serial.serial_for_url("socket://10.8.0.6:4002", timeout=2)   # raw TCP,波特率在 ser2net 端固定

別用 rfc2217://

ser2net 4.3.4 的 telnet 棧異常斷連後會僵死(接受 TCP 但不發協商位元組)。raw TCP 模式經 15 次快速連斷壓測穩定。代價只是不能遠端改波特率——我們的波特率本來就是固定的。

30 秒健康檢查 ​

遠端燒錄 ​

高延遲鏈路(RTT 130ms)別把刷機 USB 映射回本機,正確姿勢:

板子互斥鎖 ​

開發板是單例資源,燒錄/獨佔監聽前必取鎖:

鎖存 /tmp/boards/*.lock/(含 owner/任務/時間戳),/tmp 重啟即清,死鎖自愈。

非同步任務派發(Level 2) ​

人往共享目錄投任務檔案,家裡 VM 的無人值守 Agent 領取執行:

本機直連模式(板子插 Mac) ​

不經 WireGuard 時 adb 直連;4 路 CH340/341 序列埠(/dev/cu.wchusbserial*)名字會隨重列舉變化,靠「波特率 + 提示符」識別:

板子功能波特率提示符
RV1126BAP1500000root@ATK-DLRV1126B-MCU720:/#
RV1126BMCU1500000msh />
S100PAP921600ubuntu login:(root 空密碼)
S100PMCU921600無 shell,僅開機日誌

S100P 進 fastboot:AP 序列埠以 ~100ms 間隔逐個發 \x03 打斷 0 延遲 autoboot(10ms 連發會淹沒 U-Boot 輸入緩衝)→ 出現 Hobot$ → fastboot 0。

資料與協作生態 ​

雲端不只是中轉,還是整套協作設施的宿主:

設施埠/入口說明
omp-webhttp://10.8.0.1:8080(僅 WG 內網,免鑑權)全端會話瀏覽 + 網頁聊天 + 任務 UI
任務中心http://10.8.0.1:8090REST + work-task CLI + deadline 飛書提醒
會話日報systemd timer 09:30掃全量會話 → kimi-k3 生成 → 飛書 DM
nginx80(公網)靜態主頁 + prebuilts 工具鏈下載

omp 會話同步按「一專案一 syncthing folder」,folder_id 三端一致、各端路徑各自對映;雲端 ignoreDelete 當只增不刪的檔案庫。對映唯一事實源:projects.tsv。

踩坑檔案 ​

現象根因修復
CH340 插著卻沒有 /dev/ttyUSB0Ubuntu brltty 搶佔 CH340/CP210xapt purge brltty + 重插
ser2net 接受 TCP 但無資料4.3.4 RFC2217 棧異常斷連後僵死換 raw TCP(socket://)
ser2net 程序活著但埠不監聽boot 競態:拉起時 USB 序列埠未列舉,靜默停用udev 規則自動 restart
adb-server systemd 卡 activating舊 adb -a nodaemon 佔著 5037pkill -f "adb -a nodaemon"
遠端 adb 突然全掛兩端 adb 版本漂移對齊版本(當前 28.0.2)
Mac 側 adb -H ... forward 報 more than oneadb 1.0.41 的 -s 對 forward 無效forward 放 vmt 本地執行
vms 上 syncthing 全部 folder 掛起磁碟 100% 觸發 minHomeFreePctjournal vacuum + 清磁碟

復現與出處 ​

  • 全部遠端配置已固化為冪等指令碼 setup/,新資源主機跑一次 setup-resource-host.sh 即復現
  • 操作細節與逐條命令見 skill remote-dev 及 4 篇參考文件(初始化踩坑 / 方案選型 / 拓撲演進 / 多專案設計)
這篇裡有不清楚的地方,或者想聊類似的東西?私訊我 →