【持续更新中】基于zynq的数控机床控制板ethercat,igh库开发,qt开发图像显示

2023年4月8日

背景引言:导师的项目,自己学习过程记录,网上说的云里雾里,我就实操遇到的问题和过程记录

硬件:7010,实体机windows10(vivado2018.3),实体机ubuntu16(petalinux)

petalinux安装

#安装petalinux依赖库
sudo apt-get install tofrodos iproute2 gawk xvfb gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev libssl-dev screen pax gzip

sudo apt-get upgrade

#安装tftp
apt-get install tftpd-hpa

网上下载
petalinux-v2018.2-final-installer.run
sudo chmod 777 这个文件,很重要!!!!!!
./petalinux-v2018.2-final-installer.run /opt/pkg/petalinux
yyy


设置petalinux
source /opt/pkg/petalinux/settings.sh
输出消息如下:
PetaLinux environment set to '/opt/pkg/petalinux'
INFO: Checking free disk space
INFO: Checking installed tools
INFO: Checking installed development libraries
INFO: Checking network and other services

为了开机自动添加petalinux的环境配置,将设置环境的命令添加到ubuntu自启动脚本中。用root权限打开~/.bashrc文件,在文件最后添加设置命令:
source /opt/pkg/petalinux/settings.sh

vivado安装网上一大把,不再赘述。工程生成的是.xpr文件

工程

就是RTL值综合工程, 简单来说就是verilog代码,之后板子上用的芯片是XC7Z010,就选择对应的

Block Design 部分创建(就是当放一块虚拟板子封装)

创建一个ZYNQ CORE ,并在其中设置DDR 以及UART等参数。

 在diagram中,添加处理模块。diagram就是各种核的简图

双击zynq块

设置ddr 和uart

 没有自动连线?右键,点击Make External

 创建BLOCK工程,右键我们创建的BLOCK工程,点击create HDL wrapper,打包BLOCK文件并生成.v代码

run,进行编译

设置pin引脚

 生成 bitstream文件(用于描述包含FPGA完整内部配置状态的文件,包括布线、逻辑资源和IO设置)

 

 

File→Lauch SDK,在弹出的对话框中,保存默认,点击“OK”,如下图所示。

linux内核打补丁

ipipe 4.14.85
linux kernel 4.14.85
xenomai 3.0.5
分别如下下载
linux中:wget  https://xenomai.org/downloads/ipipe/v4.x/arm/ipipe-core-4.14.85-arm-6.patch 
windows:    https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/ 
windows:    https://xenomai.org/downloads/xenomai/stable/
./scripts/prepare-kernel.sh --arch=arm --ipipe=/patch/ipipe-core-4.14.85-arm-6.patch --linux=/home/djjdjjm88/linux/linux-4.14.85

补丁移植,我导师写的心得经验IGH_EtherCAT在Zynq上的移植:

IGH_EtherCAT在Zynq上的移植
开源项目IGH_EtherCAT在zynq7010+linux平台的移植虽然有不少帖子在讨论,但大多基于linux4.9内核,过于陈旧,且大多也没说清怎么制备实时内核源码。本文首先介绍一种制备实时内核的方法,并基于Xilinx官方提供的Linux-xlnx v2018.3版打上xenomai 3.1和ipipe-core 4.14.36补丁,然后创建petalinux工程,按照常规开发步骤编译zynq平台的启动文件、内核及文件系统,移植IGH_EtherCAT库,最后移植双电机控制软件。
1.支持的硬件平台
(1)HelloFPGA的TinyZYNQ7010开发板;
(2)正点原子的ZYNQ FPGA核心板;
2.移植步骤
2.1 实时linux 内核源码准备
Xilinx官方提供的Linux-xlnx v2018.3内核版本为4.14.0,而ipipe-core 没有与之对应的版本,最接近的版本号是4.14.36,直接打xenomai补丁将报版本不匹配的错误,因此,我们需要将Linux-xlnx v2018.3的内核版本升级到4.14.36。具体步骤如下:
(1)从Xilinx的官方Git库导出v2018.3的源码,该版本是Xilinx公司基于linux Kernel官方 4.14.0源码移植。
1)直接从网址:https://github.com/Xilinx/linux-xlnx/releases/tag/xilinx-v2018.3
2)git clone https://github.com/Xilinx/linux-xlnx.git
cd linux-xlnx
git checkout xilinx-v2018.3
(2)将Linux-xlnx v2018.3版本的内核源码从4.14.0升级到与之最接近的版本4.14.36,步骤如下
git remote add stable git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
git fetch stable
git merge v4.14.36 
(accept the merge commit)
这一步会出现冲突,需要手工解决几个文件的冲突,好在冲突的代码不重要,且很短;
(3)打xenomai-3.1和ipipe-core-4.14.36-arm-1.patch补丁。会有patch失败的文件,但是不多,借助源代码比较软件查看差异,手工修改即可。
2.2 制作BOOT.BIN和image.ub文件,SD卡启动。
参考HelloFPGA或正点原子的手册,先在Vivado2018中定制PL部分的模块,然后创建petalinux工程,配置uboot和linux内核,将linux源码路径指向2.1步骤制备的内核源码,编译所有文件,最后写入SD卡;
2.3 Igh_ethercat库的编译
从创龙公司zynq开发板获得ethercat-stable-1.5-gcd0d17d-20210723.tar.gz;按照创龙的说明编译即可;
	2.4编译igh_ethercat

 2023年6月16日13:56:06

