当前位置:   article > 正文

LinuxCNC 2.8.4下编译IGH ethercat-1.5.2_igh 1.5.2

igh 1.5.2

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:

  1. cd ethercat-1.5.2
  2. ./configure --enable-8139too=no --enable-wildcards=yes
  3. make
  4. make modules
  5. make install
  6. 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

  1. // init_timer(&timer);
  2. // timer.function = cyclic_task;
  3. // timer.expires = jiffies + 10;
  4. // add_timer(&timer);
  5. timer_setup(&timer, cyclic_task, 0);
  6. 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'   ,增加头文件

  1. #include <linux/version.h>
  2. #include <uapi/linux/sched/types.h> // struct sched_param
  3. #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

配置服务

  1. cd /opt/etherlab
  2. mkdir /etc/sysconfig/
  3. cp etc/sysconfig/ethercat /etc/sysconfig/
  4. ln -s /opt/etherlab/etc/init.d/ethercat /etc/init.d/
  5. depmod

配置网卡,debian默认没有ifconfig工具,但是ip工具,可以使用ip address命令查看网卡MAC地址,打开配置文件

  1. vim /etc/sysconfig/ethercat
  2. //修改以下两项
  3. MASTER0_DEVICE="xx:xx:xx:xx:xx:xx"
  4. 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

至此,全部工作完成。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/762324
推荐阅读
相关标签
  

闽ICP备14008679号