【原创】EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统移植指南

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: EtherCAT主站方案对比:商业的如Acontis、TwinCAT3和开源的igh、SOEM。SOEM易移植但功能和实时性不足,适合简单应用;igh功能强大,实时性能优秀,基于内核态,适合复杂场景。igh能移植到其他RTOS,但需克服多任务无调度的挑战。依赖操作系统服务如定时器、内存分配,适合Linux内核,但移植到裸机复杂。

前言

目前,EtherCAT商用主站有:Acontis、TwinCAT3、KPA、Codesys等,开源EtherCAT主站则主要有两大方案:igh与SOEM,两者设计天差地别,SOEM开源于2008年底1.1.2版本,具备良好的可移植性,能够轻松适配各类操作系统乃至裸机环境,然而,在功能丰富度与实时性能表现上(除裸机外)远不如IgH,应用层面想要应对复杂的EtherCAT应用场景会非常困难,SOEM的协议栈运作依托于应用层接口的驱动,其内部并无独立任务(线程)。

相比之下,IgH诞生较早,IgH功能全面,同时注重实时性能,为了在linux上获得良好的实时性能和低CPU利用率,同时方便多主站使用时进程间隔离等原因,IgH设计之初就基于linux内核态,今天看来可移植性较差;

igh的高实时性能得益于linux内核态可直接操作网卡收发,功能全面得益于其内部采用的多任务状态机架构,这些任务驱动机制通过系统调用向用户空间的EtherCAT应用提供服务,极大简化了应用层面的接口交互,使得EtherCAT应用操作接口变得极为简单。

那么IgH能移植到linux用户态,或者其他zephyr、freertos、rtems、rtthread等RTOS吗?答案是当然能。

IgH整体框架及运行原理本详见博客文章 【原创】EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文

那么IgH能移植到裸机吗?理论上可以,但比较麻烦,但是IgH整体设计就是多任务的,关键点是没有任务调度,几个状态机如何驱动?不考虑权衡投入产出、可复用性,你可以自行尝试。

IgH依赖操作系统服务

IgH虽然运行在linux内核态,但并不与Linux内核的耦合,整个协议栈只用到了linux的基本服务。

操作系统服务 描述
任务(线程)调度 每个主站,内部状态机运行需要2个任务,EoE 1个(可选)、应用层周期任务
睡眠(定时服务) 任务睡眠,让出CPU;应用层通信周期控制,如果RTOS没有高精度定时接口,可启一个硬件timer回调更加精确。
读取时间戳 EtherCAT子报文对象维护需要收发时间戳
动态内存分配 master、slave、datagram、eoe、eeprom等对象需要动态内存分配
event(非必须) 应用调用主站服务时阻塞到事件等待,主站完成服务后通过事件唤醒应用
Semaphore/mutex 同步互斥
TCP/IP网络协议栈 主站已支持二层网络包转发,若设备本身需要TCP/IP网络远程调试工具需要TCP支持;可选实现主站EOE

关于RTOS 的高精度定时器详见博客文章不同RTOS中POSIX接口的实现差异 ,相关章节。

其他适配

其他一些数据结构以及网络接口相关:

  • 网卡驱动,主要实现轮询式无中断方式的二层网络包收发接口,原Linux ethernet设备的抽象及skb的替代实现;
  • EtherCAT主站初始化流程调整;
  • 链表、打印输出;
  • Linux相关特性删减修改:GNU C、unlikely、likely、prefetch,编译器特性等。