相隔了很久,我教资面试过了,并且在准备发表论文,一直没弄,然后这个项目公司说需要增加芯片的主频,因此换了块a8处理器,定计划下周2也就是2023.06.20开始移植

以下是踩坑记录,在米尔T507上实验

configure: error: C compiler cannot create executables

就是缺少安装库,没装好,我按照手册一堆aptget install,发现得一个一个手动,.sh不太行,真折磨人

/bin/sh: aarch64-linux-gnu-gcc: command not found

gcc的链接库没弄好,apt安装好后得重新链接一下即可

在执行make install的时候

/usr/bin/ld: soe_errors.o: Relocations in generic ELF (EM: 183)

说明不能这样搞。于是乎不按照手册来,直接在板子上depmod,发现这板子上系统不支持depmod指令,而重新编译文件系统太麻烦了,linux-headers各种没有。所以,在板子上直接安装ubuntu18 lts系统,插网线联网下载各种命令(下载不了换网或者多尝试几次)

configure: error: cannot guess build type;you must specify one

发现此问题,就是在编译ethercat1.5时候 ./configure 链接的,需要make menu内核源码一下

configure: error: C compiler cannot create executables

发现就是没有source没具体source哪个我忘记了,反正就是source

configure: error: Failed to extract Linux kernel version!

其实就是内核没编译成功

参考他:【Linux Kernel】源码阅读时的:KERNEL_VERSION 和 LINUX_VERSION_CODE_think_ycx的博客-CSDN博客

2023年6月26日22:39:05

搞完了,已经把汇川伺服驱动器控制了。用了全志的T507芯片

编译流程

root@ubuntu:/home/myir/ethercat-1.5.2# 
make clean

./configure --prefix=/home/myir/ethercat-1.5.2/__install --with-linux-dir=/home/myir/myd-t507h/t507h-sdk/t507/kernel/linux-4.9 --enable-8139too=no --enable-generic=yes CC=aarch64-linux-gnu-gcc --host=aarch64-linux-gnu

make

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules


这样就有了__install
在__install目录下
cp -r etc/init.d/ /etc/

具体驱动流程

insmod /usr/djj/ec_master.ko main_devices=36:C9:E3:F1:B8:05
depmod
insmod /usr/djj/ec_generic.ko
/usr/djj/__install/etc/init.d/ethercat start
./usr/djj/djj_mier_ak

遇到的问题

.ko版本不对
检查modinfo  和uname -a 看编译的module和使用的内核是否一致

insmod时报Invalid module format
内核加载错误:这个问题解决方法是,之前在linux上加入了rt实时补丁,现在的igh环境就用原版的ethercar4.15和linux4.9.170

make: aarch64-linux-gnu-gcc: Command not found
解决:没有加入连接环境:export LD_LIBRARY_PATH=/usr/djj/__install/lib:$LD_LIBRARY_PATH

ioctl() version magic is differing: /dev/EtherCAT0: 27, libethercat: 31.
解决:ethercat包位置不对,重做了系统,直接在__install下搞得

depmod时候报警告warning 缺少modules.order和modules.builtin
解决:在linux编译好的源码包根目录下就有,copy过来就好

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小都爱吃小橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值