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 宿主机(平时不在线)

同名陷阱

vmsvmt 的 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 卡 activatingadb -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 篇参考文档(初始化踩坑 / 方案选型 / 拓扑演进 / 多项目设计)