我敢说您可能能够编写某种自定义 GPIO 中间层。
读以太网->封装->写GPIO->|->读GPIO->解封装->写以太网
(反之亦然)
那么问题就变成了:两个调制解调器如何充当“以太网代理”?
Modem1 充当路由器的代理。Modem2 充当客户端的代理。如果您的 Raspberry Pi 可以欺骗 MAC 地址,您可能能够欺骗以太网对等体与调制解调器的以太网端口进行通信。您需要欺骗 MAC 地址的原因是,在 TCP/IP 网络中,有一个 ARP 表,它将远程 IP 地址映射到可以将 IP 数据包路由到/来自它们的 MAC 地址。这就是允许您的客户端通过 TCP/IP 与您的路由器通信的原因。
另一个潜在的陷阱是您的调制解调器通信引入了干扰以太网层处理协议的延迟。例如,以太网协议可能具有实时限制,如果您引入延迟,这些限制可能会被破坏......
但是让我们假设在一个完美的世界里一切皆有可能......
您需要编写用于读取/写入以太网消息的代码(我已经看到了用于在 Linux 中通过原始套接字读取/写入以太网数据包的开源代码)
您需要为您的 GPIO 通信编写自定义驱动程序。这意味着实施一个经过深思熟虑的协议来管理引脚状态、消息开始、消息结束、数据有效负载、校验和等等……
最后,您需要编写一个顶层通信层来实现:
以太网到 GPIO 过程:
a) 从以太网端口读取,将以太网数据包封装成自定义消息(或消息片段)
b) 使用您的自定义 GPIO 协议驱动程序将此自定义消息传递给外部 GPIO 对等体
GPIO 到以太网的过程:
a) 使用您的自定义驱动程序代码从 GPIO 读取 b) 解封装以太网数据包 c) 将以太网数据包写入以太网端口。
这两个进程永远运行......
同样,一切都取决于您的调制解调器是否可以在不干扰以太网协议的自然流动的情况下将自己插入对等连接中......
至于“C”部分...
如果您使用开源库(或代码片段)通过原始套接字读取/写入原始以太网,那很可能是用 C 编写的。
您的 GPIO 代码将以以下两种方式之一从 GPIO 引脚读取写入:从内存映射的硬件地址,或在该硬件地址上使用 ioport 调用。
在 Linux 中接收原始以太网帧
在 Linux 中发送原始以太网帧
祝你好运