☰
手把手讲解:本地移植部署openPOWERLINK
2026/9/25 21:31:19 网站建设 项目流程

1. 前期准备

1.1 PREEMPT_RT补丁

参考手把手讲解: 为linux打PREEMPT-RT实时补丁,分别为Linux PC和Zynq 7000的主线Linux kernel打上PREEMP_RT补丁。

1.2 代码下载

下载openPOWERLINK代码:
sourceforge下载地址:https://sourceforge.net/projects/openpowerlink/
git下载:git clone https://github.com/OpenAutomationTechnologies/openPOWERLINK_V2

1.3 使用手册生成

sudoaptinstalldoxygencd<openPOWERLINK_dir>/doc/software-manual doxygen

以上命令执行完毕后,在<openPOWERLINK_dir>/doc/software-manual/html路径下生成"html"格式的使用手册使用浏览器打开<openPOWERLINK_dir>/doc/software-manual/html/index.html文件,可方便查看openPOWERLNK的使用手册。

与编译移植相关的内容主要在该选项卡下
Ethernet POWERLINK
---> openPOWERLINK Stack
---> Building

也可参考gitbook中文手册:https://winshton.gitbooks.io/openpowerlink-stack-cn/content/chapter4.html

2. Linux PC端主站移植

Linux PC端采用的是VMware Ubuntu22.04虚拟机的形式,采用wsl2+Ubuntu22.04的形式也尝试过,但是程序跑不起来,会报错,原因是wsl2中的虚拟机没有虚拟出网卡硬件设备。

2.1 Building Stack Libraries

2.1.1 编译选项配置

执行以下命令行,用于生成Makefile文件。

cd<openPOWERLINK_dir>/stack/build/linux cmake-DCMAKE_BUILD_TYPE=Debug../..

执行完以上命令后输出如下。

执行完以上命令后,将在<openPOWERLINK_dir>/stack/build/linux路径下生成CMakeCache.txt文件,该文件的内容如下,可以看出该文件是开发者在使用cmake时所配置的编译参数,可以看到CMAKE_BUILD_TYPE:STRING=Debug选项的配置,与以上执行cmake时的配置一致。

