希望这是最好的 Stack Exchange 网站 - 我认为这主要是有关 netcat 的问题。
我正在开发一个自定义数据采集设备。它可能最好被认为是一个花哨的声卡。它目前在 Ubuntu 14.04 上运行。我试图在另一个系统上的 MATLAB 中验证它的性能,最简单的解决方案似乎是通过 UDP 将原始数据从驱动程序传输到 MATLAB。
我可以在 MATLAB 中生成信号,并通过 UDP 将它们发送到带有 netcat 监听器的设备:
nc -ul 10000 > /dev/evio
但我无法让数据传输到另一个方向:
nc -u devhost 10000 < /dev/evio
我尝试过的这个和其他变体都默默地失败了。根据根本没有pv
数据通过管道。该设备仅实现read
、、和fops,以及少量自定义。如果输入缓冲区为空,则读取调用会阻塞,直到从硬件传入一帧数据,并且它返回请求的数据或整个帧(如果请求太多)。write
open
release
ioctl
如果我只是做一个简单的测试,hexdump /dev/evio | less
我就会看到我期望的数据。
据称,通过 nc 发送常规文件似乎工作正常pv
。
我实际上没有在另一端设置侦听器,但这应该没关系,因为这是 UDP,对吧?我计划用该端口上的原始数据向我的开发 PC 发送垃圾邮件,这样 MATLAB 就可以启动侦听器并在需要时接入。(我知道从长远来看这是一个糟糕的解决方案,但我只是在寻找一个简单的设备到 MATLAB 桥接器以进行硬件验证。)
更新:
使用 dd 似乎可以通过管道获得一些信息,但我不知道为什么它的工作方式不同。我将读取设置为设备的帧大小:
dd if=/dev/evio bs=6144 | pv | nc -u devhost 10000
16kB 0:00:00 [1.57MB/s] [<=>
然后我不得不按 ctrl+C 来关闭它。将 nc 从循环中移除似乎可以让它永远正常运行:
dd if=/dev/evio bs=6144 | pv > /dev/null
给出不断更新的 pv 结果,其数据速率与我所知道的设备生成的数据速率完全相同。pv < /dev/evio > /dev/null
还给出了相同的结果,这很有意义。我不应该一次只读取一帧。