Igh EtherCat编译(增加4.15内核编译)

  1. 环境

    系统:Ubuntu-12.04.5-x86
    内核版本:3.13.0-32-generic
    gcc版本: 4.6.3

  2. 编译安装
    2.1 源码获取:http://etherlab.org/download/ethercat/ethercat-1.5.2.tar.bz2 或 https://github.com/ningfei/ethercat/archive/master.zip
    2.2 解压EtherCAT源码安装包并进入该源码包根文件下tar -vxf ethercat-1.5.2.tar.bz2
    cd ethercat-1.5.22.3 编译$ ./configure –enable-cycles –enable-hrtimer –enable-8139too=no –prefix=/opt/etherlab
    $ make #编译所有文件
    $ make modules #编译ethercat驱动2.4 安装(需要root权限)$ sudo make install #安装库文件
    $ sudo make modules_install #安装ethercat驱动
    $ sudo depmod #将模块插入内核创建软连接和相关脚本

    $ sudo ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/ethercat
    $ sudo cp /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/ethercat
    $ sudo vi /etc/sysconfig/ethercat
    编辑ethercat文件,将本机的MAC地址填入MASTER0_DEVICE:
    MASTER0_DEVICE=”00:0c:29:83:05:e6″ //示例
    网卡驱动选择generic:
    DEVICE_MODULES=”generic”

  3. 配置用户权限
    编辑文件/etc/udev/rules.d/99-EtherCAT.rules
    输入下列内容
    KERNEL==”EtherCAT[0-9]*”, MODE=”0664″
  4. 运行
    $ sudo /etc/init.d/ethercat start #启动EtherCat主站
    $ sudo /etc/init.d/ethercat stop #停止EtherCat主站
    $ sudo /etc/init.d/ethercat restart #重启EtherCat主站
  5. Xenomai实时补丁
    给Ubuntu添加Xenomai实时补丁是为了使igh ethercat 1.5.2主站获得更好的响应及实时性,EtherCAT-1.5.2理论上支持任何实时性(rtai,xenomai)或者非实时内核(linux-2.6以上的版本)

补充:4.15内核编译

下载地址:http://hg.code.sf.net/p/etherlabmaster/code

编译步骤:按照INSTALL文件即可

$ ./boostrap # to create the configure script, if downloaded from the repo

$ ./configure (我的$ ./configure –enable-cycles –enable-hrtimer –enable-8139too=no –prefix=/opt/etherlab)
$ make all modules

… and as root:

# make modules_install install
# depmod

遇到问题1:
make all modules
master/master.c:1444:25: error: implicit declaration of function ‘signal_pending’ [-Werror=implicit-function-declaration]

解决方案1:修改master/master.c文件,增加头文件引用
48 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
49 #include <linux/sched/types.h> // struct sched_param
50 #include <linux/sched/signal.h>
51 #endif


Ubuntu 20.04 编译问题:

make[1]: 进入目录“/usr/src/linux-headers-5.11.0-25-generic”
MODPOST /home/robot/tools/code-334c34cfd2e5/Module.symvers
ERROR: modpost: “sched_setscheduler” [/home/robot/tools/code-334c34cfd2e5/master/ec_master.ko] undefined!

解决:
使用5.8内核版本
./configure –enable-cycles –enable-hrtimer –enable-8139too=no –prefix=/opt/etherlab –with-linux-dir=/usr/src/linux-headers-5.8.0-43-generic/