从零到一:基于Rtty/Rttys构建嵌入式设备远程调试系统

张开发
2026/4/11 17:32:13 15 分钟阅读

分享文章

从零到一:基于Rtty/Rttys构建嵌入式设备远程调试系统
1. 为什么需要嵌入式设备远程调试系统作为一名嵌入式开发工程师最头疼的就是设备部署到客户现场后出现的各种玄学问题。上周我就遇到一个典型案例某工业控制设备在测试环境运行一切正常但到了客户那里就间歇性死机客户描述的现象是有时候一天出现两三次有时候一周都不出现。这种问题如果放在以前我们只能让客户拍视频记录故障现象远程指导客户接串口线抓日志实在不行就派人出差到现场不仅效率低下而且成本高昂。直到我发现了Rtty/Rttys这套开源方案它完美解决了以下痛点实时性通过Web浏览器就能直接访问设备终端安全性支持Token认证和SSL加密轻量化服务端资源占用小于50MB客户端仅300KB左右跨平台支持x86/ARM架构适配各种嵌入式Linux系统2. 服务器端部署实战2.1 环境准备与安装建议使用Ubuntu 20.04 LTS作为服务器系统实测稳定性最好。先安装基础依赖sudo apt update sudo apt install -y wget unzip从GitHub获取预编译版本确实能省去很多麻烦但要注意版本匹配问题。我推荐下载带linux-amd64后缀的版本wget https://github.com/zhaojh329/rttys/releases/download/v6.1.0/rttys-6.1.0-linux-amd64.zip unzip rttys-6.1.0-linux-amd64.zip cd rttys-6.1.0-linux-amd642.2 关键配置详解配置文件rttys.conf中有几个参数需要特别注意# 设备连接端口务必开放防火墙 addr-dev: :5912 # 用户访问端口建议修改默认值 addr-user: :5913 # 白名单设置初期调试建议全开 white-list: * # 数据库配置小规模使用SQLite足够 db: sqlite://rttys.db # 本地认证开关生产环境建议开启 local-auth: false遇到过最坑的一个问题是SSL证书配置。如果不需要HTTPS直接注释掉相关配置项即可。需要HTTPS的话建议使用Lets Encrypt的免费证书sudo apt install certbot sudo certbot certonly --standalone -d yourdomain.com然后在配置文件中指定证书路径ssl-cert: /etc/letsencrypt/live/yourdomain.com/fullchain.pem ssl-key: /etc/letsencrypt/live/yourdomain.com/privkey.pem2.3 服务启动与测试启动服务时建议用nohup保持后台运行nohup ./rttys run --conf rttys.conf rttys.log 21 验证服务是否正常检查端口监听状态netstat -tulnp | grep rttys查看日志文件tail -f rttys.log浏览器访问http://服务器IP:59133. 设备端集成指南3.1 交叉编译踩坑实录Rtty的编译确实是个技术活我整理了最新版的避坑指南准备交叉编译工具链wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz export PATH$PATH:$(pwd)/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin解决依赖库问题libev建议用v4.33稳定版openssl必须与工具链版本匹配wget https://github.com/enki/libev/archive/refs/tags/v4.33.zip unzip v4.33.zip cd libev-4.33 ./configure --hostarm-linux-gnueabihf --prefix/opt/cross make make install关键编译参数 修改CMakeLists.txt添加静态编译选项set(CMAKE_EXE_LINKER_FLAGS -static -lssl -lcrypto -lev) set(BUILD_SHARED_LIBS OFF)3.2 设备端运行配置编译完成后将生成的rtty可执行文件通过scp传到设备scp rtty root设备IP:/usr/bin/运行命令示例建议写成启动脚本rtty -I device-001 \ -h your.server.com \ -p 5912 \ -a \ -v \ -d 产线测试设备 \ -s /dev/pts/0 # 可选绑定指定终端常见问题处理如果提示which: not found可以直接从busybox拷贝一个出现SSL连接错误时尝试添加-k参数跳过证书验证仅限调试内存不足的设备可以添加-m 1024限制内存使用4. 高级应用技巧4.1 网络穿透方案在客户现场NAT环境下的三种解决方案端口映射最简单iptables -t nat -A PREROUTING -p tcp --dport 5912 -j DNAT --to-destination 设备内网IP:5912反向代理推荐location /rtty { proxy_pass http://设备内网IP:5912; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }VPN桥接最稳定使用OpenVPN建立站点到站点VPN确保路由表正确配置4.2 安全加固措施生产环境必须做的安全配置修改默认端口addr-dev: :25912 addr-user: :25913启用设备认证token: your_secure_token_here white-list: device-001 device-002日志审计# 日志轮转配置 /var/log/rttys.log { daily rotate 30 compress missingok notifempty }系统服务化 创建/etc/systemd/system/rttys.service[Unit] DescriptionRTTY Server Afternetwork.target [Service] ExecStart/opt/rttys/rttys run --conf /opt/rttys/rttys.conf Restartalways Usernobody [Install] WantedBymulti-user.target5. 典型问题解决方案5.1 连接稳定性优化遇到连接频繁断开时可以尝试以下方法心跳参数调整rtty ... --keepalive 60 --retry-interval 10 --retry-count 3网络质量检测# 设备端执行 ping -c 10 your.server.com | grep packet loss缓冲区设置 在服务器配置中添加[tuning] write-buffer-size 8192 read-buffer-size 40965.2 资源占用监控内存有限的设备需要特别关注查看实时内存ps -o pid,user,%mem,command ax | grep rtty限制CPU占用cpulimit -l 30 -p $(pidof rtty)精简版本编译 修改CMakeLists.txtadd_definitions(-DMINIMAL_BUILD)这套系统在我们公司已经稳定运行2年多累计管理超过500台现场设备。最远成功调试过位于不同大洲的设备延迟控制在可接受范围内。对于需要频繁现场维护的嵌入式项目绝对是性价比超高的解决方案。

更多文章