赞
踩
LinuxCNC为官方ISO安装版,基于Debian 10 buster操作系统,内核版本4.19.0-21-rt-amd64,节省了编译preempt rt 实时内核的工作。
IGH默认必须是root用户,才能执行相关指令,以下操作均在root用户下,不是sudo,而是注销普通用户,以root身份登录系统。
官方网站下载IGH源码http://www.etherlab.org/download/ethercat/ethercat-1.5.2.tar.bz2,解压后目录为ethercat-1.5.2 。
编译IGH需要操作系统的内核源码,而系统默认是没有内核源码的,可以从Debian官网下载对应的源码:http://ftp.cn.debian.org/debian/pool/main/l/linux/linux-headers-4.19.0-21-rt-amd64_4.19.249-2_amd64.deb
执行以下命令安装源码,源码会被安装到/usr/src目录下:
sudo apt install ./linux-headers-4.19.0-21-rt-amd64_4.19.249-2_amd64.deb
执行以下命令编译IGH:
- cd ethercat-1.5.2
- ./configure --enable-8139too=no --enable-wildcards=yes
- make
- make modules
- make install
- make modules_install
configure命令无需要指令内核源码位置,编译程序默认使用当前运行内核,并自动去/usr/src目录下寻找相应的内核源码。
执行make modules时,会出现多个错误,皆因版本问题,ethercat-1.5.2发布于2012年,默认支持linux内核版本为2.6 ,所以需要修改多处源码,以下为所有需要修改的地方:
/devices/generic.c 152行,增加一个参数NET_NAME_UNKNOWN
dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null,NET_NAME_UNKNOWN, ether_setup);
/devices/generic.c 210行,增加一个参数&init_net
ret = sock_create_kern(&init_net,PF_PACKET, SOCK_RAW, htons(ETH_P_ETHERCAT),
/examples/mini/mini.c 495行至498行,全部注释掉,因为4.19内核已经没有init_timer了,改为timer_setup
- // init_timer(&timer);
- // timer.function = cyclic_task;
- // timer.expires = jiffies + 10;
- // add_timer(&timer);
- timer_setup(&timer, cyclic_task, 0);
- timer.expires = jiffies + 10;
同时修改回调函数cyclic_task
void cyclic_task(struct timer_list *t)
/master/cdev.c 87行,加上强制类型转换
.fault = (int (*)(struct vm_fault *))eccdev_vma_fault
/master/cdev.c 277行,将virtual_address改为address
" offset = %lu, page = %p\n", vmf->address, offset, page);
/master/master.c 1637行,报错信息为error: variable has incomplete type 'struct sched_param' ,增加头文件
- #include <linux/version.h>
- #include <uapi/linux/sched/types.h> // struct sched_param
- #include <linux/sched/types.h> // sched_setscheduler
/master/ethernet.c 151行,在name, 后增加 NET_NAME_UNKNOWN参数
if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, NET_NAME_UNKNOWN, ether_setup))) {
做完以上修改,我这里就可以成功安装IGH了,安装目录位于/opt/etherlab 。
配置动态库路径
vim /etc/ld.so.conf
另起一行,增加 /opt/etherlab/lib,保存后退出,再执行
ldconfig
配置服务
- cd /opt/etherlab
- mkdir /etc/sysconfig/
- cp etc/sysconfig/ethercat /etc/sysconfig/
- ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/
- depmod
配置网卡,debian默认没有ifconfig工具,但是ip工具,可以使用ip address命令查看网卡MAC地址,打开配置文件
- vim /etc/sysconfig/ethercat
- //修改以下两项
- MASTER0_DEVICE="xx:xx:xx:xx:xx:xx"
- DEVICE_MODULES="generic"
增加设备权限
echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules
启动服务,如果成功会出现提示: Starting EtherCAT master 1.5.2 done
/etc/init.d/ethercat start
增加命令行工具
vim ~/.bashrc
在其中添加路径
PATH=$PATH:/opt/etherlab/bin
执行source ~/.bashrc 或重启命令行工具,这样就可以使用ethercat命令了,比如
ethercat master
可以查看主站信息,其它指令的使用可以参考文档ethercat-1.5.2.pdf,文档可从IGH官网下载。
开机自启动ethercat主站,注意必须是root用户,否则无法自启动。所有应用程序->设置->会话和启动,切换到 应用程序自启动 页,添加, 名称、描述 自定义,命令
/etc/init.d/ethercat start
至此,全部工作完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。