# This is the CMakeCache file. # For build in directory: /home/zhy/work/openPOWERLINK_V2/stack/build/linux # It was generated by CMake: /usr/bin/cmake # You can edit this file to change values found and used by cmake. # If you do not want to change any of the values, simply exit the editor. # If you do want to change a value, simply edit, save, and exit the editor. # The syntax for the file is as follows: # KEY:TYPE=VALUE # KEY is the name of a variable in the cache. # TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. # VALUE is the current value for the KEY. ######################## # EXTERNAL cache entries ######################## //Compile openPOWERLINK CN library CFG_COMPILE_LIB_CN:BOOL=ON //Compile openPOWERLINK CN application library for kernel interface CFG_COMPILE_LIB_CNAPP_KERNELINTF:BOOL=ON //Compile openPOWERLINK CN application library for userspace CFG_COMPILE_LIB_CNAPP_USERINTF:BOOL=ON //Compile openPOWERLINK CN application library for zynq/FPGA interface CFG_COMPILE_LIB_CNAPP_ZYNQINTF:BOOL=ON //Compile openPOWERLINK CN driver library for linux userspace (pcap) CFG_COMPILE_LIB_CNDRV_PCAP:BOOL=ON //Compile openPOWERLINK CN library with simulation interface CFG_COMPILE_LIB_CN_SIM:BOOL=ON //Compile openPOWERLINK MN library CFG_COMPILE_LIB_MN:BOOL=ON //Compile openPOWERLINK MN application library for kernel interface CFG_COMPILE_LIB_MNAPP_KERNELINTF:BOOL=ON //Compile openPOWERLINK MN application library for PCIe interface CFG_COMPILE_LIB_MNAPP_PCIEINTF:BOOL=ON //Compile openPOWERLINK MN application library for userspace CFG_COMPILE_LIB_MNAPP_USERINTF:BOOL=ON //Compile openPOWERLINK MN application library for zynq/FPGA interface CFG_COMPILE_LIB_MNAPP_ZYNQINTF:BOOL=ON //Compile openPOWERLINK MN driver library for linux userspace (pcap) CFG_COMPILE_LIB_MNDRV_PCAP:BOOL=ON //Compile openPOWERLINK MN library with simulation interface CFG_COMPILE_LIB_MN_SIM:BOOL=ON //Build openPOWERLINK library as shared library CFG_COMPILE_SHARED_LIBRARY:BOOL=OFF //Debug Level for debug output CFG_DEBUG_LVL:STRING=0xC0000000L //Compile MN redundancy functions into MN libraries CFG_INCLUDE_MN_REDUNDANCY:BOOL=OFF //Support storing of OD in non-volatile memory (file system) CFG_STORE_RESTORE:BOOL=ON //Compile openPOWERLINK library with pcap edrv CFG_USE_PCAP_EDRV:BOOL=OFF //Path to a program. CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line //Path to a program. CMAKE_AR:FILEPATH=/usr/bin/ar //Choose the type of build, options are: None Debug Release RelWithDebInfo // MinSizeRel ... CMAKE_BUILD_TYPE:STRING=Debug //Enable/Disable color output during build. CMAKE_COLOR_MAKEFILE:BOOL=ON //C compiler CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc //A wrapper around 'ar' adding the appropriate '--plugin' option // for the GCC compiler CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-11 //A wrapper around 'ranlib' adding the appropriate '--plugin' option // for the GCC compiler CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-11 //Flags used by the C compiler during all build types. CMAKE_C_FLAGS:STRING= //Flags used by the C compiler during DEBUG builds. CMAKE_C_FLAGS_DEBUG:STRING=-g //Flags used by the C compiler during MINSIZEREL builds. CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG //Flags used by the C compiler during RELEASE builds. CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG //Flags used by the C compiler during RELWITHDEBINFO builds. CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG //Path to a program. CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND //Flags used by the linker during all build types. CMAKE_EXE_LINKER_FLAGS:STRING= //Flags used by the linker during DEBUG builds. CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= //Flags used by the linker during MINSIZEREL builds. CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= //Flags used by the linker during RELEASE builds. CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= //Flags used by the linker during RELWITHDEBINFO builds. CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Enable/Disable output of compile commands during generation. CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= //openPOWERLINK library install prefix CMAKE_INSTALL_PREFIX:PATH=/home/zhy/work/openPOWERLINK_V2/stack/lib/linux/x86_64 //Path to a program. CMAKE_LINKER:FILEPATH=/usr/bin/ld //Path to a program. CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake //Flags used by the linker during the creation of modules during // all build types. CMAKE_MODULE_LINKER_FLAGS:STRING= //Flags used by the linker during the creation of modules during // DEBUG builds. CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= //Flags used by the linker during the creation of modules during // MINSIZEREL builds. CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= //Flags used by the linker during the creation of modules during // RELEASE builds. CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= //Flags used by the linker during the creation of modules during // RELWITHDEBINFO builds. CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Path to a program. CMAKE_NM:FILEPATH=/usr/bin/nm //Path to a program. CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy //Path to a program. CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump //Value Computed by CMake CMAKE_PROJECT_DESCRIPTION:STATIC= //Value Computed by CMake CMAKE_PROJECT_HOMEPAGE_URL:STATIC= //Value Computed by CMake CMAKE_PROJECT_NAME:STATIC=openPOWERLINK //Path to a program. CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib //Path to a program. CMAKE_READELF:FILEPATH=/usr/bin/readelf //Flags used by the linker during the creation of shared libraries // during all build types. CMAKE_SHARED_LINKER_FLAGS:STRING= //Flags used by the linker during the creation of shared libraries // during DEBUG builds. CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= //Flags used by the linker during the creation of shared libraries // during MINSIZEREL builds. CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= //Flags used by the linker during the creation of shared libraries // during RELEASE builds. CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= //Flags used by the linker during the creation of shared libraries // during RELWITHDEBINFO builds. CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= //If set, runtime paths are not added when installing shared libraries, // but are added when building. CMAKE_SKIP_INSTALL_RPATH:BOOL=NO //If set, runtime paths are not added when using shared libraries. CMAKE_SKIP_RPATH:BOOL=NO //Flags used by the linker during the creation of static libraries // during all build types. CMAKE_STATIC_LINKER_FLAGS:STRING= //Flags used by the linker during the creation of static libraries // during DEBUG builds. CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= //Flags used by the linker during the creation of static libraries // during MINSIZEREL builds. CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= //Flags used by the linker during the creation of static libraries // during RELEASE builds. CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= //Flags used by the linker during the creation of static libraries // during RELWITHDEBINFO builds. CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= //Path to a program. CMAKE_STRIP:FILEPATH=/usr/bin/strip //If this value is on, makefiles will be generated without the // .SILENT directive, and all commands will be echoed to the console // during the make. This is useful for debugging only. With Visual // Studio IDE projects all commands are done without /nologo. CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE //Value Computed by CMake openPOWERLINK_BINARY_DIR:STATIC=/home/zhy/work/openPOWERLINK_V2/stack/build/linux //Value Computed by CMake openPOWERLINK_IS_TOP_LEVEL:STATIC=ON //Value Computed by CMake openPOWERLINK_SOURCE_DIR:STATIC=/home/zhy/work/openPOWERLINK_V2/stack ######################## # INTERNAL cache entries ######################## //ADVANCED property for variable: CMAKE_ADDR2LINE CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_AR CMAKE_AR-ADVANCED:INTERNAL=1 //This is the directory where this CMakeCache.txt was created CMAKE_CACHEFILE_DIR:INTERNAL=/home/zhy/work/openPOWERLINK_V2/stack/build/linux //Major version of cmake used to create the current loaded cache CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 //Minor version of cmake used to create the current loaded cache CMAKE_CACHE_MINOR_VERSION:INTERNAL=22 //Patch version of cmake used to create the current loaded cache CMAKE_CACHE_PATCH_VERSION:INTERNAL=1 //ADVANCED property for variable: CMAKE_COLOR_MAKEFILE CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 //Path to CMake executable. CMAKE_COMMAND:INTERNAL=/usr/bin/cmake //Available Build Configurations CMAKE_CONFIGURATION_TYPES:INTERNAL=Debug;Release //Path to cpack program executable. CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack //Path to ctest program executable. CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest //ADVANCED property for variable: CMAKE_C_COMPILER CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_COMPILER_AR CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_FLAGS CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_DLLTOOL CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 //Path to cache edit program executable. CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/cmake-gui //Executable file format CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 //Name of external makefile project generator. CMAKE_EXTRA_GENERATOR:INTERNAL= //Name of generator. CMAKE_GENERATOR:INTERNAL=Unix Makefiles //Generator instance identifier. CMAKE_GENERATOR_INSTANCE:INTERNAL= //Name of generator platform. CMAKE_GENERATOR_PLATFORM:INTERNAL= //Name of generator toolset. CMAKE_GENERATOR_TOOLSET:INTERNAL= //Source directory with the top level CMakeLists.txt file for this // project CMAKE_HOME_DIRECTORY:INTERNAL=/home/zhy/work/openPOWERLINK_V2/stack //Install .so files without execute permission. CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 //ADVANCED property for variable: CMAKE_LINKER CMAKE_LINKER-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MAKE_PROGRAM CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_NM CMAKE_NM-ADVANCED:INTERNAL=1 //number of local generators CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=13 //ADVANCED property for variable: CMAKE_OBJCOPY CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_OBJDUMP CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 //Platform information initialized CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 //ADVANCED property for variable: CMAKE_RANLIB CMAKE_RANLIB-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_READELF CMAKE_READELF-ADVANCED:INTERNAL=1 //Path to CMake installation. CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.22 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_SKIP_RPATH CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 //ADVANCED property for variable: CMAKE_STRIP CMAKE_STRIP-ADVANCED:INTERNAL=1 //uname command CMAKE_UNAME:INTERNAL=/usr/bin/uname //ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1

