在“福珑2.0”主机上开发EPICS软件的体验

一、摘要

收到福珑2.0开发主机以后内心有点小激动,机身上的银色logo特别提神。
“龙芯发烧友开发机”福珑2.0”,外观小巧玲珑,主机长宽尺寸都只有155毫米,机身高度为70毫米。
福珑2.0开发机搭载龙芯3A4000低电压版处理器,主频1.5GHz,集成显卡,搭配龙芯7A1000芯片组。
俱乐部版自带512GB固态硬盘,采用国产忆芯主控、国产闪存颗粒,M.2-2280固态,支持PCIe、NVMe。
标配8GB DDR4 SO-DIMM内存、两个WGI211AT集成千兆网卡、Realtek ALC662集成声卡。
”福珑2.0”开发机可适配国产麒麟、Loongnix、翼辉等国产操作系统,操作系统底层多为linux内核,
非常适合做EPICS IOC 控制器。我这里选择的是Loongnix,方便安装软件包。

对我来说控制系统中大量使用进口设备作为服务器或过程控制设备(如西门子,斯奈德,ABB等),即使在软件系统中集成了国产新华,和利时等控制设备,底层的控制器芯片和实时操作系统都是基于国外的技术。ARM,X86和Vxwork、 QNX等,这一直是个遗憾。

好在大多数项目都是以linux操作系统作为平台开发,所以我感觉适配到Loongnix操作系统应该没有太多问题
主要是实现基于mips架构的编译。

其中EPICS是我们使用的一套开源的分布式控制系统软件工具集,一般作用相当于我们工业控制领域使用的SCADA软件,下层对接plc或各种工控设备。
它由阿贡实验室和洛斯阿拉莫斯实验室受美国能源部支助开发。EPICS主要应用于国内外一些大型的科研装置,可以说是基础科研一套比较重要的应用软件。
应用在比如:光源加速器、粒子对撞机、托克马克装置、射电望远镜、质子治疗装置等。
网站 列举了使用EPICS软件开发的科研或商业项目。EPICS 软件中大多数代码都是独立于操作系统的,称为LibCom OSI库 (Operation System Independent操作系统独立代码)。

EPICS控制系统和商业化分布式控制系统比较:

对比项 商用DCS EPICS 说明
开发成本 × 节约20人年软件 开发成本*
接口可扩展性 × 官方支持81种工业通讯协议,111个厂商设备,还不包含各国自主开发的通讯协议支持* 官方网站:
源代码/开放性 × 90年代始,开放性的国际合作开发模式
多平台支持 × 支持Vxwoks,Linux,MacOS,Win
功能完整性 操作界面、数据存储、报警管理、状态机等
系统规范性 × EPICS软件开发管理相对松散

ITER“国际热核聚变实验堆”的推动弥补了EPICS规范性差的不足,发布了一整套基于EPICS开发控制系统设计标准,并且通过控制系统的模型化,实现EPICS控制系统开发系统级组态。

二、EPICS Base3.15.8安装

EPICS Base是EPICS控制系统的核心包,它的主要功能是运行一个基于内存的实时数据库,这个数据库可以跟驱动模块实时的交互数据,实现对设备数据采集和控制。另外对上层人机界面,报警系统,历史数据库系统等提供数据订阅服务。EPICS最初是运行在Vxworks实时操作系统的,它具有控制逻辑编程功能。所以利用longnix PREEMPT_RT实时内核,可以开发基于龙芯的PC控制器。

2.1 识别系统结构:

执行 ./startup/EpicsHostArch

1. src/tools/EpicsHostArch.pl: Architecture 'mips64el-linux-thread-multi' not recognized
#uname -a
Linux localhost.localdomain 3.10.84-23.fc21.loongson.8.mips64el #1 SMP PREEMPT Thu Mar 5 17:56:57 CST 2020 mips64 mips64 mips64 GNU/Linux

修改 src/tools/EpicsHostArch.pl 文件:

增加一行

return 'linux-mips64' if m/^mips64el-linux/;

执行 ./startup/EpicsHostArch

linux-mips64

引入环境变量:EPICS_HOST_ARCH = linux-mips64

2.2 安装EPICS base所需的软件包

dnf install gcc
dnf install gcc-c++
dnf install readline-devel
dnf install perl-ExtUtils-Install

2.3 configure/os目录下系统支持文件:

2.3.1. 增加 CONFIG.Common.linux_mips64

