A Detailed Guide to Porting EtherCAT on the Forlinx OKMX6ULx Platform

EtherCAT (Ethernet for Control Automation Technology) is a high-performance industrial Ethernet protocol, widely used in fields that require real-time performance, high synchronization accuracy, and efficient data transmission. This article introduces how to port EtherCAT on the Forlinx OKMX6ULx series platforms. This method is based on IGH EtherCAT, which is an open-source master protocol stack compliant with the EtherCAT international standard. It is specifically designed for the Linux system and supports efficient management and control of EtherCAT slave devices. Its core features include: Open-source and low cost: Based on the LGPL license, it does not require dedicated hardware or licensing fees, making it suitable for rapid prototype verification‌. Real-time communication: Supports nanosecond - level synchronization accuracy and reduces transmission delay through Distributed Clock (DC) technology‌. Flexible topology: Supports any network topologies such as linear, tree, and star, and can connect up to 65,535 nodes at most‌. Source Code Download 1.1 Select the 1.6 stable version for download. Other versions can be downloaded from the official GitLab. https://gitlab.com/etherlab.org/ethercat/-/archive/stable-1.6/ethercat-stable-1.6.tar.gz 1.2 Copy it to the development environment provided by Forlinx and decompress it. tar -xvf ethercat-stable-1.6.tar.gz cd ethercat-stable-1.6 Cross-porting 2.1 Execute the environment variables and run bootstrap to generate the configure file. forlinx@ubuntu:~/111/ethercat-stable-1.6$ sudo -s forlinx@ubuntu:~/111/ethercat-stable-1.6$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi forlinx@ubuntu:~/111/ethercat-stable-1.6$./bootstrap 2.2 Execute configure to generate and compile the Makefile forlinx@ubuntu:~/111/ethercat-stable-1.6$ ./configure --prefix=$PWD/__install --with-linux-dir=/home/forlinx/work/linux-4.1.15/ --enable-8139too=no --enable-generic=yes --host=arm-poky-linux-gnueabi forlinx@ubuntu:~/111/ethercat-stable-1.6$ make forlinx@ubuntu:~/111/ethercat-stable-1.6$ make install Note: --with-linux-dir = The following path is the Linux source path 2.3 ethercat driver compilation root@ubuntu:~/111/ethercat-stable-1.6# make modules The driver has been generated. root@ubuntu:~/111/ethercat-stable-1.6# find -name *.ko ./master/ec_master.ko ./devices/ec_generic.ko ./examples/mini/ec_mini.ko Functions Test 3.1 Package and copy files to the development board Ubuntu development environment: root@ubuntu:~/111/ethercat-stable-1.6# cd install/ root@ubuntu:~/111/ethercat-stable-1.6/install# tar -cjvf ethercat.tar.bz2 * Development Board root@fl-imx6ull:~# tar -xvf /run/media/sda1/ethercat.tar.bz2 -C / root@fl-imx6ull:~# cp /run/media/sda1/ec_generic.ko /lib/modules/4.1.15-00076-g448d07c/ root@fl-imx6ull:~# cp /run/media/sda1/ec_master.ko /lib/modules/4.1.15-00076-g448d07c/ root@fl-imx6ull:~# sync 3.2 Add udev rule root@fl-imx6ull:~# echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules 3.3 View the network card mac root@fl-imx6ull:~# ifconfig eth0 Link encap:Ethernet HWaddr E2:14:B0:1D:7C:CB inet addr:192.168.0.232 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::e014:b0ff:fe1d:7ccb%1996035792/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4325 errors:0 dropped:267 overruns:0 frame:0 TX packets:71 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1296750 (1.2 MiB) TX bytes:10368 (10.1 KiB) eth1 Link encap:Ethernet HWaddr D2:E1:14:B0:1D:7C inet addr:192.168.1.232 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1%1996035792/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 3.4 Modify/etc/sysconfig/ethercat vi /etc/sysconfig/ethercat Modify: MASTER0_DEVICE="" to: MASTER0_DEVICE="E2:14:B0:1D:7C:CB" 3.5 Run the ethercat service and load the driver Restart the board root@fl-imx6ull:~# /etc/init.d/ethercat start root@fl-imx6ull:~# insmod /lib/modules/4.1.15-00076-g448d07c/ec_generic.ko 3.6 Ethercat as master root@fl-imx6ull:~# ethercat master Master0 Phase: Waiting for device(s)... Active: no Slaves: 0 Ethernet devices: Main: e2:14:b0:1d:7c:cb (waiting...) Link: DOWN Tx frames: 0 Tx bytes: 0 Rx frames: 0

Apr 9, 2025 - 03:05
 0
A Detailed Guide to Porting EtherCAT on the Forlinx OKMX6ULx Platform

EtherCAT (Ethernet for Control Automation Technology) is a high-performance industrial Ethernet protocol, widely used in fields that require real-time performance, high synchronization accuracy, and efficient data transmission. This article introduces how to port EtherCAT on the Forlinx OKMX6ULx series platforms. This method is based on IGH EtherCAT, which is an open-source master protocol stack compliant with the EtherCAT international standard. It is specifically designed for the Linux system and supports efficient management and control of EtherCAT slave devices.

