在linux中编译 IgH,命令前面的#代表需要root账户运行,linux的内核需要3.+ , 4.+编译会有问题
下载igh源码
http://www.etherlab.org/download/ethercat/ethercat-1.5.2.tar.bz2
编译RT实时内核,这个很重要,编译igh的时候需要编译过的内核源码。
http://blog.csdn.net/x356982611/article/details/77370385
解压后进入源码文件夹ethercat-1.5.2,执行
@./configure --with-linux-dir=内核源码路径 --enable-generic=yes kernelrelease=$(uname -r) --enable-8139too=no
@make
@make modules
#make install
#make modules_install
ethercat被安装在了/opt/ethercat ,内核模块安装到了/lib/modules/$(uname -r)/下面
vim /etc/ld.so.conf
另起一行添加 /opt/ethercat/lib ,保存后退出 执行
@sudo ldconfig
@sudo su root
#cd /opt/ethercat
#mkdir /etc/sysconfig/
#cp etc/sysconfig/ethercat /etc/sysconfig/
#ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/
#depmod (将内核模块包含到modules.dep文件中)
#vim /etc/sysconfig/ethercat
修改下面两项
MASTER0_DEVICE=”网卡MAC”
DEVICE_MODULES=”generic”
# echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules
#/etc/init.d/ethercat start
@vim ~/.bashrc
其中添加path路径 PATH=$PATH:/opt/etherlab/bin
@source ~/.bashrc
下面需要修改源码的问题是4.+版本内核才会遇到的问题 ,试了下没有跑起来,待进一步验证,3.+内核完全没有问题
eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, ether_setup))
改成
eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name,NET_NAME_UNKNOWN, ether_setup)
https://github.com/torvalds/linux/commit/eeb1bd5c40edb0e2fd925c8535e2fdebdbc5cef2#diff-2bc16211fee74778ea281d86b3c5d31e 函数在这次提交中被修改了参数
ret = sock_create_kern(PF_PACKET, SOCK_RAW, htons(ETH_P_ETHERCAT),
改成
ret = sock_create_kern(&init_net,PF_PACKET, SOCK_RAW, htons(ETH_P_ETHERCAT),
./configure --with-linux-dir=/usr/src/linux-header-*
这是因为内核版本和编译时候的内核源码版本不一致导致的
http://www.etherlab.org/en/ethercat/
http://blog.csdn.net/xkzju2010/article/details/51066084