前言
记录一下如何利用树莓派3B+搭建EtherCAT主站的过程。
目前已有EherCAT主站主要包括: TwinCAT 3 EtherCAT、Acontis EtherCAT、IgHEtherCAT(开源) SOEM EtherCAT(开源)、KPA EtherCAT、RSW-ECAT Master EtherCAT。
其中Acontis EtherCAT主站是在window平台下的,也是目前应用最广泛的,但是收费。在这里我们选择免费开源的IgH_EtherCAT。
树莓派实时内核搭建
- 为了确保以下编译正常,需要在树莓派中提前安装以下软件:
sudo apt install git bc bison flex libssl-dev make
-
在完成上述软件的安装后,我们还需要下载树莓派实时内核源码(因为Linux本身不具备实时性,不知道这样还要不要打Xenomai实时补丁,懂得小伙伴可以告知一下), 目前github上关于rt-kernel的源码有两个版本rpi-4.14.y-rt和rpi-4.19.y-rt。在这里我们选择rpi-4.14.y-rt。 -
下载树莓派实时内核rpi-4.14.y-rt版本。
git clone --depth=1 --branch rpi-4.14.y-rt https://github.com/raspberrypi/linux
- 在下载完成后会在当前目录生成一个Linux的文件夹,执行以下命令:
cd linux
KERNEL=kernel7
make bcm2709_defconfig
- 完成后,继续执行以下命令(编译内核需要花费较长的时间,大家耐心等待一波,大概2个小时左右吧,树莓派还挺烫的):
make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
sudo reboot
uname -a
- 如果不出意外,应该可以得到如下图片,可以看到当前的版本变为了4.14.91-rt49-v7+
:
igH_EtherCAT主站搭建
- 下载igH_EtherCAT源码,同时确保当前版本为stable-1.5
git clone https://gitlab.com/etherlab.org/ethercat.git
cd ethercat
git checkout stable-1.5
接下来就是关键啦~ 首先在ethercat文件夹下创建 etherlab文件(用于存放编译出来的驱动文件)
cd ethercat/
mkdir etherlab
执行如下命令:
./bootstrap
然后执行以下配置命令:
./configure --prefix=/home/pi/ethercat/etherlab --with-linux-dir=/usr/src/linux --enable-8139too=no --enable-generic=yes CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf
需要注意的是
/home/pi/ethercat/etherlab /usr/src/linux 分别是存放IgH_EtherCAT编译后的驱动文件和Linux源码的位置,你需要找到你自己的路径。
之前只是完成了一下配置,下面开始编译IgH_EtherCAT源码,编译通过会对应生成ethercat、devices/ec_generic.ko和ethercat/master/ec_master.ko
sudo make -j4
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
sudo make install
如果编译后出现以下问题: 则在当前目录下创建touch ~/ethercat/master/soe_errors.c文件即可。
编译完成后,在etherlab目录下创建modules文件夹,并将复制ethercat/devices/ec_generic.ko和ethercat/master/ec_master.ko 复制到etherlab/modules下
mkdir -p ~/ethercat/etherlab/modules
cp devices/ec_generic.ko etherlab/modules/
cp master/ec_master.ko etherlab/modules/
最后的结果图如下:
将IgH_EtherCAT布置到树莓派3B+上
sudo cp -r etherlab/ /opt
sudo ln -fs /opt/etherlab/etc/init.d/ethercat /etc/init.d/
sudo ln -fs /opt/etherlab/bin/ethercat /usr/local/bin/
sudo mkdir /etc/sysconfig
sudo ln -fs /opt/etherlab/etc/sysconfig/ethercat /etc/sysconfig/
sudo su
sudo echo KERNEL==\"EtherCAT[0-9]*\", MODE=\"0664\" > /etc/udev/rules.d/99-EtherCAT.rules
exit
sudo cp /opt/etherlab/modules/ec_master.ko /lib/modules/4.14.91-rt49-v7+
depmod
ifconfig
vi /etc/sysconfig/ethercat
MASTER0_DEVICE=”b8:27:eb:7d:26:a2”
DEVICE_MODULES=”generic”
insmod /opt/etherlab/modules/ec_generic.ko
sudo /etc/init.d/ethercat start
当然我们还可以添加命令行工具,如下:
sudo gedit ~/.bashrc
添加:PATH=$PATH:/opt/etherlab/bin
source ~/.bashrc
最后可以得到如下效果图:
参考资料
https://blog.csdn.net/longwoo1012/article/details/105824429
https://blog.csdn.net/jueyisan/article/details/101013705
https://blog.csdn.net/weijiancheng999/article/details/106885053
https://www.raspberrypi.com/documentation/computers/linux_kernel.html
|