# CONFIG.Common.linux-mips64
# Definitions for linux-mips64 target builds
# Sites may override these definitions in CONFIG_SITE.Common.linux-mips64
#-------------------------------------------------------# Include definitions common to all linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommonARCH_CLASS = mips64ARCH_DEP_CFLAGS = $(GNU_TUNE_CFLAGS)
ARCH_DEP_CPPFLAGS += -D_mips64_OP_SYS_CFLAGS += -mips64
OP_SYS_LDFLAGS += -mips64# If your crosscompiler name has a GNU target prefix like <gnutarget>-gcc,
# e.g. mips64-linux-gcc, put a GNU_TARGET definition in
# CONFIG_SITE.<host>.linux-mips64 file, e.g. GNU_TARGET=mips64t-linux

2.3.2 增加CONFIG.linux_mips64.Common

# CONFIG.linux-mips64.Common
#
# Definitions for linux-mips64 host builds
# Sites may override these definitions in CONFIG_SITE.linux-mips64.Common
#-------------------------------------------------------#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.CommonWIND_HOST_TYPE = mips64el-linux

2.3.3 增加 CONFIG_SITE.linux_mips64.Common

# CONFIG_SITE.linux-mips64.Common
#
# Site override definitions for linux-mips64 host builds
#-------------------------------------------------------#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 solaris-sparc
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
#CROSS_COMPILER_TARGET_ARCHS = RTEMS-mvme2100

2…3.4 部分编译参数的适配

1.修改CONFIG.Common.linuxCommon

POSIX_LDLIBS = -lpthread -shared  #增加动态链接符号:shared

2.修改 CONFIG.Common

USR_ARFLAGS = -rv  #增加 ar静态库参数-rv

3.make 编译

三、ASYN 编译

3.1 epics-modules / asyn所需的软件包

dnf install rpcgen
dnf install libtirpc-devel

修改 /configure/RELEASE 文件

只需要写对EPICS_BASE路径,其它屏蔽。

Make 编译

四、Etherlab驱动支持

EtherLab 主站驱动包是一个开源的Ethercat总线通讯驱动,可以实现基于以太网的Ethercat 总线从站模块的通讯。主要是看重Ethercat基于以太网总线架构和优异的性能。另外选用国产化的(南京实点)Ethercat的从站IO设备可大大降低系统成本。

4.1 执行 …/bootstrap

修改 configure.ac

AM_INIT_AUTOMAKE([-Wall -Werror dist-bzip2 subdir-objects])

增加对子文件夹的自动编译subdir-objects

4.2 执行…/configure --enable-generic --disable-r8169 --disable-8139too --with-linux-dir=/usr/src/kernels/3.10.84-23.fc21.loongson.8.mips64el/

安装 kernel-devel

4.3.报错:In file included from liberror.c:1:0:

 extern char ecrt_errstring[ERRSTRING_LEN];

修改liberror.h

extern char *ecrt_errstring[ERRSTRING_LEN];   liberro.c和liberror.h C定义不一致

五、Etherlabmaster-code EPICS软件安装

EPICS 需要Ethercat驱动支持来实现实时数据库和驱动程序的接口

5.1 没有libxml/tree.h

dnf install libxml2-devel

5.2 找不到ecrt.h liberror.h

只要把etherlabmaster-code/ehtercatAPP/scanner/Makefile文件中

ETHERLAB=/usr/local/epics/epics-modules/etherlabmaster-code
ETHERLABPREFIX=/opt/etherlab

修改成ethercat驱动包和ehtercat 安装路径就好了

5.3 找不到./usr/bin dls-python

把所有的python执行命令改为 python 版本在2.7

总结:

个人感觉龙芯平台已经进入到了一个快速发展的通道,正处在软件生态建立和完善的过程中,希望个人能小有贡献。编译过程中会遇到一些小问题,但总的来说除了修改编译参数和原始配置外,没有大的问题,有机会会把编译报告发到论坛上。后续计划把EPICS相关历史数据库,报警系统,人机界面等编译到龙芯平台上,实现龙芯对EPICS控制系统软件的整体支持,可以提供一套基于龙芯的开源的低成本的控制系统软件架构方案。

