当前位置:   article > 正文

初探ethercat IGH协议栈(交叉编译)

igh协议栈

说明,

1)不要着急编译,建议读完全文,再参照编译;

2)IGH编译是需要Linux内核源码的,还有打rt补丁;

3)依赖的内核版本最好是目标设备的一样;

4)内核版本不要太低,也不要太高,否则可能出现网卡不支持的情况;

5)本文使用的IGH源码版本是1.6.0;

6)初次写本文时,用的是6.4内核,因为igb驱动的原因,没有继续往下进行,后降低内核版本到6.1走通了整个流程,所以重新整理该文档。

一、以下操作在宿主机执行

1,下载、切换分支、生成configure

  1. # git clone https://gitlab.com/etherlab.org/ethercat.git
  2. # cd ethercat
  3. # git checkout stable-1.6
  4. # autoreconf -i

2,编译、安装

  1. # mkdir etherlab
  2. 说明:
  3. 1)--with-linux-dir= 内核源码路径
  4. 2)因为我的网卡要igb的驱动,所以要支持一下igb: --enable-igb=yes
  5. # sudo ./configure --prefix=/home/igh/ethercat/etherlab \
  6. --with-linux-dir=/home/debian12/x86/kernel/6.1.0/linux-6.1/ \
  7. --enable-8139too=no --enable-wildcards=yes --enable-igb=yes
  8. # sudo make
  9. # sudo make all modules
  10. # sudo make install

3,拷贝两个模块到etherlab文件,然后打包

  1. ec_master.ko 在ethercat/mater下面,
  2. ec_generic.ko 在ethercat/devices下面

编译结束,实际上还有一个ec_igb.ko,不知道做什么的,有知道的可以留言,谢谢,如果都安装,会报如下错误

二、以下操作在目标机执行

4,部署环境,将上一步生成的ethercat解压到目标设备

  1. # cd etherlab
  2. # cp ec_master.ko /lib/modules/6.1.0-rt5/
  3. # cp ec_generic.ko /lib/modules/6.1.0-rt5/
  4. # depmod -a
  5. # cp etc/init.d/ethercat /etc/init.d/
  6. # cp bin/ethercat /bin/
  7. # mkdir /etc/sysconfig -p
  8. # cp etc/sysconfig/ethercat /etc/sysconfig/
  9. # echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules
  10. # modprobe ec_master main_devices=90:E4:68:02:01:54
  11. 说明:main_devices改成你具体的MAC地址
  12. # insmod /lib/modules/6.1.0-rt5/ec_generic.ko

5,根据自己的实际情况做修改

  1. 1)配置路径
  2. # vim etc/ethercat.config
  3. ETHERCAT_CONFIG=/home/igh/ethercat/etherlab/etc/ethercat.conf
  4. 2)网卡名称,模块名称
  5. # grep MASTER0_DEVICE etc/ethercat.conf
  6. MASTER0_DEVICE="eth0"
  7. # grep DEVICE_MODULES etc/ethercat.conf
  8. DEVICE_MODULES="igb"

6,启动ethercat,搜索设备(异常情况,仅做记录,下问有正常操作的)

  1. # /etc/init.d/ethercat start
  2. Starting EtherCAT master 1.6.0 done
  3. # ethercat master
  4. Failed to obtain number of masters: Failed to open master device /dev/EtherCAT0: No such file or directory

问题1:Failed to obtain number of masters: Failed to open master device /dev/EtherCAT0: No such file or directory

这个问题的根本其实是没有成功加载驱动,为什么没有呢?对于我的环境,网卡驱动应该是用igb的,如我上面配置的DEVICE_MODULES="igb",但是我目前选用的内核版本太高了,当前我使用的IGH可支持的igb驱动是6.1,

所以就在./configure时报错,

checking for kernel for igb driver... configure: error: kernel 6.4 not available for igb driver!

当然,如果你的是通用网卡,这个问题就不存在,并且DEVICE_MODULES="generic",具体是不是通用网卡,在etc/ethercat.conf里面有说明,如果不是通用的,就要在configure时支持它,比如我的就是要加--enable-igb。

7,启动ethercat,搜索设备(正常情况)

  1. # ifconfig eth0 up
  2. # /etc/init.d/ethercat start
  3. Starting EtherCAT master 1.6.0 done
  4. # ethercat master
  5. ethercat master
  6. Master0
  7. Phase: Idle
  8. Active: no
  9. Slaves: 1
  10. Ethernet devices:
  11. Main: 90:e4:68:02:01:54 (attached)
  12. Link: UP
  13. Tx frames: 26170
  14. Tx bytes: 1730008
  15. Rx frames: 26169
  16. Rx bytes: 1729948
  17. Tx errors: 0
  18. Tx frame rate [1/s]: 500 510 301
  19. Tx rate [KByte/s]: 29.3 30.3 19.1
  20. Rx frame rate [1/s]: 500 510 301
  21. Rx rate [KByte/s]: 29.3 30.3 19.1
  22. Common:
  23. Tx frames: 26170
  24. Tx bytes: 1730008
  25. Rx frames: 26169
  26. Rx bytes: 1729948
  27. Lost frames: 0
  28. Tx frame rate [1/s]: 500 510 301
  29. Tx rate [KByte/s]: 29.3 30.3 19.1
  30. Rx frame rate [1/s]: 500 510 301
  31. Rx rate [KByte/s]: 29.3 30.3 19.1
  32. Loss rate [1/s]: 0 -0 0
  33. Frame loss [%]: 0.0 -0.0 0.0
  34. Distributed clocks:
  35. Reference clock: Slave 0
  36. DC reference time: 0
  37. Application time: 0
  38. 2000-01-01 00:00:00.000000000
  39. # ethercat slaves
  40. 0 0:0 PREOP + Dobot CRV2 SCB

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号