龙芯俱乐部开源技术社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1856|回复: 7

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

[复制链接]

3

主题

4

帖子

527

积分

版主

Rank: 7Rank: 7Rank: 7

积分
527
发表于 2023-2-1 16:10:07 | 显示全部楼层 |阅读模式
本帖最后由 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上编译时输出的错误:
下面一行报错是差不多的,在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命令。
可以看到,现在已经可以识别出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


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
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

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
这里是对编译器的优化选项,暂时不知道怎么改,我就直接注释掉了。
重新编译
到这里就全部改好了,其实最主要修改的就是第一个文件。下面就可以尝试编译了,这次应该没问题了。
1
2
3
$ cd /usr/local/epics/base-7.0.7/
# 执行 `make` 命令
$ make -j8
接下来就静静等待编译完成。编译完后查看编译输出目录bin/linux-loongarch64/。
添加到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-loongarch64PATH"
        ;;
esac
然后修改 .bashrc
1
2
$ cd ~
$ vi .bashrc
在文件最后添加一行
1. "$HOME/.epics/env"
执行下面命令,使添加PATH生效
1$ . .bashrc
运行EPICS IOC
做完上面的步骤,EPICS base的配置就完成了,我们来尝试运行一下。
在终端执行softIoc
运行正常,大功告成!
只要base可以成功运行,其它的一些模块应该也没有问题,后续我会继续尝试在龙芯上安装EPICS其它的模块。
链接

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

84

主题

465

帖子

44万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
440441
发表于 2023-2-1 16:52:37 | 显示全部楼层
太好了!

84

主题

465

帖子

44万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
440441
发表于 2023-2-1 16:57:56 | 显示全部楼层
EPICS 是个很大的系统吧,目前能运行的是那部分,还有多少组件要适配呢?

0

主题

4

帖子

140

积分

超级版主

Rank: 8Rank: 8

积分
140
发表于 2023-2-1 17:11:31 | 显示全部楼层
太好了, 这是龙芯平台在科学计算领域的又一个进步

3

主题

4

帖子

527

积分

版主

Rank: 7Rank: 7Rank: 7

积分
527
 楼主| 发表于 2023-2-1 18:24:25 | 显示全部楼层
sn2015ol 发表于 2023-2-1 16:57
EPICS 是个很大的系统吧,目前能运行的是那部分,还有多少组件要适配呢?

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

84

主题

465

帖子

44万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
440441
发表于 2023-2-2 04:38:14 | 显示全部楼层
kira 发表于 2023-2-1 18:24
这篇是关于EPICS base的编译,其它模块都是在base的基础上构建的,应该不需要再做额外的适配,我们后续会 ...

好的

0

主题

3

帖子

150

积分

注册会员

Rank: 2

积分
150
发表于 2023-2-3 10:32:14 | 显示全部楼层
牛的  继续加油

84

主题

465

帖子

44万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
440441
发表于 2023-2-4 11:29:06 | 显示全部楼层
可以再配一下龙芯机器的照片
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|龙芯俱乐部开源技术社区

GMT+8, 2024-4-25 17:24 , Processed in 0.122255 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表