龙芯3A5000(LoongArch64)上编译运行EPICS
前言 之前尝试过在龙芯3A4000上编译运行EPICS,由于3A4000还是mips64指令集,而3A5000则是龙芯的自主指令集loongarch64,适配起来步骤也会有所不同。 这次使用的是龙博特龙芯3A5000电脑主机。 虽然EPICS官方并没有适配loongarch和mips64,无法做到开箱即用,但只要有gcc、g++、make、perl这些工具,理论上就能编译运行EPICS,在开始编译前,确保你的设备上已经装好了这些工具。 关于如何称呼「龙架构」,龙芯社区也有一些讨论。最初我直接使用loongarch64,后来也使用过la64作为简写,直到我看到如何称呼龙架构?,我觉得有必要和社区保持一致,后续统一使用 loong64 作为架构标识。 下载 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,那我们就手动添加一行,让它可以识别就行了,即使看不太懂上面的脚本也没关系,看个半懂就行了。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 sub HostArch { my $arch = $Config{archname}; for ($arch) { return 'linux-x86_64' if m/^x86_64-linux/; return 'linux-x86' if m/^i[3-6]86-linux/; return 'linux-arm' if m/^arm-linux/; return 'linux-aarch64' if m/^aarch64-linux/; return 'linux-ppc64' if m/^powerpc64-linux/; return 'linux-loong64' if m/^loongarch64-linux/; return 'windows-x64' if m/^MSWin32-x64/; return 'win32-x86' if m/^MSWin32-x86/; return "cygwin-x86_64" if m/^x86_64-cygwin/; return "cygwin-x86" if m/^i[3-6]86-cygwin/; return 'solaris-sparc' if m/^sun4-solaris/; return 'solaris-x86' if m/^i86pc-solaris/; my ($kernel, $hostname, $release, $version, $cpu) = uname; if (m/^darwin/) { for ($cpu) { return 'darwin-x86' if m/^x86_64/; return 'darwin-aarch64' if m/^arm64/; } die "$0: macOS CPU type '$cpu' not recognized\n"; } die "$0: Architecture '$arch' not recognized\n"; } } 我们在上面位置添加一行内容,来让它可以识别loongarch64架构。 ...