首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux对以太网帧的低层要求

linux对以太网帧的低层要求
EN

Stack Overflow用户
提问于 2013-09-24 12:37:50
回答 1查看 605关注 0票数 0

我正在开发一种用于机器人应用的高速、高分辨率摄像机。出于各种原因,我需要采用千兆位以太网(1Ge)或10Ge来将我的相机连接到PC。要么这样,要么我需要开发我自己的PCIe卡,我不喜欢这样做(更多的工作,再加上我必须创建驱动程序)。

在阅读linux文档后,我有两个不确定的问题。

#1:我想要的以太网帧是:

代码语言:javascript
复制
8-byte interpacket pad + sync byte
6-byte MAC address (destination)
6-byte MAC address (source)
2-byte packet length (varies 6KB to 9KB depending on lossless compression)
n-byte image data (number of bytes specified in previous 2-byte field)
4-byte CRC32

问题是,如果应用程序告诉linux期待AF_PACKETs (假设应用程序可以告诉linux ),linux会接受这个数据包吗?如果控制摄像机(向其发送数据包)并接收数据包中的图像数据的应用程序必须以root权限运行,则可以接受。

#2:哪个更快:

代码语言:javascript
复制
A: linux sockets with AF_PACKET protocol
B: libpcap application

速度至关重要,因为数据包到达时间隔很小,因为每个数据包都包含我自己无损压缩格式的一个水平像素行(除非我能找到一种更好的算法,也可以在FPGA中以实时速度实现)。在帧之间将存在暂停,但是在1200或更多水平行(以太网帧分组)之后。

因为应用程序是机器人的,所以每个水平行都会被立即解压缩并存储在一个简单的RGBA像素压缩数组中,就像OpenGL接受的纹理一样。因此,机器人软件可以在图像逐行到达时立即检查每个图像,并可能以最快的速度做出非人类的反应。

每行中第一个RGBA像素的数据紧跟在前一行中的最后一个RGBA像素之后,因此,在最后一个水平像素行的末尾,图像完成并准备好传输到GPU和/或保存到磁盘。每个水平行将是16像素的倍数,因此不需要“填充”。

注:相机必须直接插入RJ45插孔,而不能在相机和PC之间插入路由器或其他设备。

EN

回答 1

Stack Overflow用户

发布于 2013-09-26 07:33:36

我认为您必须更改您的以太网帧格式,以使用源和目标MACs之后的前两个字节作为类型,而不是长度。旧式长度必须小于1536,任何大于1536的长度都将被视为IEEE类型字段。如果您想要6K或更大的容量,接收以太网芯片/ Linux数据包处理程序可能会丢弃您的帧,因为它们的格式不正确。

至于性能,金科玉律是衡量,不要猜测。选择最容易编程的一个,然后尝试。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18973041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档