相关文章
|
9天前
|
安全 Linux 应用服务中间件
Linux命令show-installed的深入解析
`show-installed`是Linux中一个假设的命令,模拟显示已安装软件包的功能。它结合了`apt`、`yum`等包管理器的特性,提供跨发行版的兼容性,展示包的名称、版本、安装时间和来源。可用参数如`-n`过滤名称,`-v`显示版本,`-s`显示来源,`-t`显示时间。注意需root权限运行,大系统中可能影响性能。最佳实践包括定期审查、使用过滤、结合其他命令和备份数据。
|
4天前
|
存储 监控 Linux
stdbuf命令在Linux中的深度解析
`stdbuf`是Linux工具,用于控制命令的stdin、stdout和stderr的缓冲模式。它可以设置为无缓冲、行缓冲或块缓冲,以优化数据处理和实时性。例如,`stdbuf -o0 cmd`禁用cmd的输出缓冲,`-oL`则按行缓冲。在需要实时监控或高效处理大量数据时,选择合适的缓冲模式至关重要。注意,过度使用无缓冲可能影响性能,并非所有系统都支持`stdbuf`。
|
4天前
|
监控 安全 Linux
Linux命令ssltap的深入解析与应用实践
`ssltap`是一个假想的Linux命令,用于模拟SSL/TLS流量分析。它捕获、解密(如果有密钥)并分析加密流量,提供实时监控、协议解析和安全审计。特点包括实时性、灵活性、可扩展性和安全性。示例用法包括捕获特定端口流量和实时监控会话状态。在实际操作中应注意私钥安全、性能影响及合规性,建议定期审计和自动化监控。
|
5天前
|
物联网 云计算
操作系统中的内存管理技术解析
【7月更文挑战第13天】本文将深入探讨操作系统中至关重要的内存管理技术,包括虚拟内存、分页和分段机制等核心概念。我们将从内存管理的基本原理出发,逐步过渡到高级技术如交换空间和文件映射,最后讨论现代操作系统中内存管理面临的挑战与未来发展方向。文章旨在为读者提供对操作系统内存管理全面而深入的理解。
24 7
|
8天前
|
安全 算法 Linux
Linux命令signver的深入解析
`signver`非Linux标准命令,常用于APK签名版本指定,确保安全性和市场兼容性。在加固工具配置中,如`NHPProtect.jar`,它可能作为参数 `-signver` 使用,允许指定(v1, v2, v3)等签名版本。正确配置保证通过验证,增强用户数据安全。注意兼容性、正确填写配置并定期更新加固工具。测试和遵循最佳安全实践同样关键。
|
7天前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
68 1
|
7天前
|
缓存 监控 关系型数据库
深入理解Linux操作系统的内存管理机制
【7月更文挑战第11天】在数字时代的浪潮中,Linux操作系统凭借其强大的功能和灵活性,成为了服务器、云计算以及嵌入式系统等领域的首选平台。内存管理作为操作系统的核心组成部分,对于系统的性能和稳定性有着至关重要的影响。本文将深入探讨Linux内存管理的基本原理、关键技术以及性能优化策略,旨在为读者提供一个全面而深入的理解视角,帮助开发者和系统管理员更好地优化和管理Linux系统。
|
8天前
|
Unix Linux C++
Linux命令size的深入解析
`size`命令在Linux中用于查看目标文件的内存布局,显示代码、数据和BSS段的大小,助力程序优化和资源管理。支持多种输出格式、基数和与其他命令结合使用进行递归分析。常用参数包括设置格式(-A)、基数(-m)、人类可读(-h)和总计(-t)。通过示例展示了如何查看单个或多个文件的大小,并与`find`结合遍历目录。使用时注意文件访问权限和选择合适的输出选项。
|
8天前
|
人工智能 运维 自然语言处理
当Linux遇上AI:探索操作系统中的智能新纪元
阿里云的OS Copilot是专为Linux打造的智能助手,利用大模型提供自然语言交互、命令辅助及运维优化。它简化编程任务,生成脚本框架,提供代码审查建议,适合开发者和运维人员。
149 0
当Linux遇上AI:探索操作系统中的智能新纪元
|
10天前
|
存储 数据管理 Linux
Linux命令sg的深入解析与应用
**Linux的`sg`命令用于高效管理SCSI设备,它基于DMA和Scatter-Gather技术,提供直接设备控制和高效数据传输。`sg`常通过`sg3_utils`工具集来使用,例如`sg_io`,用于执行SCSI命令。在实际应用中,需注意权限、数据安全和兼容性问题,遵循备份、详细阅读文档和逐步测试的最佳实践。**