也可以通过cmake-gui通过图形界面的形式对编译选项做自定义配置,这种方式更方便。

sudoaptinstallcmake-gui // 安装camke-gui工具 cmake-gui.// 读取当前文件夹下的CMakeCache.txt文件,并打开图形配置界面

执行以上命令后,图形配置界面如下所示,具体每个配置选项的含义可以查看所生成的使用手册,对相应的配置选项进行配置,然后点击Configure按钮,将会生成基于新的配置参数的CMakeCache.txt文件,再点击Generate按钮,将会生成新的Makefile文件。这里使用默认的配置选项就可以。

Configure、Generate成功后,输出如下:

2.1.2 编译安装

执行以下命令,将会编译并将生成的静态链接库文件放置在编译配置选项CMAKE_INSTALL_PREFIX所定义的文件路径下,默认的安装路径为<openPOWERLINK_dir>/stack/lib/<OS_type>/<Processor_type>,在当前场景下为<openPOWERLINK_dir>/stack/lib/linux/x86_64,linux/x86_64是在cmake工具读取到的操作系统及处理器架构类型。

make-j$(nproc)makeinstall

如下所示,在CMAKE_INSTALL_PREFIX所定义的文件路径下生成了如下动态链接库文件,其中*_d.a命名格式的为CMAKE_BUILD_TYPE 选项配置为 Debug时生成的,*.a命名格式的为CMAKE_BUILD_TYPE 选项配置为 Release时生成的。