在“福珑2.0”主机上编译EPICS Ehtercat驱动软件的体验相关推荐

  1. 龙梦迷你电脑福珑2.0通过手机USB共享网络联网

    当房间里没有有线网络的时候,龙梦迷你电脑怎么联网?今天成功实现联网.方法如下所示.一个有流量的手机,手机具有USB共享网络功能.一根数据线,一端是手机接口,例如type-C接口,微USB接口,另一端是 ...

  2. 用VMware Converter实现Esxi5.0到Esxi6.0主机上的虚拟机迁移(V2V)

    1 概述: 现有两套VMware环境:Esxi5.0主机由vCenter5.0管理,Esxi6.0主机由vCenter6.0管理. 要实现把Esxi5.0主机上的虚拟机迁移到Esxi6.0主机上. 2 ...

  3. 云主机上编译安装pureftpd

    一.环境说明 腾讯 云主机或者Ucloud云云主机,系统为Centos6 X86_64位,云主机本地不需要开启防火墙,只需要控制台安全组做防火墙策略就行,如下截图放开pureftpd的登录端口 二.p ...

  4. 海思AI芯片(Hi3519A/3559A)方案学习一Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

    参考了这位大佬的https://blog.csdn.net/avideointerfaces/article/details/88694447 先重申下我的平台为ubuntu18.0.4,SDK的目标 ...

  5. 海思AI芯片(Hi3519A/3559A)方案学习(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

    先重申下我的平台为ubuntu18.0.4,SDK的目标平台为Hi3519AV100系列 准备工作 安装himix200交叉编译器 tar –xzf arm-himix200-linux.tgz su ...

  6. Android5.0 Gallery2上编译Gallery模块出错

    在L上面,编译整个project可以编译通过,但是单独编译Gallery2模块出错,build gallery模块出现refocus的error target C++: libjni_jpegstre ...

  7. 【踩坑日记 · 嵌入式 Linux】在香橙派 Zero 2 上编译安装 CH340 驱动(OrangePi Zero 2)

    前言 最近想尝试在 Linux 下编写和烧录 51 单片机程序,需要用到 CH340 模块,但是香橙派 Zero 2 没有预装它的驱动,所以需要下载 CH340 驱动的源码手动编译安装.在这里记录一下 ...

  8. UltraISO 安装系统时,提示无法在驱动器0分区上安装windows / WINPE类软件重装系统无法正常开机 解决办法

    原因:传统的引导方式为Legacy引导和MBR硬盘,UEFI必须跟GPT对应,同理Legacy必须跟MBR对应.如果BIOS开启UEFI,而硬盘分区表格式为MBR则无法安装:BIOS关闭UEFI而硬盘 ...

  9. pppoe linux软件,在Ubuntu 18.04上编译安装pppoe客户端软件

    PPPoE(以太网上的点对点协议Point-to-Point Protocol over Ethernet)是许多DSL Internet服务提供商使用的协议. RP-PPPoE是Linux的免费PP ...

最新文章

  1. 周长相等的正方形面积一定相等_必考单元:三年级下册面积计算公式+知识点+测试卷(附答案),重点内容,收藏练习!...
  2. Day19-File操作-创建 删除,文件过滤
  3. 从视频到语言: 视频标题生成与描述研究综述
  4. python学习笔记(五)——函数基础和函数参数
  5. 数据结构-树:根节点、子节点、叶子节点是什么?
  6. 学python编脚本_python 学习写脚本
  7. select 条件字段,数字类型加1
  8. sqlite 常用数据类型
  9. java监听键盘事件(控制台输出按键信息)
  10. 思科计算机网络技术第一章,cisco思科网络技术教程第一章.ppt
  11. cisco下模拟Linux防火墙,Cisco防火墙HA实例
  12. python 金融知识图谱_从零搭建金融证券知识图谱-Part2
  13. HTML a 标签详解
  14. Why do we insist? 打卡
  15. 电脑故障排除方法(风扇转一下,马上就停,主板没有其它任何响应)
  16. 风之语.惊闻周星驰电影票房超过30亿RMB
  17. 小数点用计算机怎么用,用Windows计算器进行小数数制转换的方法
  18. 遇到factory.BeanNotOfRequiredTypeException Bean named xxx is expected tobe of type
  19. pyserial_API函数说明
  20. pear在php中的用法,php使用pear_smtp发送邮件

热门文章

  1. MongoDB数据库简介
  2. 客户人群画像分析 客户进行用户画像实现精准营销- Whale帷幄
  3. Hadoop权威指南(第4版)笔记一
  4. restlet2.0学习——请求超时设置
  5. 深度学习——A3C算法
  6. 记一次蓝屏的解决,错误代码IRQL_NOT_LESS_OR_EQUAL
  7. grafanaprometheus 快速配置报警规则及报警接收
  8. c# listview控件上移下移功能函数
  9. 单元测试篇---风起长林
  10. mdns-repeater Multicast DNS repeater