IgH(IgH EtherCAT Master for Linux)编译之linux Debian篇

简介

在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控制从站了
IgH(IgH EtherCAT Master for Linux)编译之linux Debian篇_第1张图片

常见问题

下面需要修改源码的问题是4.+版本内核才会遇到的问题 ,试了下没有跑起来,待进一步验证,3.+内核完全没有问题

  • 问题一

IgH(IgH EtherCAT Master for Linux)编译之linux Debian篇_第2张图片

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 函数在这次提交中被修改了参数

IgH(IgH EtherCAT Master for Linux)编译之linux Debian篇_第3张图片
- 问题二

IgH(IgH EtherCAT Master for Linux)编译之linux Debian篇_第4张图片

   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 ’
    IgH(IgH EtherCAT Master for Linux)编译之linux Debian篇_第5张图片

这是因为内核版本和编译时候的内核源码版本不一致导致的

引用

http://www.etherlab.org/en/ethercat/
http://blog.csdn.net/xkzju2010/article/details/51066084

你可能感兴趣的:(Ethercat,Ethercat从入门到放弃)