简介
在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
这样就可以使用命令ethercat控制从站了
常见问题
下面需要修改源码的问题是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-*
- 问题四 version magic ‘* SMP mod_unload ’ should be ‘* SMP mod_unload ’
这是因为内核版本和编译时候的内核源码版本不一致导致的
引用
http://www.etherlab.org/en/ethercat/
http://blog.csdn.net/xkzju2010/article/details/51066084