初探ethercat IGH协议栈(交叉编译)

说明,

1)不要着急编译,建议读完全文,再参照编译;

2)IGH编译是需要Linux内核源码的,还有打rt补丁;

3)依赖的内核版本最好是目标设备的一样;

4)内核版本不要太低,也不要太高,否则可能出现网卡不支持的情况;

5)本文使用的IGH源码版本是1.6.0;

6)初次写本文时,用的是6.4内核,因为igb驱动的原因,没有继续往下进行,后降低内核版本到6.1走通了整个流程,所以重新整理该文档。

一、以下操作在宿主机执行

1,下载、切换分支、生成configure

# git clone https://gitlab.com/etherlab.org/ethercat.git
# cd ethercat
# git checkout stable-1.6
# autoreconf -i

2,编译、安装

# mkdir etherlab
说明:
1)--with-linux-dir= 内核源码路径
2)因为我的网卡要igb的驱动,所以要支持一下igb:  --enable-igb=yes
# sudo ./configure  --prefix=/home/igh/ethercat/etherlab \
--with-linux-dir=/home/debian12/x86/kernel/6.1.0/linux-6.1/ \
--enable-8139too=no --enable-wildcards=yes  --enable-igb=yes

# sudo make 
# sudo make all modules
# sudo make install

3,拷贝两个模块到etherlab文件,然后打包

ec_master.ko 在ethercat/mater下面,
ec_generic.ko 在ethercat/devices下面

编译结束,实际上还有一个ec_igb.ko,不知道做什么的,有知道的可以留言,谢谢,如果都安装,会报如下错误

二、以下操作在目标机执行

4,部署环境,将上一步生成的ethercat解压到目标设备

# cd etherlab
# cp ec_master.ko /lib/modules/6.1.0-rt5/
# cp ec_generic.ko /lib/modules/6.1.0-rt5/
# depmod -a
 
# cp etc/init.d/ethercat /etc/init.d/
# cp bin/ethercat /bin/

# mkdir /etc/sysconfig -p
# cp etc/sysconfig/ethercat /etc/sysconfig/
# echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules
 
# modprobe ec_master main_devices=90:E4:68:02:01:54
说明:main_devices改成你具体的MAC地址
# insmod /lib/modules/6.1.0-rt5/ec_generic.ko

5,根据自己的实际情况做修改

1)配置路径
# vim etc/ethercat.config
ETHERCAT_CONFIG=/home/igh/ethercat/etherlab/etc/ethercat.conf
2)网卡名称,模块名称
# grep MASTER0_DEVICE etc/ethercat.conf
MASTER0_DEVICE="eth0"
# grep DEVICE_MODULES etc/ethercat.conf
DEVICE_MODULES="igb"

6,启动ethercat,搜索设备(异常情况,仅做记录,下问有正常操作的)

# /etc/init.d/ethercat start
Starting EtherCAT master 1.6.0  done
# ethercat master
Failed to obtain number of masters: Failed to open master device /dev/EtherCAT0: No such file or directory

问题1:Failed to obtain number of masters: Failed to open master device /dev/EtherCAT0: No such file or directory

这个问题的根本其实是没有成功加载驱动,为什么没有呢?对于我的环境,网卡驱动应该是用igb的,如我上面配置的DEVICE_MODULES="igb",但是我目前选用的内核版本太高了,当前我使用的IGH可支持的igb驱动是6.1,

所以就在./configure时报错,

checking for kernel for igb driver... configure: error: kernel 6.4 not available for igb driver!

当然,如果你的是通用网卡,这个问题就不存在,并且DEVICE_MODULES="generic",具体是不是通用网卡,在etc/ethercat.conf里面有说明,如果不是通用的,就要在configure时支持它,比如我的就是要加--enable-igb。

7,启动ethercat,搜索设备(正常情况)

# ifconfig eth0 up
# /etc/init.d/ethercat start
Starting EtherCAT master 1.6.0  done
# ethercat master
 ethercat master
Master0
  Phase: Idle
  Active: no
  Slaves: 1
  Ethernet devices:
    Main: 90:e4:68:02:01:54 (attached)
      Link: UP
      Tx frames:   26170
      Tx bytes:    1730008
      Rx frames:   26169
      Rx bytes:    1729948
      Tx errors:   0
      Tx frame rate [1/s]:    500    510    301
      Tx rate [KByte/s]:     29.3   30.3   19.1
      Rx frame rate [1/s]:    500    510    301
      Rx rate [KByte/s]:     29.3   30.3   19.1
    Common:
      Tx frames:   26170
      Tx bytes:    1730008
      Rx frames:   26169
      Rx bytes:    1729948
      Lost frames: 0
      Tx frame rate [1/s]:    500    510    301
      Tx rate [KByte/s]:     29.3   30.3   19.1
      Rx frame rate [1/s]:    500    510    301
      Rx rate [KByte/s]:     29.3   30.3   19.1
      Loss rate [1/s]:          0     -0      0
      Frame loss [%]:         0.0   -0.0    0.0
  Distributed clocks:
    Reference clock:   Slave 0
    DC reference time: 0
    Application time:  0
                       2000-01-01 00:00:00.000000000
# ethercat slaves
0  0:0  PREOP  +  Dobot CRV2 SCB

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值