linux - ethercat 模块的以太网驱动程序

标签 linux network-programming linux-kernel linux-device-driver

我有基于网络设备的EK1101、EL6002、EL2034模块。这些模块通过以太网电缆连接PC以太网端口。我已经用一些应用程序测试了这些模块,它在我的电脑上运行良好。

EK1101 作为耦合器工作。它连接PC以太网端口和其他从属模块(EL6002,EL2034,..)

EL6002作为RS232通讯方式工作。 EL2034用作数字I/O。同样,我们有 10 多种不同的设备。这些模块同时与EK1101耦合器连接。

如何实现 Linux 驱动程序?并启动?我是否修改现有的网络驱动程序或从头开始启动新的驱动程序?我需要编写什么类型的驱动程序,字符驱动程序还是网络驱动程序?如果是字符驱动,我如何通过以太网端口传输数据?

最佳答案

使用串行切片 (EL6002),每个端口每次交换只能发送 22 个字节(每个方向)。在以 1kHz 的全串行带宽 (115k) 更新时,您将不会错过更新,而不会导致发射器饥饿和/或接收器上的数据丢失。如果这是一个问题,您可能需要声明对用于控制 EtherCAT 环路的以太网端口的独占控制权。这需要某种形式的根权限,否则有人总是可以尝试通过端口发送数据包,从而影响您的计时。您没有提供有关您的应用程序或时间要求的详细信息,因此也许这对您来说并不重要。

我一直在使用 Etherlab IgH 开源堆栈,它需要 root 权限才能加载实现底层堆栈的内核模块。完成后,您可以将其他所有内容设置为从用户空间运行,无需 root 权限。

一旦您的应用程序获得了对主堆栈的访问权限,您就可以设置一个数据交换域(TwinCat 称之为任务),并且您将拥有一个可用于监视 EtherCAT 帧数据的共享内存区域。您的应用程序负责决定何时发送和接收域更新。

关于linux - ethercat 模块的以太网驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15991403/

相关文章:

linux - 你如何版本你的家?我想要一些关于 subrepos 的信息

c - 使用库函数存储值时结构中的变量损坏

带有 GCDWebServer 的 iOS 重新路由请求(不重定向)

vbscript - 使用 WMI 确定哪些适配器连接到互联网

java - 如何实现 FTP/HTTP 客户端带宽限制?

c - Linux内核-task_h_load

linux-kernel - Linux内核中阻止进程的输入

linux - Linux操作系统上Flash中的多点触控架构

linux - 内核级系统调用fork、vfork的重要性

linux - 如何在GCC 4.6.3版本中强制内联函数?