2.2 Building openPOWERLINK Demo Applications

2.2.1 编译选项配置

以PC端作为MN管理节点,编译的应用示例选择demo_mn_qt。

sudoaptinstalllibpcap-dev // 安装libpcapcd<openPOWERLINK_dir>/apps/demo_mn_qt/build/linux cmake-DCMAKE_BUILD_TYPE=Debug../..

同样的在这里也可以使用cmake-gui .进行更进一步的编译选项配置。这里按照默认的配置设置就好。需要注意的是,在CMAKE_BUILD_TYPE 选项设置为 Debug时,相应的openPOWERLINK协议栈库文件路径
OPLKLIB_DEBUG 选项设置为 <openPOWERLINK_dir>/stack/lib/linux/x86_64/liboplkmn_d.a,若在2.1.1节中设置的库文件安装路径与默认的不一致,或者两者的CMAKE_BUILD_TYPE选项设置不一致,将会因为找不到openPOWERLINK协议栈库文件,而导致无法生成Makefile文件。

2.2.2 编译安装

执行以下命令,将会编译并将生成的动态链接库文件放置在编译配置选项CMAKE_INSTALL_PREFIX所定义的文件路径下,默认的安装路径为<openPOWERLINK_dir>/bin/<OS_type>/<Processor_type>/demo_mn_qt,在当前场景下为<openPOWERLINK_dir>/bin/linux/x86_64/demo_mn_qt。

make-j$(nproc)makeinstall

生成的可执行文件如下,其中set_prio为脚本文件,用于为特定的网络端口指定线程优先级,mnobd.cdc为POWERLINK的网络配置文件,demo_mn_qt为主站可执行程序。

3. Zynq 7000端从站移植

3.1 准备工作

3.1.1 交叉编译工具链

需事先在Linux虚拟机上(VMware/wsl2中的均可,这里的虚拟机只是提供一个进行交叉编译的平台环境)安装Vivado,这里安装的版本为2018.3。安装完之后交叉编译工具链也将随之安装,其路径为<Vivado2018.3_dir>/SDK/2018.3/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin,如下。

执行以下source命令,将交叉编译工具链的路径添加到PATH中

source<Vivado2018.3_dir>/SDK/2018.3/settings64.sh // export交叉编译工具链的path


修改<openPOWERLINK_dir>/cmake/toolchain-xilinx-vivado-arm-linux-eabi-gnu.cmake文件,如下所示,将参数XILINX_SDK_DIR设置为Vivado SDK的安装路径。

3.1.2 libpcap交叉编译

在后续交叉编译zynq 7000的应用程序时,需要libpcap链接库,所以需要提前将其交叉编译出来。操作如下,其中--prefix=<install_path>是自定义的安装路径。

wgethttps://www.tcpdump.org/release/libpcap-1.10.4.tar.gz // 下载tar-xflibpcap-1.10.4.tar.gz // 解压缩cdlibpcap-1.10.4 ./configure--host=arm-linux-gnueabihf--prefix=<libpcap_install_path>--with-pcap=linux --disable-dbus --disable-bluetooth --disable-usbmake-j$(nproc)makeinstall

交叉编译并install之后,将在<libpcap_install_path>/lib下生成交叉编译得到的链接库文件,其中libpcap.a是静态链接库文件,libpcap.so.1.10.4是动态链接库文件。


<libpcap_install_path>/bin/pcap-config可执行脚本,作用就是把编译、链接libpcap时需要的参数一次性打印出来,方便在 Makefile 或命令行里直接引用。

3.2 Building Stack Libraries

3.2.1 编译选项配置

执行以下命令行,用于生成Makefile文件。

cd<openPOWERLINK_dir>/stack/build/linux cmake-DCMAKE_TOOLCHAIN_FILE=<openPOWERLINK_dir>/cmake/toolchain-xilinx-vivado-arm-linux-eabi-gnu.cmake-DCMAKE_BUILD_TYPE=Debug../..

执行完以上命令后输出如下。

也可以通过cmake-gui通过图形界面的形式对编译选项做自定义配置,这种方式更方便。

sudoaptinstallcmake-gui# 安装camke-gui工具cmake-gui.# 读取当前文件夹下的CMakeCache.txt文件,并打开图形配置界面

执行以上命令后,图形配置界面如下所示,另外可以看到默认的安装路径CMAKE_INSTALL_PREFIX=<openPOWERLINK_dir>/stack/lib/<OS_type>/<processor_type>,其中OS_type和processor_type由CMAKE_TOOLCHAIN_FILE参数得到。

