操作系统支持

openPOWERLINK支持若干平台和操作系统。请阅读对应文档获取相关信息,了解怎样在你的目标平台上编译和运行openPOWERLINK。

如果你的平台不被支持,请参考openPOWERLINK Porting Guide 获取相关信息,了解关于如何将openPOWERLINK移植到你的平台上。

平台 Linux Windows Non-OS
X86 X X
Altera NiosII X
Xilinx Microblaze X
Xilinx Zynq X X
Altera Cyclone V SoC X

支持的操作系统

  • \ref page_platform_linux
  • \ref page_platform_windows

支持的平台

  • \ref page_platform_x86
  • Altera NiosII
      - \ref page_platform_altera-mn
      - \ref page_platform_altera-cn
    
  • \ref page_platform_xilinx
  • \ref page_platform_zynq
  • \ref page_platform_altera-soc

介绍

本部分包含运行于Linux上的openPOWERLINK协议栈相关文档。

条件

POWERLINK网

  • 带控制节点(CN)的POWERLINK网络
    • openPOWERLINK控制节点,例: Altera-based FPGA evaluation boards
    • B&R POWERLINK控制节点
    • 其它POWERLINK控制节点

网络控制

运行openPOWERLINK于Linux上需要下列网络控制器的支持。

  • 带有Intel 82573L (或兼容) 1GBit以太网芯片的网络控制器卡
  • 带有Realtek RTL8139 Rev C或D以太网芯片的网络控制器卡
  • 带有Intel 8255x 100MBit以太网芯片的网络控制器卡
  • 通过libpcap库运行的标准Linux网络控制器(为用户空间协议栈版本)

Linux内核

  • Linux内核版本2.6.23或以上,并使能CONFIG_HIGH_RES_TIMERS

    • 需要ACPI支持,对于老BIOSes可能需要附加"highres=on"或"acpi=force"到内核命令行 to kernel command line for older BIOSes)。
    • 如果hres_active为1选/proc/timer_list

      $ cat /proc/timer_list | grep 'hres_active'
      
实时核

