ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

手把手讲解:本地移植部署openPOWERLINK

手把手讲解:本地移植部署openPOWERLINK 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_V21.3 使用手册生成sudoaptinstalldoxygencdopenPOWERLINK_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.html2. Linux PC端主站移植Linux PC端采用的是VMware Ubuntu22.04虚拟机的形式采用wsl2Ubuntu22.04的形式也尝试过但是程序跑不起来会报错原因是wsl2中的虚拟机没有虚拟出网卡硬件设备。2.1 Building Stack Libraries2.1.1 编译选项配置执行以下命令行用于生成Makefile文件。cdopenPOWERLINK_dir/stack/build/linux cmake-DCMAKE_BUILD_TYPEDebug../..执行完以上命令后输出如下。执行完以上命令后将在openPOWERLINK_dir/stack/build/linux路径下生成CMakeCache.txt文件该文件的内容如下可以看出该文件是开发者在使用cmake时所配置的编译参数可以看到CMAKE_BUILD_TYPE:STRINGDebug选项的配置与以上执行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:TYPEVALUE # 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:BOOLON //Compile openPOWERLINK CN application library for kernel interface CFG_COMPILE_LIB_CNAPP_KERNELINTF:BOOLON //Compile openPOWERLINK CN application library for userspace CFG_COMPILE_LIB_CNAPP_USERINTF:BOOLON //Compile openPOWERLINK CN application library for zynq/FPGA interface CFG_COMPILE_LIB_CNAPP_ZYNQINTF:BOOLON //Compile openPOWERLINK CN driver library for linux userspace (pcap) CFG_COMPILE_LIB_CNDRV_PCAP:BOOLON //Compile openPOWERLINK CN library with simulation interface CFG_COMPILE_LIB_CN_SIM:BOOLON //Compile openPOWERLINK MN library CFG_COMPILE_LIB_MN:BOOLON //Compile openPOWERLINK MN application library for kernel interface CFG_COMPILE_LIB_MNAPP_KERNELINTF:BOOLON //Compile openPOWERLINK MN application library for PCIe interface CFG_COMPILE_LIB_MNAPP_PCIEINTF:BOOLON //Compile openPOWERLINK MN application library for userspace CFG_COMPILE_LIB_MNAPP_USERINTF:BOOLON //Compile openPOWERLINK MN application library for zynq/FPGA interface CFG_COMPILE_LIB_MNAPP_ZYNQINTF:BOOLON //Compile openPOWERLINK MN driver library for linux userspace (pcap) CFG_COMPILE_LIB_MNDRV_PCAP:BOOLON //Compile openPOWERLINK MN library with simulation interface CFG_COMPILE_LIB_MN_SIM:BOOLON //Build openPOWERLINK library as shared library CFG_COMPILE_SHARED_LIBRARY:BOOLOFF //Debug Level for debug output CFG_DEBUG_LVL:STRING0xC0000000L //Compile MN redundancy functions into MN libraries CFG_INCLUDE_MN_REDUNDANCY:BOOLOFF //Support storing of OD in non-volatile memory (file system) CFG_STORE_RESTORE:BOOLON //Compile openPOWERLINK library with pcap edrv CFG_USE_PCAP_EDRV:BOOLOFF //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:STRINGDebug //Enable/Disable color output during build. CMAKE_COLOR_MAKEFILE:BOOLON //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:FILEPATHCMAKE_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:STATICopenPOWERLINK //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:BOOLNO //If set, runtime paths are not added when using shared libraries. CMAKE_SKIP_RPATH:BOOLNO //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:BOOLFALSE //Value Computed by CMake openPOWERLINK_BINARY_DIR:STATIC/home/zhy/work/openPOWERLINK_V2/stack/build/linux //Value Computed by CMake openPOWERLINK_IS_TOP_LEVEL:STATICON //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:INTERNAL1 //ADVANCED property for variable: CMAKE_AR CMAKE_AR-ADVANCED:INTERNAL1 //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:INTERNAL3 //Minor version of cmake used to create the current loaded cache CMAKE_CACHE_MINOR_VERSION:INTERNAL22 //Patch version of cmake used to create the current loaded cache CMAKE_CACHE_PATCH_VERSION:INTERNAL1 //ADVANCED property for variable: CMAKE_COLOR_MAKEFILE CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL1 //Path to CMake executable. CMAKE_COMMAND:INTERNAL/usr/bin/cmake //Available Build Configurations CMAKE_CONFIGURATION_TYPES:INTERNALDebug;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:INTERNAL1 //ADVANCED property for variable: CMAKE_C_COMPILER_AR CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_C_FLAGS CMAKE_C_FLAGS-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_DLLTOOL CMAKE_DLLTOOL-ADVANCED:INTERNAL1 //Path to cache edit program executable. CMAKE_EDIT_COMMAND:INTERNAL/usr/bin/cmake-gui //Executable file format CMAKE_EXECUTABLE_FORMAT:INTERNALELF //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL1 //Name of external makefile project generator. CMAKE_EXTRA_GENERATOR:INTERNAL //Name of generator. CMAKE_GENERATOR:INTERNALUnix 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:INTERNAL1 //ADVANCED property for variable: CMAKE_LINKER CMAKE_LINKER-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_MAKE_PROGRAM CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_NM CMAKE_NM-ADVANCED:INTERNAL1 //number of local generators CMAKE_NUMBER_OF_MAKEFILES:INTERNAL13 //ADVANCED property for variable: CMAKE_OBJCOPY CMAKE_OBJCOPY-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_OBJDUMP CMAKE_OBJDUMP-ADVANCED:INTERNAL1 //Platform information initialized CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL1 //ADVANCED property for variable: CMAKE_RANLIB CMAKE_RANLIB-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_READELF CMAKE_READELF-ADVANCED:INTERNAL1 //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:INTERNAL1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_SKIP_RPATH CMAKE_SKIP_RPATH-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL1 //ADVANCED property for variable: CMAKE_STRIP CMAKE_STRIP-ADVANCED:INTERNAL1 //uname command CMAKE_UNAME:INTERNAL/usr/bin/uname //ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL1也可以通过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_64linux/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 Applications2.2.1 编译选项配置以PC端作为MN管理节点编译的应用示例选择demo_mn_qt。sudoaptinstalllibpcap-dev // 安装libpcapcdopenPOWERLINK_dir/apps/demo_mn_qt/build/linux cmake-DCMAKE_BUILD_TYPEDebug../..同样的在这里也可以使用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中sourceVivado2018.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链接库所以需要提前将其交叉编译出来。操作如下其中--prefixinstall_path是自定义的安装路径。wgethttps://www.tcpdump.org/release/libpcap-1.10.4.tar.gz // 下载tar-xflibpcap-1.10.4.tar.gz // 解压缩cdlibpcap-1.10.4 ./configure--hostarm-linux-gnueabihf--prefixlibpcap_install_path--with-pcaplinux --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 Libraries3.2.1 编译选项配置执行以下命令行用于生成Makefile文件。cdopenPOWERLINK_dir/stack/build/linux cmake-DCMAKE_TOOLCHAIN_FILEopenPOWERLINK_dir/cmake/toolchain-xilinx-vivado-arm-linux-eabi-gnu.cmake-DCMAKE_BUILD_TYPEDebug../..执行完以上命令后输出如下。也可以通过cmake-gui通过图形界面的形式对编译选项做自定义配置这种方式更方便。sudoaptinstallcmake-gui# 安装camke-gui工具cmake-gui.# 读取当前文件夹下的CMakeCache.txt文件并打开图形配置界面执行以上命令后图形配置界面如下所示另外可以看到默认的安装路径CMAKE_INSTALL_PREFIXopenPOWERLINK_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/armlinux/arm是通过CMAKE_TOOLCHAIN_FILE参数的文件读取到的操作系统及处理器架构类型。make-j$(nproc)makeinstall如下所示在CMAKE_INSTALL_PREFIX所定义的文件路径下生成了如下静态链接库文件。3.3 Building openPOWERLINK Demo Applications3.3.1 编译选项配置以zynq 7000作为CN受控节点编译的应用示例选择demo_cn_console。在执行cmake时CMAKE_TOOLCHAIN_FILE选项用于指定交叉编译配置文件路径PCAP_CONFIG选项用于指定libpcap交叉编译生成的pcap-config文件的路径cdopenPOWERLINK_dir/apps/demo_cn_console/build/linux cmake-DCMAKE_BUILD_TYPEDebug-DCMAKE_TOOLCHAIN_FILEopenPOWERLINK_dir/cmake/toolchain-xilinx-vivado-arm-linux-eabi-gnu.cmake-DPCAP_CONFIGlibpcap_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虚拟机需采用物理网口直连的方式与开发板进行通信需做以下配置新增一个新的桥接模式的网络适配器VMware菜单栏--编辑--虚拟网络编辑器--更改设置将桥接模式中已桥接至由自动修改为PC实际的物理网卡然后确定。4.2 demo运行在zynq 7000中执行demo_cn_console执行结果如下在Linux PC端运行主站demo程序4.3 运行结果Start POWERLINK在弹出框中选择相应的物理网口相应的节点发现后将会显示在界面中在从站点击i/dDigital 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--hostarm-linux-gnueabihf--prefixtcpdump_install_path--with-pcaplinux --disable-dbus --disable-bluetooth --disable-usbmake-j$(nproc)makeinstall执行完之后在tcpdump_install_path/bin目录下生成二进制的可执行文件将tcpdump可执行文件复制到zynq 7000的/bin或者/usr/bin路径下即可。如果对你有帮助欢迎点赞收藏有相关问题也可以评论讨论
返回列表