说明,
1)不要着急编译,建议读完全文,再参照编译;
2)IGH编译是需要Linux内核源码的,还有打rt补丁;
3)依赖的内核版本最好是目标设备的一样;
4)内核版本不要太低,也不要太高,否则可能出现网卡不支持的情况;
5)本文使用的IGH源码版本是1.6.0。
一、以下操作在宿主机执行
1,下载、切换分支、生成configure
git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat
git checkout stable-1.6
autoreconf -i
2,编译、安装
mkdir etherlab
说明:--with-linux-dir= 内核源码路径
sudo ./configure --prefix=/home/igh/ethercat/etherlab \
--with-linux-dir=/home/debian12/x86/kernel/6.4.0/linux-6.4/ \
--enable-8139too=no --enable-wildcards=yes
sudo make
sudo make all modules
sudo make install
3,拷贝两个模块到etherlab文件,然后打包
ec_master.ko 在ethercat/mater下面,
ec_generic.ko 在ethercat/devices下面
二、以下操作在目标机执行
4,部署环境,将上一步生成的ethercat解压到目标设备
cd etherlab
cp ec_master.ko /lib/modules/6.4.0-rt8+/
cp ec_generic.ko /lib/modules/6.4.0-rt8+/
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
insmod /lib/modules/6.4.0-rt8+/ec_master.ko
insmod /lib/modules/6.4.0-rt8+/ec_generic.ko
5,根据自己的实际情况做修改
1)配置路径
# grep ethercat.conf sbin/ethercatctl
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。