为了实现更好的性能和更小的POWERLINK周期抖动,需要实时Linux内核支持。Ingo Molnar提供的 RT-Preempt补丁可以提供所需实时扩展(https://rt.wiki.kernel.org).

更多Linux实时内核信息可访问OSADL主页(http://www.osadl.org)。

已测试内核版本

openPOWERLINK能够运行在指定内核版本上:\ref sect_linux_kernel,推荐下列经过测试的内核版本。

  • 2.6.33.7.2-rt30
  • 3.12.24-rt38

线程优先级

如果使用实时内核,实时优先级的调整决定了POWERLINK的行为 。如果你正在使用内核基的协议栈,plkload脚本和协议栈一起工作会自动更改优先级。对于用户空间协议栈,配置优先级的脚本在tools/linux/set_prio。它会提高高分辨率软中断(仅在2.6内核)和以太网中断优先级。

Kernel 3.x

3.X实时核行为不同于早期内核版本。隔离软中断已不再有效,虽然有隔离软中断锁的执行补丁。如果使用3.X实时核需确认打了这个补丁。

另外,下列步骤可在multicore processor上提高实时性。

  • 确认已为你的实时核配置了下面的选项:

    CONFIG_RT_GROUP_SCHED 未配置
    CONFIG_RCU_BOOST=y
    CONFIG_RCU_BOOST_PRIO=99
    
  • 将多处理器的第二核独立用途openPOWERLINK通过内核命令行参数 isolcpus=1来指定。

  • 设置默认中断相比于所有其它核,例:通过设置内核命令行参数irqaffinity=0为双核系统指定核心0

  • 通过禁用irqbalance来禁止IRQ平衡。这取决于你的Linux分发版本。例如在Ubuntu 编辑/etc/default/irqbalance

库和工具

CMake

创建openPOWERLINK协议栈和demo应用使用开源交叉编译平台工具CMake。(http://www.cmake.org). 要求CMake版本V2.8.7或更好。

关于CMake的详细描述请看 cmake section.

libpcap库

使用用户空间POWERLINK协议栈需要libpcap库的支持以访问以太网接口。

QT4开发工具

如果想build QT demo应用,系统上比选装QT4开发工具(http://qt.digia.com/)。

openCONFIGURATOR

工具openCONFIGURATOR用来为你的应用生成网络配置。

openPOWERLINK协议栈组件

下段包含了Linux系统上可用的openPOWERLINK components描述。

协议栈库

openPOWERLINK协议栈分为用户和内核部分。Linux系统上下面的配置可用:

  • Direct Link to Application

    内核部分直接与用户部分和应用(完整库)连接为整体的可执行程序。协议栈使用libpcap库来访问以太网驱动。

    Libraries:

    • stack/proj/linux/liboplkmn (liboplkmn.a)
    • stack/proj/linux/liboplkcn (liboplkcn.a)
  • Linux User Space Daemon

    应用被链接到应用库,应用库包含到Linux用户空间openPOWERLINK驱动的接口。内核部分单独编译(后台程序),运行于Linux用户空间。协议栈使用libpcap库来访问以太网驱动。

    Libraries:

    • stack/proj/linux/liboplkmnapp-userintf (libmnapp-userintf.a)
    • stack/proj/linux/liboplkcnapp-userintf (libcnapp-userintf.a)
  • Linux Kernel Module

    应用被链接到应用库,应用库包含到Linux内核空间openPOWERLINK驱动接口。内核部分作为Linux内核模块编译。内核模块可配置使用一个可用的openPOWERLINK以太网驱动。

    Libraries:

    • stack/proj/linux/liboplkmnapp-kernelintf (liboplkmnapp-kernelintf.a)
    • stack/proj/linux/liboplkcnapp-kernelintf (liboplkcnapp-kernelintf.a)
  • Kernel stack on PCIe card

    应用被链接到应用库,应用库包含到Linux内核空间PCIe接口驱动的接口。openPOWERLINK内核部分运行在扩展PCIe设备上。PCIe接口驱动负责处理用户层和内核层协议栈的状态/控制信息和数据交换。

    Libraries:

    • stack/proj/linux/liboplkmnapp-kernelpcie (liboplkmnapp-kernelpcie.a)

驱动

Linux用户空间守护进程使用PCAP

协议栈内核部分被编译成一个单独的用户空间进程。使用libpcap库访问网络接口,因而依赖于网卡和驱动。

注意: 由于使用libpcap访问以太网设备,该解决方案无法达到内核空间方式的性能。

驱动位于:drivers/linux/drv_daemon_pcap

Linux内核模块

openPOWERLINK内核部分可以作为Linux内核模块执行。该方案提供更好的性能,但是受限于可用的openPOWERLINK网卡驱动。

驱动位于: drivers/linux/drv_kernelmod_edrv

Linux内核PCIe接口

openPOWERLINK内核部分可以在PCIe扩展设备上运行,用来处理openPOWERLINK协议栈的时间临界段。该方案能够提供很好的性能,较低的系统资源占用。

Linux内核PCIe接口驱动是用于openPOWERLINK应用库和运行于PCIe设备上的内核库协议栈之间的通信接口。PCIe接口驱动负责处理协议栈用户层和内核层之间的状态/控制和数据的交换。

驱动位于:drivers/linux/drv_kernelmod_pcie

Demo应用

Linux下提供如下demo应用:

工具

有一些shell脚本可用于载入POWERLINK模块,配置线程优先级等等。

这些工具位于:tools/linux

创建

创建Linux上的openPOWERLINK请参考: generic build instructions.

启动内核模块

为了启动POWERLINK内核模块,使用脚本plkloadplkunload。脚本将被安装于安装目录。此外插入到内核模块,plkload脚本会调整优先级并接触网络设备与标准驱动的绑定。保证openPOWERLINK能够使用该网卡。

推荐使用该脚本启动openPOWERLINK!

例: 启动内核协议栈,使用Intel 82573网络控制器:

> cd <kernel_module_installation_dir>
> sudo ./plkload oplk82573mn.ko

卸载内核模块:

> cd <kernel_module_installation_dir>
> sudo ./plkunload oplk82573mn.ko

启动用户空间守护进程

如果协议帧配置为Linux用户空间守护进程,必须在启动你的应用前启动它。用户空间守护进程通过下述命令启动:

> cd <userspace_daemon_installation_dir>
> sudo ./oplkmnd_pcap

启动Demo应用

如果demo应用配置使用一个单独编译的内核协议栈,需要确认该内核协议栈守护进程(内核驱动模块)在你的应用之前启动运行。如果demo应用直接链接到全功能openPOWERLINK协议栈,你可以直接启动它:

> cd <demo_installation_dir>
> sudo ./demo_mn_qt

调整以太网线程任务优先级

如果在实时内核上使用PCAP以太网驱动,在启动应用前,你应该使用脚本set_prio调整线程优先级。以便提高响应的以太网中断线程优先级,你需要指定所使用的以太网接口。例如:

> cd bin
> sudo ./set_prio eth1

故障处理

Linux用户空间协议栈

  • 用户空间基应用找不到网络接口

    确认pcap库已安装,你以root身份运行demo。

Linux内核空间协议栈

  • Linux内核空间: 检查内核日子

    $ dmesg
    

介绍

本部分包含运行于Windows上的openPOWERLINK协议栈信息。

注意: 因为Windows不提供实时行为,因此基于软件的openPOWERLINK解决方案在Windows上运行,其周期要在10ms以上。最小循环周期极其依赖于所用系统并且得不到保障。

使用条件

POWERLINK网络

  • POWERLIN网络带控制节点(CN)
    • openPOWERLINK控制节点,例:Altera-based FPGA evaluation boards
    • B&R POWERLINK控制节点
    • 其它POWERLINK控制节点

网络控制器

Windows系统上的openPOWERLINK协议栈使用WinPCAP库访问网络接口。因而,无需特别指定网络控制器。openPOWERLINK包含WinPCAP库。它位于:contrib\pcap

Windows版本

  • 支持的版本: Windows 2000, XP, Vista, 7

库和工具

编译和构建环境

openPOWERLINK支持下列构建环境:

  • Microsoft Visual Studio 2005
  • Microsoft Visual Studio 2008
  • Microsoft Visual Studio 2010
  • Microsoft Visual Studio 2013

注意: 为了创建Windows NDIS PCIe miniport和NDIS中间件驱动,只能使用Visual Studio 2013! 细节请参考\ref sect_build_drivers_build_windows_ndis

CMake

创建openPOWERLINK协议栈和demo应用需要开源交叉平台编译工具CMake(http://www.cmake.org).CMake版本要求V2.8.4或更高。

详细的CMake描述请看 cmake section.

QT4开发工具

如果想build QT demo应用,系统需要安装QT4开发工具。(http://qt.digia.com/)

openCONFIGURATOR

工具openCONFIGURATOR用于生成你的应用的网络配置。

NSIS编译器

NSIS (Nullsoft Scriptable Install System) (http://nsis.sourceforge.net/Download) 是一套创建Windows安装包的专业的开源系统。openPOWERLINK使用NSIS脚本在Windows上创建PCIe驱动安装包无人值守驱动安装包。

openPOWERLINK协议栈组件

下段内容描述了Windows系统上可用的openPOWERLINK components

Stack库

openPOWERLINK协议栈分为用户和内核两部分。Windows系统上下列配置可用

  • Direct Link to Application

    内核部分直接与用户部分和应用链接(完整库)。协议栈使用WinPCAP库访问网络设备。

    Libraries:

    • stack/proj/windows/liboplkmn (liboplkmn.lib)
    • stack/proj/windows/liboplkcn (liboplkcn.lib)
  • Kernel stack on PCIe card

    应用链接到应用库,包含到运行openPOWERLINK内核部分的扩展PCIe设备的接口。Windows内核空间的NDIS PCIe miniport驱动用于与PCIe设备通信。共享内存用于在openPOWERLINK协议栈用户和内核层之间交换数据和状态/控制信息。

    Libraries:

    • stack/proj/windows/liboplkmnapp-pcieintf (liboplkmnapp-pcieintf.lib)
  • Windows Kernel Module

    应用链接到应用库,包含到NDIS中间件驱动的接口。openPOWERLINK协议栈内核部分作为一个一个Windows内核空间的NDIS中间件驱动编译。NDIS中间件驱动与本地NIC miniport驱动通信交换数据包。

    Libraries:

    • stack/proj/windows/liboplkmnapp-kernelintf (liboplkmnapp-kernelintf.lib)

驱动

NDIS PCIe miniport驱动

openPOWERLINK内核层可在扩展PCIe设备上运行,以满足openPOWERLINK协议栈的时间临界段要求。该方案允许Windows用户空间应用以250us的周期运行POWERLINK网络,否则非实时的Windows不可能实现。

NDIS PCIe miniport驱动作为openPOWERLINK应用库和运行在PCIe设备上的内核协议栈间的通信接口,并使用共享内存交换数据。

驱动位于: drivers/windows/drv_ndis_pcie

NDIS中间件驱动

openPOWERLINK内核层以NDIS中间件驱动的形式编译。该方案使用本地NIC miniport驱动访问网络接口,总体上依赖网卡进行通信。

该方案使用NDIS定时对象框架来支持高精度的定时。该定时器最小分辨率1ms,低于5ms的定时对于该方案来说难以实现。

驱动位于: drivers/windows/drv_ndis_intermediate

Demo应用

Windows中提供下述demo应用:

工具

Windows中创建应用安装程序使用包括NSIS安装器脚本,驱动安装器和应用工程卸载器。该脚本和应用帮助用户避免手动一步一步去安装和配置Windows NDIS驱动。

脚本和应用的路径:tools/windows

创建Windows PCIe 驱动安装包

按下列步骤build Windows PCIe驱动安装包。

  • 打开Visual Studio命令行并输入下列命令:

    • Build应用安装器

      > cd <openPOWERLINK_directory>\tools\windows\installer-pcie\build\installer-pcie
      > msbuild /t:build /p:Platform=x64 /p:Configuration="Release"
      
    • Build应用卸载器

      > cd <openPOWERLINK_directory>\tools\windows\uninstaller-pcie\build\uninstaller-pcie
      > msbuild /t:build /p:Platform=x64 /p:Configuration="Release"
      
  • 复制所需Visual C++可再发布执行程序到tools/windows/installer目录。

    目标机器上安装和卸载应用需要包含Visual C++可再发行包。

    用于Visual Studio 2013的Visual C++ Redistributable包可下载于: (https://www.microsoft.com/en-in/download/details.aspx?id=40784)

  • 编译NSIS脚本用于生成openPOWERLINK驱动安装程序。

    脚本的编译即可由上下文菜单选项 Compile NSIS Script也可由命令行功能makensis完成。

    > makensis <openPOWERLINK_directory>\tools\windows\installer\openPOWERLINK_demo.nsi
    

openPOWERLINK驱动安装程序的默认本地安装路径:tools/windows/installer

创建NDIS中间件驱动安装器

按下列步骤build NDIS中间件驱动安装器。

  • 打开Visual Studio命令行并输入下述命令

    • Build应用安装器

      > cd <openPOWERLINK_directory>\tools\windows\installer-ndisim\build
      > msbuild /t:build /p:Platform=x64 /p:Configuration="Release"
      
  • 拷贝所需Visual C++ Redistributable可执行程序到tools/windows/installer目录。

    目标机器上安装和卸载应用需要包含Visual C++可再发行包。

用于Visual Studio 2013的Visual C++ Redistributable包可下载于: (https://www.microsoft.com/en-in/download/details.aspx?id=40784)

  • 编译NSIS脚本用于生成openPOWERLINK驱动安装程序。

脚本的编译即可由上下文菜单选项 Compile NSIS Script也可由命令行功能makensis完成。

  > makensis <openPOWERLINK_directory>\tools\windows\installer\oplk-ndisim.nsi

openPOWERLINK驱动安装程序的默认本地安装路径:bin\windows\amd64

注意: 当前脚本仅支持创建64-bit Windows可执行文件。

NDIS驱动的Windows驱动签名

从64-bit版本的Windows Vista起包括以后的Windows版本。驱动代码签名策略要求所有驱动代码都有数字签名。

本段将给出一个Windows驱动签名要求的小介绍,说明在测试系统上使用测试签名驱动安装包的步骤。

驱动签名

Windows设备安装系统验证设备驱动的完整性和出版商的真实性。需要出版商在驱动包里通过驱动签名包含一个数字签名。

驱动签名需要一些关键组件:

  • 由权威商业机构(CA)颁发的软件出版证书(SPC)。
  • 带有数字签名的登记文件。

关于获取证书,创建记录和为驱动签名的详细步骤,可参考驱动签名步骤位于: https://msdn.microsoft.com/en-us/library/windows/hardware/ff544865%28v=vs.85%29.aspx

开发过程中测试签名设备驱动的生成步骤

测试签名可参考在测试计算机上使用测试证书来为与发布版本包作签名。需要特别指出的是,允许开发者使用自签名证书标记内核模式的二进制文件。工具'MakeCert'是个可选的自签名证书生成器。

openPOWERLINK Windows NDIS驱动已在Debug模式下使用'MakeCert'生成证书来配置生成测试签名驱动。

请按照下列步骤在测试系统上使用测试签名驱动:

  • 以admin身份打开一个命令提示窗口并且输入下列命令

    > bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
    > bcdedit -set TESTSIGNING ON
    
  • 重启系统。

  • 安装openPOWERLINK驱动。

安装过程中,将显示下面的信息提示以允许未知出版商的软件使用

Driver signature warning message.

请选择 Install this driver software anyway 完成驱动安装。

双击.exe文件可直接启动demo应用

注意事项

Windows NDIS驱动

  • Visual Studio载入失败

    确认所有Visual Studio指定的文件(例: .sln and .vcxproj)带有Windows行结尾。

  • Driver build失败

    确认驱动INF文件带有Windows行结尾。