Igh EtherCat编译(增加4.15内核编译)
- 环境
系统:Ubuntu-12.04.5-x86
内核版本:3.13.0-32-generic
gcc版本: 4.6.3 - 编译安装
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” - 配置用户权限
编辑文件/etc/udev/rules.d/99-EtherCAT.rules
输入下列内容
KERNEL==”EtherCAT[0-9]*”, MODE=”0664″ - 运行
$ sudo /etc/init.d/ethercat start #启动EtherCat主站
$ sudo /etc/init.d/ethercat stop #停止EtherCat主站
$ sudo /etc/init.d/ethercat restart #重启EtherCat主站 - 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/