天嵌 ARM开发社区

 找回密码
 注册
查看: 1016|回复: 0

IMX6Q开发板平台移植ethercat通讯协议

[复制链接]
freewing 发表于 2021-7-5 14:30:59 | 显示全部楼层 |阅读模式
准备工作:
1.在官网http://www.etherlab.org/en/ethercat/ 下载ethercat-1.5.2.tar.bz2
2.准备目标arm板运行的内核源码,编译通过。
3.安装或者解压目标arm板相应的交叉编译工具。

这里使用的平台和内核版本是TQIMX6QLinux-4.1.4+Ubuntu16.04系统,以下具体说明ethercat的移植:
1.解压IGH源码进入目录
  1. #tar xjf ethercat-1.5.2.tar.bz2
  2. #cd ethercat-1.5.2/
  3. #./configure --prefix=/opt/ethercat-1.5.2/ --with-linux-dir=/opt/linux/xxx/kernel_imx --enable-8139too=no --enable-generic=yes CC=arm-none-linux-gnueabi-gcc --host=arm-none-linux-gnueabi
复制代码
2.编译源码
#make

出现错误:
  1. /home/mm/work/project/ethercat/ethercat-1.5.2/devices/generic.c: In function 'ec_gen_device_init':
  2. /home/mm/work/project/ethercat/ethercat-1.5.2/devices/generic.c:152:77: error: macro "alloc_netdev" requires 4 arguments, but only 3 given
  3.      dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null, ether_setup);
  4.                                                                              ^
  5. /home/mm/work/project/ethercat/ethercat-1.5.2/devices/generic.c:152:19: error: 'alloc_netdev' undeclared (first use in this function)
  6.      dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null, ether_setup);
  7.                    ^
  8. /home/mm/work/project/ethercat/ethercat-1.5.2/devices/generic.c:152:19: note: each undeclared identifier is reported only once for each function it appears in
  9. /home/mm/work/project/ethercat/ethercat-1.5.2/devices/generic.c:146:10: warning: unused variable 'null' [-Wunused-variable]
  10.      char null = 0x00;
  11. t/ethercat/ethercat-1.5.2/master/ethernet.c:151:72: error: macro "alloc_netdev" requires 4 arguments, but only 3 given
  12.      if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, ether_setup))) {
  13.                                                                         ^
  14. /home/mm/work/project/ethercat/ethercat-1.5.2/master/ethernet.c:151:22: error: 'alloc_netdev' undeclared (first use in this function)
  15.      if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, ether_setup))) {
复制代码
修改:
  1. sudo vi devices/generic.c
  2. 152行 dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null, ether_setup);
  3. 改为
  4. dev->netdev = alloc_netdev(sizeof(ec_gen_device_t *), &null, NET_NAME_UNKNOWN, ether_setup);

  5. sudo vi master/ethernet.c
  6. 151行if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name, ether_setup))) {
  7. 改为
  8. if (!(eoe->dev = alloc_netdev(sizeof(ec_eoe_t *), name,NET_NAME_UNKNOWN, ether_setup))) {
复制代码
3. 指定交叉编译工具,编译器modules
  1. #make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
  2. //编译通过会对应生成ethercat-1.5.2/devices/ec_generic.ko和ethercat-1.5.2/master/ec_master.ko
复制代码
4.安装
  1. #make install
  2. //make install 会在前面指定/opt/ethercat目录下有编译生成的各种用户空间的文件
复制代码
5.  在/opt/ethercat目录下创建modules文件夹,并复制ec_generic.ko和ec_master.ko到modules下
  1. #mkdir -p /opt/ethercat/modules
  2. #cp devices/ec_generic.ko  /opt/ethercat/modules/
  3. #cp master/ec_master.ko   /opt/ethercat/modules/
复制代码
6.  将ethercat文件夹打包
  1. # ls
  2. bin  etc  include  lib  modules  sbin
  3. #tar -cjf ethercat.tar.bz2 ethercat
复制代码
/至此IGH交叉编译完成,下面是在对应arm目标板上的操作*/
注意:
arm目标板上要使用的东西都在ethercat文件夹下或者是ethercat.tar.bz2
ethercat文件夹下包含链接文件,可以通过nfs/ftp等方式cp到板子上,不是通过挂载的方式只能下载ethercat.tar.bz2到板子再解压

1.ethercat.tar.bz2拷贝到板子根目录下解压(这里不做说明)
  1. root@EmbedSky-Board:/# tar xvf ethercat.tar.bz2
  2. ethercat/
  3. ethercat/ec_generic.ko
  4. ethercat/lib/
  5. ethercat/lib/libethercat.a
  6. ethercat/lib/libethercat.so.1
  7. ethercat/lib/libethercat.so
  8. ethercat/lib/libethercat.la
  9. ethercat/lib/libethercat.so.1.0.0
  10. ethercat/lib/systemd/
  11. ethercat/lib/systemd/system/
  12. ethercat/lib/systemd/system/ethercat.service
  13. ethercat/include/
  14. ethercat/include/ectty.h
  15. ethercat/include/ecrt.h
  16. ethercat/bin/
  17. ethercat/bin/ethercat
  18. ethercat/sbin/
  19. ethercat/sbin/ethercatctl
  20. ethercat/ec_master.ko
  21. ethercat/etc/
  22. ethercat/etc/init.d/
  23. ethercat/etc/init.d/ethercat
  24. ethercat/etc/sysconfig/
  25. ethercat/etc/sysconfig/ethercat
  26. ethercat/etc/ethercat.conf
  27. root@EmbedSky-Board:/#
复制代码
2. 进入ethercat目录下
  1. root@EmbedSky-Board:/# cd /ethercat
  2. root@EmbedSky-Board:/ethercat# ls
  3. bin  etc  include  lib  modules  sbin
  4. root@EmbedSky-Board:/ethercat#
复制代码
ethercat目录下各文件目录的内容复制到板子根文件系统根目录下相应目录下,例如:cp bin/ethercat /bin/

3.复制ec_master.ko到/lib/modules/内核版本号/
  1. root@EmbedSky-Board:/ethercat# cp /ethercat/modules/ec_master.ko /lib/modules/4.1.15
  2. //这里的内核版本是4.1.15,可以通过uname -r 查看
  3. root@EmbedSky-Board:/ethercat# depmod
复制代码
4. 配置rules,创建设备号
  1. root@EmbedSky-Board:/ethercat#vi /etc/sysconfig/ethercat
  2. 将引号中的内容 “echo KERNEL=="EtherCAT[0-9]*", MODE="0664" > /etc/udev/rules.d/99-EtherCAT.rules” 加进去。
复制代码
5. 获取板子MAC地址
  1. root@EmbedSky-Board:/ethercat#ifconfig
  2. //eth2  Link encap:以太网  硬件地址 00:0c:29:01:69:aa
复制代码
/**************至此板子上的配置结束,下面是启动EtherCAT***************/
通过网线直连ethercat主从站,从站启动完成后,打开主站电源

1.配置主站的MAC地址
  1. root@EmbedSky-Board:/ethercat#modprobe ec_master main_devices=1E:ED:19:27:1A:B3
复制代码
2.启动ethercat
  1. root@EmbedSky-Board:/ethercat# /etc/init.d/ethercat start
  2. Starting EtherCAT master 1.5.2  done
复制代码
3.安装通用网卡驱动
  1. root@EmbedSky-Board:/ethercat#insmod /modules/ec_generic.ko
复制代码
4.通过ethercat查看信息
  1. root@EmbedSky-Board:/ethercat#ethercat  //输入ethercat得到帮助菜单
复制代码
/到此移植过程结束***/

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-9 01:38 , Processed in 1.062500 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表