kira 发表于 2023-2-1 16:10:07

在龙芯3A5000(loongarch64)上编译运行EPICS

本帖最后由 kira 于 2023-2-1 18:18 编辑

前言
之前尝试过在龙芯3A4000上编译运行EPICS,由于3A4000还是mips64指令集,而3A5000则是龙芯的自主指令集loongarch64,适配起来步骤也会有所不同。这次使用的是龙博特龙芯3A5000电脑主机。虽然EPICS官方并没有适配loongarch和mips64,无法做到开箱即用,但只要有gcc、g++、make、perl这些工具,理论上就能编译运行EPICS,在开始编译前,确保你的设备上已经装好了这些工具。下载 base这里我们就以目前最新版本7.0.7为例,其它版本的Base也类似。
1
2
3$ cd ~/下载/
$ wget https://epics.anl.gov/download/base/base-7.0.7.tar.gz
$ tar -xzvf base-7.0.7.tar.gz
你可以在你觉得合适的位置编译安装Base,这里按我们的习惯,放在/usr/local/epics目录下。
1
2$ mkdir /usr/local/epics
$ mv base-7.0.7 /usr/local/epics/
编译
按照一般步骤,现在就可以开始编译了,我们可以先尝试一下,看看是什么结果。
1
2
3$ cd /usr/local/epics/base-7.0.7/
# 执行 `make` 命令
$ make


不出所料,果然失败了,输出的错误和在3A4000上编译时的错误也有一些不同。下面是在3A4000上编译时输出的错误:http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/Screenshot-user1%40localhost_-usr-local-epics-base-7.0.7.png下面一行报错是差不多的,在loongarch64上编译却多了上面一行报错,意思就是没有识别出loongarch64架构。但是先不要慌,这里同时也给出了报错的位置,让我们看看EpicsHostArch.pl里写了些什么。
1$ vi ./src/tools/EpicsHostArch.pl
它其实就是一个perl脚本,用来判断当前的系统和cpu架构,而loongarch64显然没有做适配,所以就出现了上面错误。
“Architecture ’loongarch64-linux-gnu-thread-multi’ not recognized”既然识别不了loongarch64,那我们就手动添加一行,让它可以识别就行了,即使看不太懂上面的脚本也没关系,看个半懂就行了。我们在如图的光标位置添加一行内容,来让它可以识别loongarch64架构。
1return 'linux-loongarch64'if m/^loongarch64-linux/;
此时我们再执行一下make命令。http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2013-32-44%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png可以看到,现在已经可以识别出loongarch64-linux了,报错和在3A4000上编译时也基本一样了。以下步骤同样适用于在3A4000(mips64)上编译EPICS剩下的报错就是,没有找到对应的编译配置项,我们同样可以仿照已经做了适配的架构来改写,直接按照下面步骤来就可以了。
1. 添加 CONFIG.Common.linux-loongarch64
1
2
3
4$ cd configure/os/
# 添加 CONFIG.Common.linux-loongarch64
$ cp CONFIG.Common.linux-aarch64 CONFIG.Common.linux-loongarch64
$ vi CONFIG.Common.linux-loongarch64
修改成如下内容:
1
2
3
4
5
6
7
8
9
10# CONFIG.Common.linux-loongarch64
#
# Definitions for linux-loongarch64 target builds
# Override these settings in CONFIG_SITE.Common.linux-loongarch64
#-------------------------------------------------------

#Include definitions common to all Linux targets
include $(CONFIG)/os/CONFIG.Common.linuxCommon

ARCH_CLASS = loongarch64
http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2013-37-06%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png

2. 添加 CONFIG.linux-loongarch64.Common
1
2
3# 添加 CONFIG.linux-loongarch64.Common
$ cp CONFIG.linux-aarch64.Common CONFIG.linux-loongarch64.Common
$ vi CONFIG.linux-loongarch64.Common
修改成如下内容(内容没有变化,可以不修改):
1
2
3
4
5
6
7
8# CONFIG.linux-loongarch64.Common
#
# Definitions for linux-loongarch64 host builds
# Sites may override these definitions in CONFIG_SITE.linux-loongarch64.Common
#-------------------------------------------------------

#Include definitions common to unix hosts
include $(CONFIG)/os/CONFIG.UnixCommon.Common
3. 添加 CONFIG.linux-loongarch64.linux-loongarch64
http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2013-41-48%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png
1
2
3# 添加 CONFIG.linux-loongarch64.linux-loongarch64
$ cp CONFIG.linux-aarch64.linux-aarch64 CONFIG.linux-loongarch64.linux-loongarch64
$ vi CONFIG.linux-loongarch64.linux-loongarch64
修改成如下内容(内容没有变化,可以不修改):
1
2
3
4
5
6
7
8# CONFIG.linux-loongarch64.linux-loongarch64
#
# Definitions for native linux-loongarch64 builds
# Override these definitions in CONFIG_SITE.linux-loongarch64.linux-loongarch64
#-------------------------------------------------------

