Powerlink协议在嵌入式linux上的移植和测试(电脑和linux板通信实验)

news2024/12/23 7:38:40

使用最新的openPOWERLINK 2.7.2源码,业余时间搞定了Powerlink协议在嵌入式linux上的移植和测试,并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置,跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的人。在嵌入式linux下的移植还是蛮简单的,相信即便移植到单片机中也不是什么难事。挺好玩的,感兴趣的可以尝试尝试。

测试结果

QT的demo运行在64位的win10 电脑上,从站的demo运行在嵌入式linux开发板上。板子的网口连接在局域网内的任一根网线。使用的linux开发板配置并不高也比较老了。周立功的EasyARM-iMX283开发板,板子不到一百块。主频454M,内存64M,FLASH 128M,板子系统内核linux-2.6.35.3。

先附一张测试的效果图,如下:

在测试demo的从站中,输入按键i,能看到主站上Digital Inputs的绿色灯发声了变化。(Press i to increase the digital input)PDO的映射关系如下:

运行demo:

chmod +x demo_cn_console
export LD_LIBRARY_PATH=$(pwd)
./demo_cn_console

linux板子上从站启动内容: 

移植准备

1.电脑虚拟机中的linux环境,之前一直使用的是Ubuntu14.14和18.08,这次体验使用了下最新国产深度deepin系统社区版(23),体验真不错挺好用,界面也漂亮。deepin系统配置下阿里的镜像源(/etc/apt文件夹中的sources.list文件),添加阿里镜像:

deb [by-hash=force] https://mirrors.aliyun.com/deepin apricot main contrib non-free

内容如下:

## Generated by deepin-installer
deb https://community-packages.deepin.com/beige/ beige main commercial community
#deb-src https://community-packages.deepin.com/beige/ beige main commercial community
deb [by-hash=force] https://mirrors.aliyun.com/deepin apricot main contrib non-free

2.openpowerlink最新版本源码:Download openPOWERLINK

3.libpcap 库的交叉编译,我使用的 libpcap库是libpcap-1.10.4.tar.gz,下载地址:https://www.tcpdump.org/release/libpcap-1.10.4.tar.gz

4.cmake环境安装 

deepin系统下安装cmake很简单的,直接sudo apt-get install cmake即可。

移植过程

交叉编译工具链配置

我使用的是板子配套提供的arm-gcc工具链gcc-4.4.4-glibc-2.11.1-multilib-1.0,放到了/opt/arm的目录下。在openpowerlink的源码的cmake目录下,新建文件:toolchain-imax283-arm-linux.cmake,用来配置你的交叉编译工具链。内容如下:

################################################################################
# Name of the target platform
#set(CMAKE_C_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc")
#set(CMAKE_CXX_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-g++")

SET(ARM_TOOLCHAIN_DIR /opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0 CACHE STRING "imax283 arm toolchain path")

################################################################################
# Name of the target platform
SET(CMAKE_SYSTEM ARM-linux-eabihf)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)

# Version of the system
SET(CMAKE_SYSTEM_VERSION 1)

