You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用socat将远程BananaPI的SPI字符设备转发至本地?

解决Socat转发BananaPI SPI设备到本地的问题

问题分析

你当前的命令运行后很快终止,核心原因是远程端的Socat进程在无数据传输时会自动退出,且缺少维持会话持久的参数,导致双向转发链路无法保持。同时需要确保本地有可被URH识别的SPI设备节点。

步骤1:本地创建虚拟SPI设备节点

URH需要访问标准SPI设备路径,先在本地创建对应节点(权限不足时可加sudo执行):

# 创建本地SPI设备节点(主设备号153是SPI设备的标准主号)
mknod $HOME/dev/spidev0 c 153 0
# 赋予读写权限,确保URH能正常访问
chmod 666 $HOME/dev/spidev0

步骤2:使用持久化的Socat双向转发命令

替换你原来的命令,添加会话保持参数,确保链路不中断:

socat -d -d $HOME/dev/spidev0 EXEC:"ssh me@bananapi socat -d -d - /dev/spidev0.0",pty,setsid,sigint,echo=0

参数说明:

  • pty:为远程Socat进程分配伪终端,避免无数据时进程自动退出
  • setsid:创建独立会话,提升进程稳定性
  • sigint:传递中断信号到远程进程,方便正常终止转发
  • echo=0:关闭终端回显,避免干扰SPI数据传输

步骤3:验证权限与连接

  1. 确认BananaPI上的me用户对/dev/spidev0.0有读写权限:
    你的设备信息显示me已在对应权限组,若仍有异常可临时赋予全权限测试:
    sudo chmod 666 /dev/spidev0.0
    
  2. 运行命令后,通过-d -d输出的调试信息确认链路建立成功,无报错。

替代方案:TCP端口转发(更稳定)

如果上述命令仍有问题,可拆分两步建立转发:

  1. 在BananaPI上启动Socat监听TCP端口:
    socat TCP-LISTEN:8888,reuseaddr,fork /dev/spidev0.0
    
  2. 在本地连接到BananaPI的8888端口,映射到本地SPI节点:
    socat $HOME/dev/spidev0 TCP:bananapi:8888
    

若不想开放BananaPI端口,可通过SSH端口转发隐藏端口:

# 先在本地建立SSH端口转发,把BananaPI的8888端口映射到本地8888
ssh -L 8888:localhost:8888 me@bananapi -N &
# 再运行本地Socat命令
socat $HOME/dev/spidev0 TCP:localhost:8888

内容的提问来源于stack exchange,提问作者mawe222222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:02:33