3.2.2 编译安装

执行以下命令,将会编译并将生成的动态链接库文件放置在编译配置选项CMAKE_INSTALL_PREFIX所定义的文件路径下,默认的安装路径为<openPOWERLINK_dir>/stack/lib/<OS_type>/<Processor_type>,在当前场景下为<openPOWERLINK_dir>/stack/lib/linux/arm,linux/arm是通过CMAKE_TOOLCHAIN_FILE参数的文件读取到的操作系统及处理器架构类型。

make-j$(nproc)makeinstall

如下所示,在CMAKE_INSTALL_PREFIX所定义的文件路径下生成了如下静态链接库文件。

3.3 Building openPOWERLINK Demo Applications

3.3.1 编译选项配置

以zynq 7000作为CN受控节点,编译的应用示例选择demo_cn_console。在执行cmake时CMAKE_TOOLCHAIN_FILE选项用于指定交叉编译配置文件路径,PCAP_CONFIG选项用于指定libpcap交叉编译生成的pcap-config文件的路径

cd<openPOWERLINK_dir>/apps/demo_cn_console/build/linux cmake-DCMAKE_BUILD_TYPE=Debug-DCMAKE_TOOLCHAIN_FILE=<openPOWERLINK_dir>/cmake/toolchain-xilinx-vivado-arm-linux-eabi-gnu.cmake-DPCAP_CONFIG=<libpcap_install_path>/bin/pcap-config..

同样的在这里也可以使用cmake-gui .进行更进一步的编译选项配置。

执行完以上命令后,输出如下:

3.3.2 编译安装

执行以下命令,将会编译并将生成的动态链接库文件放置在编译配置选项CMAKE_INSTALL_PREFIX所定义的文件路径下,默认的安装路径为<openPOWERLINK_dir>/bin/<OS_type>/<Processor_type>/demo_cn_console,在当前场景下为<openPOWERLINK_dir>/bin/linux/arm/demo_cn_console。

make-j$(nproc)makeinstall

生成的可执行文件如下:

3.4 二进制文件复制

执行以下命令,由输出可知,经过交叉编译生成的demo_cn_console文件是适用于ARM架构的,结果无误,并且其是dynamically linked动态链接的,通过readelf -d命令可得到其动态链接的库文件有libpcap.so.1、libpthread.so.0、librt.so.1、libc.so.6。

filedemo_cn_console readelf-ddemo_cn_console

在Zynq 7000的/lib文件夹下,libpthread.so.0、librt.so.1、libc.so.6三个动态链接库文件是本身就具备的,所以只需要将3.1.2章节中生成的libpcap的动态链接库文件复制到Zynq 7000的/lib文件夹下就可以了。

另外需要将本节生成的demo_cn_console可执行文件和set_prio脚本文件复制到用户文件夹。

4. 运行抓包

4.1 VMware虚拟机的配置

VMware虚拟机需采用物理网口直连的方式与开发板进行通信,需做以下配置

  1. 新增一个新的桥接模式的网络适配器

  1. VMware菜单栏-->编辑-->虚拟网络编辑器-->更改设置

  1. 将桥接模式中已桥接至由自动修改为PC实际的物理网卡,然后确定。

4.2 demo运行

在zynq 7000中执行demo_cn_console,执行结果如下:

在Linux PC端运行主站demo程序:

4.3 运行结果

Start POWERLINK在弹出框中选择相应的物理网口,相应的节点发现后,将会显示在界面中,在从站点击i/d,Digital Inputs中的LED将相应亮起,在从站点击p,从站将获取Digital Outputs中亮起的LED的位置。

5. 其他相关

5.1 tcpdump的交叉编译

如果想在zynq 7000侧进行抓包,如果根文件系统没有tcpdump,也没有类apt的包管理工具,需要交叉编译tcpdump。

wgethttps://www.tcpdump.org/release/tcpdump-4.99.4.tar.xztar-xftcpdump-4.99.4.tar.xzcdtcpdump-4.99.4/ ./configure--host=arm-linux-gnueabihf--prefix=<tcpdump_install_path>--with-pcap=linux --disable-dbus --disable-bluetooth --disable-usbmake-j$(nproc)makeinstall

执行完之后在<tcpdump_install_path>/bin目录下生成二进制的可执行文件,将tcpdump可执行文件复制到zynq 7000的/bin或者/usr/bin路径下即可。

如果对你有帮助,欢迎点赞收藏,有相关问题也可以评论讨论

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询