# specify the cross compiler
set(CMAKE_C_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc")
set(CMAKE_CXX_COMPILER "/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-g++")

#SET(CMAKE_C_COMPILER arm-fsl-linux-gnueabi-gcc)
#SET(CMAKE_CXX_COMPILER arm-fsl-linux-gnueabi-g++)
#SET(CMAKE_ASM-ATT_COMPILER arm-fsl-linux-gnueabi-as)

SET(CMAKE_FIND_ROOT_PATH ${ARM_TOOLCHAIN_DIR}/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries in the target and build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
# for headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# cross compiler directives
SET(MAKE_KERNEL_ARCH arm)
SET(MAKE_KERNEL_CROSS_COMPILE ${ARM_TOOLCHAIN_DIR}/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-)

libpcap库的移植

在deepin系统下编译libpcap库源码需要先安装依赖bison和flex。

bison和flex这两个是啥?平常很少接触到,因为这两个看着有点儿高深,跟编译器开发相关的。如果你的deepin包更新错了,以下换个可能用到:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/dbus_1.12.20.6-1+deepin_amd64.deb

以下内容作为科普,可以忽略:(Bison和Flex是生成解析器的工具。Bison是一种生成LR(1)语法分析器的工具,它可以根据语法规则和动作代码生成C代码的解析器。而Flex是一种用于生成词法分析器的工具,它可以将输入的词素(token)流转换为C代码的词法分析器。

Pcap库是一种用于网络数据包捕获和分析的C库。在编译安装Pcap库时,需要Bison和Flex工具的支持,这是因为Pcap库使用Bison和Flex来生成解析网络数据包的C代码。

在Pcap中,Bison和Flex主要用于将Pcap的数据包解析规则转换为C代码。由于Pcap支持多种协议,因此需要一种机制来定义这些协议的数据包格式。这就是Bison和Flex的作用所在。 具体来说,Bison用于解析语法规则和动作代码,然后生成C代码的解析器。而Flex则用于将数据包转换为词汇单元。这些词汇单元可以是Ethernet帧的源和目的MAC地址、IP包的源和目的IP地址等等。一旦词汇单元被产生,Bison就会使用它们来解析数据包的语法规则。 例如,假设我们想要解析网络中的HTTP数据包。我们需要定义HTTP数据包的格式,包括请求行、头部、正文等等。使用Bison和Flex,我们可以将HTTP数据包的格式转换为语法规则和动作代码,然后生成C代码的解析器。这个解析器可以将HTTP数据包转换为语法树,并提供一个易于使用的API,以便我们可以提取出HTTP请求的相关信息。)

安装依赖:

sudo apt-get install bison

sudo apt-get install flex

pacp源码编译:

接下来进入libpcap源码目录,设置临时环境变量,让能找到交叉编译工具链。

export PATH=/opt/arm/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin:$PATH

接下来:

//1.
cd libpcap-1.10.4/
//2.
export CC=arm-fsl-linux-gnueabi-gcc
//3.
./configure --host=arm-linux --with-pcap=linux

//4.最后,make,make install
make

make install

openpowerlink库的移植

进入openpowerlink源码的stack的build目录,新建个arm-linux文件夹。进入到此文件夹下,开始执行cmake命令。这时之前配的交叉工具链toolchain-imax283-arm-linux.cmake派上了用途。如下:

cmake -DCMAKE_TOOLCHAIN_FILE=../../../cmake/toolchain-imax283-arm-linux.cmake ../.. -DCMAKE_BUILD_TYPE=Release -DCFG_COMPILE_LIB_[LIB_NAME]=ON -DCFG_COMPILE_LIB_[LIB_NAME]_LIB_DIR=[PATH_TO_HW_LIB]

最后把需要的liboplkcn.a这个协议栈静态库放到以下路径下,供编译从站的那个demo使用。

cp liboplkcn.a /home/test/openpowerlink/stack/lib/linux/liboplkcn.a

主站demo_mn_qt源码编译

主站demo_mn_qt的编译,这个简单就不介绍了。这个主站是跑在电脑上的,不用交叉编译。只要windows电脑上有cmake环境和msvc或mingw工具链,编译没什么问题,需要把stack协议栈库和demo_mn_qt都编译。

从站demo源码的编译

在以上条件都就绪的前提下,编译从站的那个demo也很简单了。直接进入apps/demo_cn_console目录下,同样再进入build目录,新建个arm-linux文件夹并进入。最后执行以下cmake指令即可。

cmake -DCMAKE_TOOLCHAIN_FILE=../../../cmake/toolchain-imax283-arm-linux.cmake ../.. -DCMAKE_BUILD_TYPE=Release 

 demo_cn_consloe交叉编译成功:

板子上运行验证

需要用到libpcap.so.1这个编译过的库,放到板子上。运行测试通信成功。按i键改变从站中的值可以看到主站这个demo界面上的Digital Inputs的绿色灯移动。

其他资源

openPOWERLINK: Building openPOWERLINK Stack Libraries

单片机+PHY芯片+Powerlink协议实现高效数据采集探究(工业总线485和CAN的升级)_特立独行的猫a的博客-CSDN博客

交叉编译libpcap_libpcap交叉编译_佚名网友的博客-CSDN博客

Generic Netlink分析和使用_庾志辉的博客-CSDN博客

flex与bison_百度百科

解决错误apt --fix-broken install_子翊寒的博客-CSDN博客

关于deepin应用商店一直显示正在安装&&安装时出现有未能满足的依赖关系的解决方法_deepin依赖关系不满足_ぃ未来可期的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4。计算机组成原理(4)CPU

嵌入式软件开发,非科班专业必须掌握的基本计算机知识 核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 CPU(中央处理器)是计算机的核心部件,它主要负责执行计算机指令&#xff0c…

万字超详细的Java图书管理系统

💕”生命中的每个人都是一个故事,而每个故事都值得被讲述“💕 🎆作者:不能再留遗憾了🎆 🐼专栏:Java学习🐼 🚗该文章主要内容:用Java实现简单的图…

三、PEMFC基础之组件间热传导

三、PEMFC基础之组件间热传导 一、理论基础二、编程实践 一、理论基础 热传导主要基于傅里叶热传导定律。在燃料电池中,除了各组件内部的热传导外,还有冷却流体与双极板的对流换热。公式略。 燃料电池内部稳态导热: d 2 T d x 2 q i n t k…

iMazing2软件最新版本功能技术参数详细介绍

这里有iMazing 的产品概述、功能特性、技术参数等详细介绍, 可以帮助您快速入门,了解iMazing的功能。不管是 iPhone、iPad 或 iPod Touch 设备,只要使用 USB 电缆将设备连接到计算机,就可以处理不同类型的数据。 自动备份 iMazi…

【Linux】基础IO——文件描述符

目录 什么是文件描述符标准输入、输出、错误的返回值类型FILE*的理解进程中文件描述符的分配规则重定向的原理重定向的实际使用方法dup2 如何理解缓冲区 什么是文件描述符 在基础IO的上一篇博客里有提到过,系统调用open与close的返回值问题: 成功返回文…

PyQGIS中一次性加载多个shp文件

目录 遍历添加多个图层 打印图层列表清单 打开QGIS Desktop 3.22.16,点击菜单栏 【设置】——>【Python控制台】 在Python控制台中点击【显示编辑器】按钮,打开Python编辑器 点击Python编辑器的第一个按钮 【打开脚本文件】,选择加载遍历…

2023年继续使用WordPress的6个最重要原因

为什么要使用 WordPress?我的网站不够好吗?为什么我需要从另一个平台切换到 WordPress? 在本文中,我们将分享您应该使用 WordPress 的最重要原因。我们还将涵盖您可以使用 WordPress 创建的所有不同类型的网站,并展示…

c高级(常用命令及软件安装与下载)

初始工作路径不在家目录下,在不切换路径的情况下,在家目录下创建一个subdir目录,在subdir这个目录下,创建subdir1和subdir2,并且把/etc/passwd拷贝到subdir1中,把/etc/group文件拷贝到subdir2中&#xff0c…

开源趣事~ 记给 OpenHarmony 提 PR 的那些事

大家好哇,许久不见,也感谢大家这么久一直以来的关注,也感谢在短视频盛行的今天,你们还能静下心来坚守文字的阵地。 说到这次的主题,参加鸿蒙项目的开源,也是小编第一次拥抱开源,就像是别人有困…

vue脚手架+elementUI,实现登录用户时的Loading...窗口

文章目录 App.vuevuex全局变量登陆成功Login组件使用AboutMe组件中关闭 登录失败情况login组件中关闭 改为aop思想的请求拦截器 App.vue 为了全局通用控制此标签&#xff0c;所以我建议把他放到App.vue文件中 <!--全局加载ing&#xff0c;保证不会在转换组件时被销毁-->…

Day965.从持续集成到持续部署 -遗留系统现代化实战

从持续集成到持续部署 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于从持续集成到持续部署的内容。 只有做好任务分解和小步提交&#xff0c;才能放心大胆地 PUSH 代码&#xff0c;触发持续构建&#xff1b; 只有通过质量门禁&#xff0c;才能得到一个有信心的制…

【Spring MVC】Spring MVC的执行流程以及运行原理

文章目录 一、 什么是MVC&#xff1f;二、什么是SpringMVC&#xff1f;三、SpringMVC中的核心组件四、SpringMVC的执行流程五、关于DispatcherServlet的配置说明六、关于SpringMVC的配置文件以及常用部分注解解释七、参考资料 一、 什么是MVC&#xff1f; MVC 是 Model、View …

软件工程的基础

软件危机软件工程软件工程是将系统化的&#xff0c;严格约束的&#xff0c;可量化的方法应用于软件的开发&#xff0c;运行和维护&#xff0c;将工程应用于软件。 软件工程的三个要素&#xff1a;方法&#xff0c;工具&#xff0c;过程软件的生命周期&#xff0c;是指从从软…

Vue列表展示【第二篇】

&#x1f331; 1、vue列表展示案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vueDemo02列表展示</title> </head> <body> <div id"xy"><!--原始展示方式…

深入篇【C++】类与对象:运算符重载详解 -(下)+日期类的实现

[TOC](深入篇【C】类与对象&#xff1a;运算符重载详解-(下&#xff09;日期类的实现&#x1f4af;干货满满&#xff01;) ⏰一.运算符重载 内置类型(int /double…… )是可以之间进行运算符之间的比较的&#xff0c;因为编译器知道它们之间的比较规则&#xff0c;可以之间转…

Linux下C/C++(端口扫描技术)

随着互联网使用的不断增加&#xff0c;网络攻击也在增加。互联网本质上已经成为现代。因此&#xff0c;了解互联网和使用互联网是非常重要的。网络技术的安全性在当今时代是非常重要和必要的。 在本文中&#xff0c;我们将讨论一个非常重要的主题&#xff0c;即可能破坏计算机…

es 7.x 通过DSL的常用查询语句

一 模拟造数 1.1 模拟数据 添加数据修改数据的请求方式为post http://localhost:9200/student/_doc/101 { "name":"zhangsan", "nickname":"zhangsan","sex":"男","age":30,"createTime":…

InnoDB线程模型

新版本结构演变 MySQL 5.7 版本 将 Undo日志表空间从共享表空间 ibdata 文件中分离出来&#xff0c;可以在安装 MySQL 时由用户自行指定文件大小和数量增加了 temporary 临时表空间&#xff0c;里面存储着临时表或临时查询结果集的数据Buffer Pool 大小可以动态修改&#xff0…

2.3 利用NumPy进行统计分析

2.3 利用NumPy进行统计分析 2.3.1 读/写文件1、二进制的文件读写2、读取文本格式的数据 2.3.2 使用数组进行简单统计分析1、排序2、去重与重复数据3、常用的统计函数 2.3.1 读/写文件 NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式 1、二进制的文件读…

代码随想录算法训练营第三十六天 | 重叠区间

435. 无重叠区间 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;贪心算法&#xff0c;依然是判断重叠区间 | LeetCode&#xff1a;435.无重叠区间_哔哩哔哩_bilibili 状态&#xff1a;能做出来&#xff0c;用的“补充(1)”的左边界排序&#xff0c…