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

news2025/2/28 6:38:43

使用最新的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

更简单的移植

以上的移植过程,依赖了pcap这一网络库,所以看着稍微麻烦些。通过查看驱动源码,stack\src\kernel\edrv下面有个edrv-rawsock_linux.c,通过使用原始套接字直接操作链路层的mac帧,也是可以的。这样就可以不用非得安装pcap这个库了。修改cmake编译开关如下即可:

如果嫌开关有点儿多,也可以在stack\cmake\options-linux.cmake文件中修改,关掉不需要的选项。

root@hecs-287347:~/test/powerlink/stack/build/arm-linux# cmake -DCMAKE_TOOLCHAIN_FILE=../../../cmake/toolchain-imax283-arm-linux.cmake ../.. -DCMAKE_BUILD_TYPE=Release  -DCFG_COMPILE_LIB_CNDRV_PCAP=OFF -DCFG_COMPILE_LIB_MNDRV_PCAP=OFF  -DCFG_COMPILE_LIB_MNAPP_PCIEINTF=OFF -DCFG_COMPILE_LIB_MNAPP_ZYNQINTF=OFF -DCFG_COMPILE_LIB_CNAPP_ZYNQINTF=OFF

编译日志如下:

42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/generic.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/processimage.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/sdotest.c.o
[ 42%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/api/service.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdu.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdal.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/dll/dllucal.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventu.c.o
[ 43%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtcnu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/nmtmnu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/identu.c.o
[ 44%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/statusu.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/nmt/syncu.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdou.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucal.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucal-triplebufshm.c.o
[ 45%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdotest-com.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdotest-seq.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom-dummy.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocom-std.c.o
[ 46%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocomsrv.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdocomclt.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoseq.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoasnd.c.o
[ 47%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoudp.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timesync/timesyncu.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/errhnd/errhndu.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/ctrl/ctrlu.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/sdo/sdoudp-linux.c.o
[ 48%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/ctrl/ctrlucal-direct.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/dll/dllucal-circbuf.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/errhnd/errhnducal-local.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventucal-linux.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/event/eventucalintf-circbuf.c.o
[ 49%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/pdo/pdoucalmem-local.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timesync/timesyncucal-local.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/timer/timer-linuxuser.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllk.c.o
[ 50%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkfilter.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkstatemachine.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkevent.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkframe.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllknode.c.o
[ 51%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkcal.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventk.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/nmt/nmtk.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdok.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcal.c.o
[ 52%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcal-triplebufshm.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdoklut.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timesync/timesynck.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndk.c.o
[ 53%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndkcal.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/ctrl/ctrlk.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/led/ledk.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/led/ledktimer.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/ctrl/ctrlkcal-direct.c.o
[ 54%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/dll/dllkcal-circbuf.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/errhnd/errhndkcal-local.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventkcal-linux.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/event/eventkcalintf-circbuf.c.o
[ 55%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/pdo/pdokcalmem-local.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timesync/timesynckcal-local.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/debugstr.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/ftracedebug.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/root/test/powerlink/contrib/trace/trace-printf.c.o
[ 56%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/target-linux.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/target-mutex.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/arch/linux/netif-linux.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdconf-fileio.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/user/obd/obdconfcrc-generic.c.o
[ 57%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/circbuf/circbuffer.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/circbuf/circbuf-posixshm.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/memmap/memmap-null.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/veth/veth-linuxuser.c.o
[ 58%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/timer/hrestimer-posix.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/edrv/edrvcyclic.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/kernel/edrv/edrv-rawsock_linux.c.o
[ 59%] Building C object proj/linux/liboplkcn/CMakeFiles/oplkcn.dir/__/__/__/src/common/ami/ami.c.o
[ 59%] Linking C static library liboplkcn.a
[ 59%] Built target oplkcn

通过 liboplkcn.a的编译过程可以看出从站协议栈库依赖了哪些文件,有哪些是跟linux平台相关的,从而方便移植到单片机或其他平台中。如以上过程中,跟网络驱动相关的在文件:src/kernel/edrv/edrv_rawsock_linux.c文件中。除此之外,还有多处是跟平台相关的,如果要移植的话也需要修改。或者通过stack\cmake\stackfiles.cmake文件,查看哪些是跟平台有关的文件需要移植。

抛个问题,openpowerlink的源码,必须依赖底层有tcp/ip协议栈吗?看源码系统架构框图,似乎sdo使用到了udp协议发送。

最后查看源码发现tcp/ip协议栈非必须,因为源码里可以配置,sdoasnd.c,SDO over ASnd protocol,这样不走udp协议,则不需要非得有tcp/ip协议栈。

主站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交叉编译成功:

此处从站demo编译时需要注意的是,如果之前编译的liboplkcn.a没有依赖pcap, 则编译会失败。因为默认提供的apps/demo_cn_console/linux.make文件里,默认链接了pcap库。需要改下,去掉pcap库的链接方能通过编译。

板子上运行验证

需要用到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博客

(二)PowerLink理论知识_ty_xiumud的博客-CSDN博客

POWERLINK的网络组态

POWERLNK协议笔记_茹茹思密达的博客-CSDN博客

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

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

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

相关文章

飞桨EasyDL月刊:4月功能全新升级,模型训练步骤缩短63%

亲爱的开发者: 近来以生成式 AI、多模态预训练大模型为代表的技术变革正席卷全球,与此相关的智能化工具和平台陆续发布。飞桨 EasyDL 和 BML 位于文心全景图的工具与平台层,提供大模型开发套件及多种建模方式,全面支持基于大模型能…

访客接入-唯一客服系统文档中心

网站可以通过多种方式接入客服系统,直接跳转链接,或者在页面右下角弹窗 访客链接 可以在自己的网站接入,访客独立链接,入口形式可以完全自己写,只是跳转链接。 例如下面的访客链接https://gofly.v1kf.com/chatIndex?k…

Angular开发之——安装Angular CLI并初始化项目(02)

一 概述 Angular CLI介绍及开发环境准备安装Angular CLI开发工具使用Angular CLI初始化Angular项目简单体验Angular 二 Angular CLI介绍及开发环境准备 2.1 Angular CLI介绍 目前,无论你使用什么前端框架,都必须要使用到各种NodeJS工具,An…

Leetcode 剑指 Offer II 026. 重排链表

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个单链表 L 的头节点 head ,单链表 L 表示为&a…

day32_HTML

今日内容 零、 复习昨日 一、二阶段介绍 二、HTML 零、 复习昨日 晨考 一、二阶段介绍 第一阶段: JavaSE, 对java基本语法,面向对象知识,和编程有了基本了解 第二阶段: javaweb阶段 开发入门 前端 网页(用户直接交互界面)html 网页css 美化js 动起来 - jquerybootstrap 服务器 …

C++三部曲|C++内存管理全景指南

导语 深入理解C内存管理,一文了解所有C内存问题,万字长文,建议收藏 随着人工智能,云计算等技术的迅猛发展,让Python,go等新兴语言流行了起来,很多人以为C可能已经过时了,确实&…

《vector的模拟实现》

本文主要介绍vector的常见接口的模拟实现 文章目录 vector中常用类成员二、vector的底层结构三、vector的默认成员函数构造函数1—空构造构造函数2—迭代器区间构造拷贝构造函数赋值运算符重载析构函数 四、迭代器相关的函数迭代器的分类迭代器对应的STL容器分类迭代器失效问题…

软件系统架构对测试的影响分析

我们知道软件系统的架构会对系统测试产生影响,而到底会产生哪些影响呢?   首先看一下软件系统架构到底是如何定义的?   软件系统架构就是组成系统的主要重要模块、过程、数据的管理和分配、用户界面的种类和风格,以及系统运行平台等。其中包括它们…

在MacBook上编译v3s内核出错

刚开始的时候,我捣鼓esp8266「现在我也还有8266的开发板,后面也还是会推荐」 后面,我推荐了esp32,买了esp32开发板,可以做uac相关的实验,也可以搞图形界面了。 现在,终于到捣鼓Linux了 PS&#…

完整的医学影像PACS系统全套源码(带三维重建)

一套完整的医学影像存储与传输系统源码,PACS部分主要提供医学影像获取、影像信息网络传递、大容量数据存储、影像显示和处理、影像打印等功能。 RIS主要提供分诊登记、叫号、检查报告生成和打印等功能。本套影像存储与传输系统将二者进行无缝对接,提供了…

Navicat Premium 15安装注教程

Navicat Premium 15安装 准备工作 下载好安装包navicat150_premium_cs_x64和安装完成Navicat Premium 15 链接:https://pan.baidu.com/s/1TJs3pjAXJXhu7-13DJLzpg 提取码:hunk 安装Navicat Premium 15 无脑操作,下一步下一步就行了&…

【利用AI让知识体系化】万字深入浅出Nginx

思维导图 文章目录 思维导图 第一部分:入门篇1.1 起步下载和安装Nginx启动NginxNginx配置文件Nginx命令行总结 1.2 Nginx的基本架构1.3 安装和配置Nginx1.4 Nginx的基本操作 第二部分:核心篇2.1 Nginx的请求处理2.2 Nginx的缓存机制2.3 Nginx的负载均衡机…

二叉树基础

https://www.bilibili.com/video/BV1Hy4y1t7ij/?spm_id_from333.337.search-card.all.click&vd_source168d5f618ec1a68e1f162d91a35a12b6 完全二叉树的底部一定是从左到右是连续的。满二叉树一定是完全二叉树。 二叉搜索树:左边左子树的所有节点都小于这个中间…

【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 参数服务器通信及ros常用工具指令介绍 0.参数服务器概念1.参数服务器增加/修改参数:2.参数服务器查找参数3.参数服务器删除参…

大家都是拷贝,凭什么你这么秀?

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 之前关于 Python 的作用域、赋值、参数传递,我们接连谈了几篇文章: Python常见问题:全局变量和局部变量…

Marking

Marking 题目描述 输入输出 #include<iostream> #include<algorithm> using namespace std; typedef long long ll; ll gcd(ll a,ll b) {return b0?a:gcd(b,a%b); } int main() {ll t;cin>>t;ll n,d,k;while(t--){cin>>n>>d>>k;k--;if(g…

数据结构学习分享之树的介绍

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:数据结构学习分享⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你了解更多数据结构的知识   &#x1f51d;&#x1f51d; 数据结构第六课 1. 前言&a…

5.13下周黄金最新行情走势分析及多空交易策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(5月12日)美市尾盘&#xff0c;现货黄金收报2010.23美元/盎司&#xff0c;下跌4.57美元或0.23%&#xff0c;日内最高触及2022.59美元/盎司&#xff0c;最低触及…

IDEA 2022.3版本安装

安装前的准备 (免费使用方式私信我&#xff01;&#xff01;) • 64 位 Microsoft Windows 11、10、8 • 最低 2 GB 可用 RAM&#xff0c;推荐 8 GB 系统总 RAM • 2.5 GB 硬盘空间&#xff0c;推荐 SSD • 最低屏幕分辨率 1024x768 从安装上来看&#xff0c;IntelliJ IDEA 对硬…

asp.net+C#-高校社团管理网站

1、前台&#xff08;主要提供给学生使用&#xff09;&#xff1a;&#xff08;1&#xff09;注册&#xff0c;学生可以注册&#xff08;2&#xff09;登录&#xff0c;用户可以登录系统&#xff08;3&#xff09;查看社团活动&#xff0c;可以在页面查看社团的详细活动内容&…