Its core features include:

Open-source and low cost: Based on the LGPL license, it does not require dedicated hardware or licensing fees, making it suitable for rapid prototype verification‌.
Real-time communication: Supports nanosecond - level synchronization accuracy and reduces transmission delay through Distributed Clock (DC) technology‌.
Flexible topology: Supports any network topologies such as linear, tree, and star, and can connect up to 65,535 nodes at most‌.

  1. Source Code Download 1.1 Select the 1.6 stable version for download. Other versions can be downloaded from the official GitLab.

https://gitlab.com/etherlab.org/ethercat/-/archive/stable-1.6/ethercat-stable-1.6.tar.gz

1.2 Copy it to the development environment provided by Forlinx and decompress it.

tar -xvf ethercat-stable-1.6.tar.gz
cd ethercat-stable-1.6

  1. Cross-porting 2.1 Execute the environment variables and run bootstrap to generate the configure file.

forlinx@ubuntu:~/111/ethercat-stable-1.6$ sudo -s
forlinx@ubuntu:~/111/ethercat-stable-1.6$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
forlinx@ubuntu:~/111/ethercat-stable-1.6$./bootstrap
2.2 Execute configure to generate and compile the Makefile

forlinx@ubuntu:~/111/ethercat-stable-1.6$ ./configure --prefix=$PWD/__install --with-linux-dir=/home/forlinx/work/linux-4.1.15/ --enable-8139too=no --enable-generic=yes --host=arm-poky-linux-gnueabi
forlinx@ubuntu:~/111/ethercat-stable-1.6$ make
forlinx@ubuntu:~/111/ethercat-stable-1.6$ make install
Note: --with-linux-dir = The following path is the Linux source path

2.3 ethercat driver compilation

root@ubuntu:~/111/ethercat-stable-1.6# make modules
The driver has been generated.

root@ubuntu:~/111/ethercat-stable-1.6# find -name *.ko
./master/ec_master.ko
./devices/ec_generic.ko
./examples/mini/ec_mini.ko

  1. Functions Test 3.1 Package and copy files to the development board

Ubuntu development environment:

root@ubuntu:~/111/ethercat-stable-1.6# cd install/
root@ubuntu:~/111/ethercat-stable-1.6/
install# tar -cjvf ethercat.tar.bz2 *
Development Board

root@fl-imx6ull:~# tar -xvf /run/media/sda1/ethercat.tar.bz2 -C /
root@fl-imx6ull:~# cp /run/media/sda1/ec_generic.ko /lib/modules/4.1.15-00076-g448d07c/
root@fl-imx6ull:~# cp /run/media/sda1/ec_master.ko /lib/modules/4.1.15-00076-g448d07c/
root@fl-imx6ull:~# sync
3.2 Add udev rule

root@fl-imx6ull:~# echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules
3.3 View the network card mac

root@fl-imx6ull:~# ifconfig
eth0 Link encap:Ethernet HWaddr E2:14:B0:1D:7C:CB
inet addr:192.168.0.232 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::e014:b0ff:fe1d:7ccb%1996035792/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4325 errors:0 dropped:267 overruns:0 frame:0
TX packets:71 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1296750 (1.2 MiB) TX bytes:10368 (10.1 KiB)
eth1 Link encap:Ethernet HWaddr D2:E1:14:B0:1D:7C
inet addr:192.168.1.232 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1%1996035792/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
3.4 Modify/etc/sysconfig/ethercat

vi /etc/sysconfig/ethercat
Modify:
MASTER0_DEVICE=""
to:
MASTER0_DEVICE="E2:14:B0:1D:7C:CB"
3.5 Run the ethercat service and load the driver

Restart the board

root@fl-imx6ull:~# /etc/init.d/ethercat start
root@fl-imx6ull:~# insmod /lib/modules/4.1.15-00076-g448d07c/ec_generic.ko
3.6 Ethercat as master

root@fl-imx6ull:~# ethercat master
Master0
Phase: Waiting for device(s)...
Active: no
Slaves: 0
Ethernet devices:
Main: e2:14:b0:1d:7c:cb (waiting...)
Link: DOWN
Tx frames: 0
Tx bytes: 0
Rx frames: 0
Rx bytes: 0
Tx errors: 0
Tx frame rate [1/s]: 0 0 0
Tx rate [KByte/s]: 0.0 0.0 0.0
Rx frame rate [1/s]: 0 0 0
Rx rate [KByte/s]: 0.0 0.0 0.0
Common:
Tx frames: 0
Tx bytes: 0
Rx frames: 0
Rx bytes: 0
Lost frames: 0
Tx frame rate [1/s]: 0 0 0
Tx rate [KByte/s]: 0.0 0.0 0.0
Rx frame rate [1/s]: 0 0 0
Rx rate [KByte/s]: 0.0 0.0 0.0
Loss rate [1/s]: 0 0 0
Frame loss [%]: 0.0 0.0 0.0
Distributed clocks:
Reference clock: None
DC reference time: 0
Application time: 0
2000-01-01 00:00:00.000000000