# Include common gnu compiler definitions
include $(CONFIG)/CONFIG.gnuCommon
4. 添加 CONFIG_SITE.Common.linux-loongarch64
http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2013-43-58%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png
1
2
3# 添加 CONFIG_SITE.Common.linux-loongarch64
$ cp CONFIG_SITE.Common.linux-aarch64 CONFIG_SITE.Common.linux-loongarch64
$ vi CONFIG_SITE.Common.linux-loongarch64
内容没有变化,可以不修改。
5. 添加 CONFIG_SITE.linux-loongarch64.linux-loongarch64
1
2
3# 添加 CONFIG_SITE.linux-loongarch64.linux-loongarch64
$ cp CONFIG_SITE.linux-aarch64.linux-aarch64 CONFIG_SITE.linux-loongarch64.linux-loongarch64
$ vi CONFIG_SITE.linux-loongarch64.linux-loongarch64
修改成如下内容:
1
2
3
4
5
6
7
8
9
10
11# CONFIG_SITE.linux-loongarch64.linux-loongarch64
#
# Site specific definitions for native linux-loongarch64 builds
#-------------------------------------------------------

# It makes sense to include debugging symbols even in optimized builds
# in case you want to attach gdb to the process or examine a core-dump.
# This does cost disk space, but not memory as debug symbols are not
# loaded into RAM when the binary is loaded.
#OPT_CFLAGS_YES += -g
#OPT_CXXFLAGS_YES += -g
这里是对编译器的优化选项,暂时不知道怎么改,我就直接注释掉了。http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2013-52-17%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png重新编译到这里就全部改好了,其实最主要修改的就是第一个文件。下面就可以尝试编译了,这次应该没问题了。
1
2
3$ cd /usr/local/epics/base-7.0.7/
# 执行 `make` 命令
$ make -j8
接下来就静静等待编译完成。编译完后查看编译输出目录bin/linux-loongarch64/。http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2014-09-04%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png添加到PATH为了方便以后使用,我们将编译输出的可执行文件目录添加到PATH。
1
2
3
4
5$ cd ~
$ mkdir .epics
$ cd .epics/
$ touch env
$ vi env
编辑 env 如下
1
2
3
4
5
6
7
8
9
10
11#!/bin/sh
# EPICS base shell setup
# affix colons on either side of $PATH to simplify matching
case ":${PATH}:" in
    *:"/usr/local/epics/base-7.0.7/bin/linux-loongarch64":*)
      ;;
    *)
      # Prepending path in case a system-installed epics needs to be overridden
      export PATH="/usr/local/epics/base-7.0.7/bin/linux-loongarch64:$PATH"
      ;;
esac
然后修改 .bashrc
1
2$ cd ~
$ vi .bashrc
在文件最后添加一行
1. "$HOME/.epics/env"
执行下面命令,使添加PATH生效
1$ . .bashrc
运行EPICS IOC做完上面的步骤,EPICS base的配置就完成了,我们来尝试运行一下。在终端执行softIoc。http://localhost:1313/posts/%E5%9C%A8%E9%BE%99%E8%8A%AF3a5000loongarch64%E4%B8%8A%E7%BC%96%E8%AF%91%E8%BF%90%E8%A1%8Cepics/2023-02-01%2014-13-20%20%E5%88%9B%E5%BB%BA%E7%9A%84%E6%88%AA%E5%9B%BE.png运行正常,大功告成!只要base可以成功运行,其它的一些模块应该也没有问题,后续我会继续尝试在龙芯上安装EPICS其它的模块。链接
[*]EPICS - Experimental Physics and Industrial Control System (anl.gov)
[*]epics-base - (launchpad.net) / epics-base/epics-base / EPICS Base (anl.gov)
[*]为了更好的阅读体验,请您阅读原文

sn2015ol 发表于 2023-2-1 16:52:37

太好了!

sn2015ol 发表于 2023-2-1 16:57:56

EPICS 是个很大的系统吧,目前能运行的是那部分,还有多少组件要适配呢?

Mercer 发表于 2023-2-1 17:11:31

太好了, 这是龙芯平台在科学计算领域的又一个进步

kira 发表于 2023-2-1 18:24:25

sn2015ol 发表于 2023-2-1 16:57
EPICS 是个很大的系统吧,目前能运行的是那部分,还有多少组件要适配呢?

这篇是关于EPICS base的编译,其它模块都是在base的基础上构建的,应该不需要再做额外的适配,我们后续会再做一些尝试。

sn2015ol 发表于 2023-2-2 04:38:14

kira 发表于 2023-2-1 18:24
这篇是关于EPICS base的编译,其它模块都是在base的基础上构建的,应该不需要再做额外的适配,我们后续会 ...

好的

HanLF 发表于 2023-2-3 10:32:14

牛的继续加油

sn2015ol 发表于 2023-2-4 11:29:06

可以再配一下龙芯机器的照片
页: [1]
查看完整版本: 在龙芯3A5000(loongarch64)上编译运行EPICS