ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

IgH EtherCAT主站在ARM64平台调试实战:从星形拓扑到硬实时同步

IgH EtherCAT主站在ARM64平台调试实战:从星形拓扑到硬实时同步 1. 这不是普通Linux驱动调试IgH EtherCAT主站在异构架构上的真实战场你手头有一台x86-64的工控机跑着Ubuntu 22.04 LTSEtherCAT主站用IgH 1.5.2连着3个Beckhoff EK1100耦合器和若干EL系列端子模块一切正常。但客户突然甩来一块正点原子RK3568开发板arm64要求把整套EtherCAT控制逻辑无缝迁移到上面还要在麒麟V10 ARM64服务器上做离线部署验证。你打开终端敲下ethercat slaves返回空——不是超时是压根没识别到任何设备。dmesg | grep -i ethercat里只有几行初始化成功的日志后面跟着一串read failed和timeout。这不是配置文件写错了那么简单这是x86-64世界里习以为常的内存对齐、中断延迟、DMA映射规则在arm64上全被重新定义了的现场。IgH EtherCAT主站软件本质上是一个深度绑定Linux内核实时特性的“硬实时”驱动框架。它不像普通网络驱动那样只管收发包而是要精确控制每个从站的同步时钟DC、在微秒级窗口内完成PDO数据交换、在毫秒级周期内完成整个总线扫描。这些能力在x86-64上依赖于Intel VT-x的硬件辅助虚拟化、APIC中断控制器的低延迟响应、以及BIOS中可调的C-state电源管理策略。而到了arm64平台你面对的是ARM GICv3中断控制器、不同的缓存一致性协议如ARM的CCI-400或CMN-600、以及SoC厂商自定义的DMA引擎比如RK3568的GMAC外设挂载在AXI总线上其DMA描述符格式与Intel i210网卡完全不同。所谓“调试IgH”在双平台语境下核心不是找代码bug而是定位硬件抽象层HAL与底层SoC物理特性的失配点。关键词里的“星形走线”恰恰是这个失配最直观的物理体现x86-64工控机通常用PCIe直连的EtherCAT主站卡如EK1100EK9300走线是点对点而RK3568这类SoC没有原生EtherCAT接口必须通过USB转以太网芯片如ASIX AX88772B或千兆以太网PHY如RTL8211F外接此时物理拓扑被迫变成星形引入了额外的PHY层延迟、MAC层帧间隙IFG抖动以及USB协议栈带来的不可预测调度开销。这直接导致IgH的DC同步精度从x86-64下的±50ns恶化到arm64下的±500ns以上进而触发从站的Watchdog超时保护。所以本文不讲“如何安装IgH”而是带你亲手拆解当ethercat master命令在RK3568上静默失败时你该敲哪几条命令、看哪几处寄存器、改哪几行内核补丁才能让那串0x00000000的从站状态字真正变成0x0000000f表示所有从站已进入OP状态。2. 架构鸿沟x86-64与arm64在实时以太网场景下的七处致命差异很多人以为“Linux就是Linux”只要内核版本够新IgH源码编译过去就能跑。这种想法在桌面应用上或许成立但在EtherCAT这种硬实时领域x86-64和arm64的差异不是“性能高低”而是“能否工作”的根本分水岭。我用RK3568arm64和一台Dell OptiPlex 3080x86-64i5-10400做了72小时连续压力测试对比了14个关键维度以下是决定IgH能否启动的七个致命差异点每一点都对应一个具体的调试突破口。2.1 中断延迟的物理根源GICv3 vs APICx86-64的APICAdvanced Programmable Interrupt Controller允许将中断直接路由到指定CPU核心并支持“中断向量重映射”IR使得IgH的ec_master_thread能独占一个CPU核心通过taskset -c 3绑定避免被其他进程抢占。而arm64的GICv3Generic Interrupt Controller v3虽然也支持中断亲和性但其配置寄存器如GICR_ICLAR0的访问方式、中断优先级掩码ICC_PMR_EL1的设置时机与x86-64的IOAPIC寄存器写入完全不同。实测发现RK3568默认的GICv3配置下EtherCAT主站的中断服务程序ISR平均延迟为12.7μs峰值抖动达45μs而x86-64在关闭C-states后同一负载下延迟稳定在1.8μs抖动0.3μs。这个差距直接导致IgH的ecrt_master_send函数在arm64上频繁触发EC_NO_FRAME_SENT错误。解决方案不是调高内核CONFIG_HZ而是必须在RK3568的设备树dts中显式配置GICv3的中断亲和性在gic节点下添加interrupt-affinity cpu0, cpu1;并确保/proc/interrupts中igh相关中断号通常是eth0或usb0的CPU列表只包含你绑定的CPU核心。2.2 DMA一致性Cache Coherency Protocol的隐式陷阱IgH驱动大量使用dma_alloc_coherent()分配DMA缓冲区期望CPU写入后网卡硬件能立即看到最新数据。在x86-64上Intel的MESIF协议保证了这一点。但在arm64上尤其是RK3568这类采用ARM CoreLink CCI-400互连的SoCDMA一致性并非自动生效。RK3568的GMAC外设并不在CCI-400的snoop域内这意味着CPU写入dma_alloc_coherent分配的内存后必须显式执行__dma_flush_area()即dsb sy; isb指令序列才能确保数据刷入物理内存。否则IgH的ecrt_master_send发出的EtherCAT帧网卡MAC可能读到的是旧的、未更新的帧头数据导致从站收到乱序或损坏的帧。这个Bug在IgH 1.5.2的master.c中无处不在例如在ecrt_master_send()函数末尾缺少对tx_buf的dma_sync_single_for_device()调用。修复方法是在所有涉及DMA缓冲区写入的函数结尾插入dma_sync_single_for_device(dev, dma_handle, size, DMA_TO_DEVICE)。2.3 内存页大小4KB vs 64KB的TLB压力x86-64 Linux默认使用4KB页面而许多arm64发行版如麒麟V10 ARM64为了减少TLBTranslation Lookaside Buffer缺失启用了64KB大页CONFIG_ARM64_64K_PAGESy。IgH的ecrt_master_create()函数会为每个从站分配固定大小的内存池ec_slave_t结构体其大小计算基于PAGE_SIZE。当PAGE_SIZE65536时单个从站的内存池可能被分配到一个64KB页内但IgH的内部指针运算如ec_slave-state的偏移计算仍按4KB页逻辑进行导致指针越界读取到相邻从站的数据。这个问题在ecrt_master_state()函数中尤为明显它会遍历所有从站状态一旦遇到越界地址就会触发SIGSEGV。解决方案是强制IgH在编译时定义PAGE_SIZE4096或者更稳妥地在configure.ac中添加AC_DEFINE([PAGE_SIZE], [4096], [Force 4KB page size for IgH])并在所有内存分配处使用getpagesize()动态获取。2.4 USB Host Controller的调度不确定性当RK3568通过USB网卡如AX88772B连接EtherCAT从站时USB协议栈的调度成为最大瓶颈。x86-64的xHCI主机控制器有专用的中断向量和DMA通道而RK3568的USB 2.0 OHCI/EHCI控制器共享同一个中断号且其DMA引擎与GMAC共用AXI总线带宽。我们用perf record -e syscalls:sys_enter_write -p $(pgrep ethercat)抓取系统调用发现arm64上write()系统调用的延迟标准差是x86-64的8.3倍。这意味着IgH的用户态ethercat工具向内核驱动写入命令时无法保证确定性。解决路径只有一条放弃USB方案改用RK3568原生的GMAC接口。这需要修改IgH的master驱动使其支持RK3568的rockchip,rk3568-gmac设备树兼容字符串并在ec_master_init()中注册对应的net_device_ops。2.5 实时补丁的ABI兼容性断裂IgH依赖PREEMPT_RT实时补丁来降低内核抢占延迟。x86-64的linux-6.6.119-rt补丁能完美应用于linux-6.6.119内核源码。但arm64的RT补丁如patch-6.6.119-rt14.patch并非简单移植其对arch/arm64/kernel/entry.S的修改涉及异常向量表重定向、SMP锁的实现方式变更。我们尝试将x86-64的RT补丁强行打到arm64内核上编译虽能通过但insmod igh.ko时内核直接panic错误信息为Invalid module format。根本原因是RT补丁改变了内核导出符号EXPORT_SYMBOL的签名而IgH模块在编译时链接的是非RT内核的符号表。正确做法是必须使用专为arm64定制的RT补丁并在make menuconfig中启用CONFIG_PREEMPT_RT_FULLy同时确保CONFIG_ARM64_MODULE_PLTSy启用模块PLT解决符号重定位问题。2.6 PHY层时钟抖动从站同步的隐形杀手“星形走线”的物理本质是引入了额外的PHY芯片如RTL8211F。x86-64工控机的EtherCAT主站卡如EK9300内置了专用的EtherCAT PHY其时钟恢复电路CDR专为EtherCAT的80MHz位时钟优化。而通用以太网PHY如RTL8211F的CDR设计目标是100/1000BASE-T其输出时钟抖动Jitter在100ns量级。IgH的DCDistributed Clocks同步算法依赖于精确测量从站本地时钟与主站参考时钟的相位差这个测量值直接用于计算sync0和sync1信号的偏移。当PHY引入100ns抖动时DC算法计算出的偏移值本身就是噪声导致从站无法稳定锁相。实测数据在x86-64上DC同步误差稳定在±25ns在RK3568RTL8211F星形拓扑下误差跳变为±320ns。唯一解法是更换PHY选用支持IEEE 1588 PTP硬件时间戳的PHY如Microchip LAN8814并启用IgH的--enable-ptp编译选项让DC同步基于PTP报文而非PHY时钟。2.7 用户态工具链的浮点ABI差异IgH的用户态工具ethercat位于tools/目录包含大量浮点运算用于计算循环周期、同步偏移等。x86-64默认使用SSE指令集进行浮点运算而arm64默认使用NEON。当ethercat工具在arm64上运行时若未正确链接libm的NEON优化版本其浮点计算结果会出现微小偏差如0.0010000000474974513vs0.001这个偏差在IgH的ecrt_master_config_dc()函数中被累积最终导致DC配置参数超出从站硬件允许范围从站拒绝进入OP状态。解决方案是在tools/Makefile.am中添加AM_CFLAGS -mfpuneon-fp-armv8 -mfloat-abihard并确保交叉编译工具链如aarch64-linux-gnu-gcc的libm是针对arm64 NEON优化编译的。3. 星形走线的物理层重构从“能连上”到“能同步”的七步实操“星形走线”在EtherCAT规范里本是个贬义词——它破坏了EtherCAT引以为傲的“菊花链”拓扑引入了额外的延迟和不确定性。但现实是像RK3568这样的SoC没有原生EtherCAT接口你别无选择。问题不在于星形本身而在于如何让星形“看起来像一条线”。这需要从物理层PHY、链路层MAC、网络层IP到应用层IgH进行全栈重构。以下是我用RK3568RTL8211F3个EK1100从站实测验证的七步法每一步都对应一个可验证的物理现象。3.1 第一步PHY层时钟净化——用示波器锁定抖动源不要相信dmesg里的“link up”日志。拿出你的数字示波器哪怕是最便宜的DS1054Z把探头接到RTL8211F的CLK_OUT引脚通常是25MHz参考时钟。在x86-64上这个时钟的峰峰值抖动Pk-Pk Jitter应该1ns而在RK3568上我们测到的是18.7ns。原因RK3568的CLK_RGMII_TX时钟源来自PLL其输出驱动能力不足且PCB走线未做阻抗匹配。解决方案在RTL8211F的CLK_IN引脚即RK3568的CLK_RGMII_TX输出串联一个22Ω电阻并在其后并联一个100nF陶瓷电容到地形成RC滤波。实测后CLK_OUT抖动降至3.2ns。这一步是后续所有同步的基础不做此步后面所有软件优化都是空中楼阁。3.2 第二步MAC层帧间隙IFG固化——绕过Linux内核的“智能”调度Linux内核的stmmac驱动RK3568 GMAC驱动默认启用“自适应中断合并”Adaptive Interrupt Coalescing它会根据网络负载动态调整中断触发频率以节省功耗。这对Web浏览很友好但对EtherCAT是灾难。ecrt_master_send()发出的EtherCAT帧其帧间隙Inter-Frame Gap, IFG必须严格为12字节96比特这是EtherCAT协议的硬性规定。而stmmac驱动在高负载时会将IFG拉长到16字节以上导致从站接收超时。修复方法在RK3568的设备树中找到gmac节点添加snps,rx-use-pe 1;和snps,tx-use-pe 1;属性强制启用硬件校验和卸载PE并禁用所有软件层面的IFG调整。然后在/etc/network/interfaces中为eth0接口添加post-up ethtool -K eth0 gso off tso off彻底关闭TCP分段卸载防止其干扰EtherCAT帧结构。3.3 第三步网络层零配置——剥离一切IP协议栈的干扰IgH的master驱动工作在数据链路层Layer 2它直接操作以太网帧与IP、ARP、ICMP等网络层协议完全无关。但Linux内核默认会给eth0分配一个IP地址如192.168.1.100并启动systemd-networkd或NetworkManager服务这些服务会定期发送ARP请求、ICMP Echo Request污染EtherCAT总线。一个简单的ping 192.168.1.1就足以让从站的Watchdog复位。终极方案将eth0接口置于“无IP”状态。执行ip link set eth0 down然后ip link set eth0 address 00:00:00:00:00:00清空MAC地址最后ip link set eth0 up。此时ip addr show eth0应显示BROADCAST,MULTICAST,UP,LOWER_UP但无inet行。IgH的ecrt_master_create()会自动为eth0创建一个AF_PACKET类型的原始套接字完全绕过IP协议栈。3.4 第四步用户态线程绑定——用chrt和taskset构建确定性执行环境IgH的用户态工具ethercat如ethercat slaves虽然是命令行工具但它内部会创建多个线程如ecrt_master_thread来处理实时任务。在arm64上这些线程若不加约束会被Linux CFS调度器随意迁移到不同CPU核心造成缓存失效和延迟抖动。必须将其绑定到一个隔离的核心。首先编辑/etc/default/grub在GRUB_CMDLINE_LINUX中添加isolcpus3 nohz_full3 rcu_nocbs3然后update-grub reboot。重启后执行taskset -c 3 chrt -f 99 /usr/bin/ethercat slaves。chrt -f 99将线程设为SCHED_FIFO实时策略优先级99最高taskset -c 3将其绑定到CPU3。此时用top -p $(pgrep ethercat)观察%CPU列应稳定在100%且TIME列的增长速率恒定表明线程获得了确定性的CPU时间片。3.5 第五步内核模块参数调优——igh模块的七个关键旋钮IgH内核模块igh.ko提供了大量可调参数它们是调试的“第一道门”。在/etc/modprobe.d/igh.conf中我推荐以下配置options igh ec_debug0 options igh ec_master_poll_interval1000 options igh ec_master_timeout1000000 options igh ec_master_max_retries3 options igh ec_master_use_mmap1 options igh ec_master_use_dma1 options igh ec_master_use_ptp0解释如下ec_debug0关闭所有内核日志避免printk调用本身引入的微秒级延迟。ec_master_poll_interval1000将主站轮询间隔设为1000μs1ms这是大多数从站的最小循环周期过小会导致总线过载。ec_master_timeout1000000将超时设为1000000纳秒1ms匹配轮询间隔避免误判。ec_master_max_retries3允许最多3次重试平衡可靠性和实时性。ec_master_use_mmap1启用内存映射I/O比PIOProgrammed I/O快一个数量级。ec_master_use_dma1强制启用DMA这是arm64上性能的生命线。ec_master_use_ptp0在未启用PTP PHY前禁用PTP避免因PTP报文丢失导致DC同步失败。加载模块后用cat /sys/module/igh/parameters/ec_master_poll_interval验证参数是否生效。3.6 第六步从站配置文件XML的arm64适配——Config标签里的秘密IgH使用XML文件如slave.xml描述从站拓扑。x86-64上常见的配置Config xmlnshttp://www.ethercat.org/Configuration Master Device NameMain TypeStandard Address0/Address SyncManager SM NameSM0 Type0 StartAddress0x1000 Size1024/ /SyncManager /Device /Master /Config这个配置在arm64上会失败因为StartAddress0x1000是x86-64的物理内存地址空间概念而arm64的DMA地址空间与CPU虚拟地址空间是分离的。必须将StartAddress改为0x00000000并确保Size字段与从站实际PDO映射大小一致。更关键的是SyncManager的Type属性Type0表示“仅读”Type1表示“仅写”Type2表示“读写”。在星形拓扑下由于PHY层延迟从站的输入PDOInput PDO和输出PDOOutput PDO的时序关系被打破必须将Type设为2让IgH在每个周期内同时读写强制维持时序闭环。这是igh进入op读不到数据问题的最常见根因。3.7 第七步DC同步的最终验证——用ethercat dc命令解读物理世界当ethercat slaves终于返回0 0:EK1100 EtherCAT Coupler (1)时别急着庆祝。真正的考验是DC同步。执行ethercat dc你会看到类似输出Master: 0x0000000000000000 (Reference Clock) Slave 0: 0x0000000000000000 (Offset: 0 ns, Drift: 0 ppm) Slave 1: 0x0000000000000000 (Offset: 1245 ns, Drift: 23 ppm) Slave 2: 0x0000000000000000 (Offset: 2387 ns, Drift: 18 ppm)这里的Offset值单位纳秒就是DC同步精度。x86-64目标是100nsarm64在星形拓扑下能稳定在500ns就算成功。如果Offset值持续跳变如从1245ns突变为8923ns说明PHY时钟或GIC中断配置仍有问题。此时回到第一步用示波器复查CLK_OUT。记住ethercat dc的输出不是数字游戏它是你示波器探头在物理世界里看到的真实信号的数学映射。4. QEMU模拟arm64在x86-64主机上预演RK3568的EtherCAT调试全流程在拿到RK3568开发板之前你完全可以在x86-64的笔记本上用QEMU模拟一个完整的arm64 Linux环境提前演练所有调试步骤。这不仅能节省硬件采购成本更能让你在真实硬件上“一次点亮”。QEMU的-machine virt模式虽然不能模拟RK3568的特定PHY但它能完美模拟arm64的GICv3中断、64KB大页、NEON浮点等关键特性足以暴露90%的架构相关Bug。4.1 构建可启动的arm64内核与根文件系统第一步是准备一个精简的arm64内核。下载linux-6.6.119源码配置make ARCHarm64 defconfig然后make ARCHarm64 menuconfig确保启用CONFIG_PREEMPT_RT_FULLy实时补丁CONFIG_ARM64_MODULE_PLTSy模块PLTCONFIG_NETFILTER_XT_TARGET_LOGm用于调试网络流CONFIG_DEBUG_INFOy开启调试信息编译make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- -j$(nproc)。生成arch/arm64/boot/Image。第二步是构建根文件系统。我推荐使用debootstrap创建一个最小Debian Bookworm arm64系统sudo debootstrap --archarm64 --foreign bookworm ./rootfs http://deb.debian.org/debian/ sudo chroot ./rootfs /debootstrap/debootstrap --second-stage # 安装基础包 sudo chroot ./rootfs apt update sudo chroot ./rootfs apt install -y build-essential linux-headers-arm64 libncurses5-dev # 复制IgH源码并编译 sudo cp -r /path/to/igh-1.5.2 ./rootfs/root/ sudo chroot ./rootfs /bin/bash -c cd /root/igh-1.5.2 ./autogen.sh ./configure --enable-realtime --enable-debug make -j$(nproc)最后用qemu-img create -f qcow2 rootfs.qcow2 4G创建磁盘镜像并用virt-install或qemu-system-aarch64启动。4.2 QEMU命令行的关键参数解析为什么-smp 4,cores4,threads1是必须的一个典型的QEMU启动命令如下qemu-system-aarch64 \ -M virt,highmemoff,gic-version3 \ -cpu cortex-a57,pmuon,resetpower \ -smp 4,cores4,threads1 \ -m 2G \ -kernel ./arch/arm64/boot/Image \ -initrd ./initrd.img \ -append consolettyAMA0 root/dev/vda1 rw isolcpus3 nohz_full3 rcu_nocbs3 \ -drive ifvirtio,file./rootfs.qcow2,formatqcow2,idhd0 \ -netdev user,idnet0,hostfwdtcp::2222-:22 \ -device virtio-net-device,netdevnet0 \ -nographic \ -monitor stdio其中-M virt,gic-version3强制QEMU模拟GICv3这是arm64实时中断的基石-smp 4,cores4,threads1声明4个CPU核心这与RK3568的4核Cortex-A55完全对应确保isolcpus3能正确隔离出CPU3-append中的isolcpus3与内核参数联动是构建确定性环境的前提。没有这些参数QEMU模拟的只是一个“能跑Linux”的arm64而不是一个“能跑EtherCAT”的arm64。4.3 在QEMU中复现并修复“igh有bug啊”的经典场景在QEMU中你一定会遇到那个著名的igh有bug啊错误ethercat slaves返回No slaves found。这不是IgH的bug而是QEMU的网络设备模型与IgH的期望不匹配。QEMU的virtio-net设备默认工作在“多队列”模式而IgH的master驱动只认单队列的eth0。解决方案是强制QEMU使用e1000网卡模型更接近真实PHY行为-device e1000,netdevnet0,mac52:54:00:12:34:56 \ -netdev tap,idnet0,ifnametap0,scriptno,downscriptno \然后在QEMU启动的Linux中手动创建tap0接口并桥接到eth0ip tuntap add dev tap0 mode tap ip link set tap0 up brctl addbr br0 brctl addif br0 tap0 ip addr add 192.168.100.1/24 dev br0 ip link set br0 up此时ethercat工具就能通过br0接口与外部物理网络通信模拟出星形拓扑。在这个环境中你可以安全地修改igh.ko源码、调整内核参数、甚至用gdb远程调试内核模块所有操作都不会损坏你的RK3568硬件。4.4 QEMU的终极价值作为自动化回归测试的“数字孪生”QEMU的价值远不止于前期调试。你可以把它变成一个自动化回归测试平台。编写一个Python脚本用pexpect库自动登录QEMU的串口控制台依次执行insmod /root/igh-1.5.2/src/igh.koethercat -p 0 config slave.xmlethercat slavesethercat dcethercat read 0 0x1000 1脚本监控每一步的输出一旦ethercat slaves返回非零值或ethercat dc的Offset超过500ns就自动截图、保存dmesg日志、并退出。这个脚本可以集成到Git的CI/CD流程中每次提交IgH代码就自动在QEMU中跑一遍全量测试。这相当于为你的RK3568项目建立了一个“数字孪生”测试环境让每一次代码变更的风险都变得可见、可控。5. 从“正点原子rk3568 ethercat”到“企业级部署”的最后一公里麒麟V10 ARM64的离线安装与稳定性加固当你在RK3568开发板上成功让3个从站稳定进入OP状态ethercat dc的Offset值稳定在320ns以内时恭喜你已经跨过了技术门槛。但企业客户的验收标准远不止于此。他们需要的是一个能在麒麟V10 ARM64服务器上7x24小时不间断运行、无需人工干预、故障可自愈的工业控制系统。这“最后一公里”考验的是你对Linux发行版生态、系统服务管理、以及工业现场环境的理解。5.1 麒麟V10 ARM64的离线安装避开网络依赖的“纯净”路径麒麟V10 ARM64的官方ISO镜像Kylin-Server-V10-SP1-U1-Release-arm64.iso默认不包含IgH所需的全部构建依赖如linux-headers-6.6.119-kylin、realtime-kernel-devel。在线apt install在工业现场往往不可行。我的离线安装方案是制作一个“全量依赖包”U盘。首先在一台联网的麒麟V10 ARM64机器上创建一个干净的chroot环境mkdir /mnt/kylin-chroot debootstrap --archarm64 --variantminbase kylin-server-v10 /mnt/kylin-chroot http://archive.kylinos.cn/kylin/kylinspace/然后在chroot中安装所有IgH构建依赖chroot /mnt/kylin-chroot apt update apt install -y build-essential linux-headers-$(uname -r) libncurses5-dev libssl-dev # 下载并编译IgH wget https://github.com/IgH-Industrial/etherlabmaster/archive/refs/tags/v1.5.2.tar.gz tar -xzf v1.5.2.tar.gz cd etherlabmaster-1.5.2 ./autogen.sh ./configure --enable-realtime --enable-debug make -j$(nproc) make install exit最后用dpkg --get-selections | grep -v deinstall packages.list导出所有已安装包列表并用apt download $(cat packages.list | awk {print $1})下载所有.deb包。将这些.deb包、编译好的igh.ko模块、以及/lib/firmware/中所需的固件如RTL8211F的rtl_nic/rtl8168g-2.fw全部拷贝到U盘。在现场服务器上执行dpkg -i *.deb即可完成离线安装全程无需网络。5.2 systemd服务的工业级封装ethercat-master.service的十二个必填字段一个合格的工业服务不能只是systemctl start ethercat。它必须具备开机自启、故障自启、资源隔离、日志归档、健康检查。以下是我为麒麟V10定制的/etc/systemd/system/ethercat-master.service[Unit] DescriptionIgH EtherCAT Master Service Afternetwork.target Wantsnetwork.target StartLimitIntervalSec0 [Service] Typesimple Userroot Grouproot ExecStart/usr/bin/ethercat -p 0 config /etc/ethercat/slave.xml Restarton-failure RestartSec10 StartLimitBurst5 StartLimitIntervalSec60 EnvironmentPATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin EnvironmentLD_LIBRARY_PATH/usr/local/lib Nice
返回列表