说明,
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