龙芯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架构。 ...

二月 1, 2023 · 5 分钟 · 987 字

Linux GPIO 操作其一

前言 由于换了新的工作,我的工作方向也有了很大的变化,之前基本上是单纯的写代码,现在则经常需要和硬件设备交互,开发平台也转到了Linux+Qt。硬件设备的控制,其中最基本的就是LED灯以及一些开关继电器的操作,其本质就是GPIO的操作。考虑到系统的精简和成本控制,最好是可以直接通过Linux系统去控制,当然也有其它替代方案,比如使用支持Modbus协议的IO模块。关于Modbus的使用,后面有空再讲,这里就记录一下最简单的Linux系统下的GPIO控制,用户空间下的GPIO文件系统接口。 在此之前,有必要再了解一下GPIO的概念。 “通用输入/输出”(GPIO)是一种灵活的软件控制数字信号。它们由多种芯片提供,对于使用嵌入式和定制硬件的Linux开发人员来说很熟悉。每个GPIO代表一个连接到特定引脚的位,即球栅阵列(BGA)封装上的“球”。电路板示意图显示了哪些外部硬件连接到哪些GPIO。驱动程序可以通用地编写,以便板设置代码将这样的引脚配置数据传递给驱动程序。 A “General Purpose Input/Output” (GPIO) is a flexible software-controlled digital signal. They are provided from many kinds of chip, and are familiar to Linux developers working with embedded and custom hardware. Each GPIO represents a bit connected to a particular pin, or “ball” on Ball Grid Array (BGA) packages. Board schematics show which external hardware connects to which GPIOs. Drivers can be written generically, so that board setup code passes such pin configuration data to drivers. ...

一月 12, 2023 · 3 分钟 · 498 字

WSL libcuda.so.1 is not a symbolic link 的解决方法

问题描述 在使用 WSL 更新软件包的时候经常会遇到这样一个报错 1 /sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link 意思是说 /usr/lib/wsl/lib/libcuda.so.1 不是一个符号链接。 问题分析 通过名字可以判断这应该是nVidia显卡驱动相关的库,进入 /usr/lib/wsl/lib/ 目录,可以看到有 libcuda.so、libcuda.so.1、libcuda.so.1.1 三个文件,都是文件形式,而通过报错我们知道 libcuda.so、libcuda.so.1 应该是符号链接文件。 ...

二月 9, 2022 · 1 分钟 · 422 字

交叉编译适用于 iMX6UL 的 x11vnc

前言 由于这半年来一直在做嵌入式Linux系统软件开发工作,所以经常和嵌入式设备打交道,最早接触的嵌入式Linux应该就是树莓派了,而我的树莓派一般也不接屏幕,基本上都使用VNC远程连接,所以就想着能不能把VNC也移植到嵌入式设备上,最后找到了x11vnc。 ...

二月 6, 2022 · 3 分钟 · 1029 字

开始一份新工作

开始一份新工作 好久没有更新博客了,最近几个月都在忙新工作的事情,虽然只是短短3个月,但回想起来已经是很久之前了。从4月份面试,然后体检,提交各种材料证明,到5月份工作交接,6月份正式离职进入新单位,搬家等等,这几个月真是忙的有点喘不过气。即使到了新的单位,也没有闲下来的时间,来了之后就要上手做项目,到这周为止,项目总算初步完成,这才有时间来自我整理一下。即使5月份买了PS5游戏机也没怎么有时间玩,没什么游戏是一方面,忙也是一方面。 ...

七月 11, 2021 · 3 分钟 · 1315 字

在 Windows 上编译 MITK

前言 The Medical Imaging Interaction Toolkit (MITK)是一个免费的开源软件,用于开发交互式医学影像处理软件。最近突然安排我做相关的一些工作,首先就要从编译开始,当然官网也有编译好的版本,可以直接下载使用。本来在Windows上编译这种开源的软件就很麻烦,在加上github上的东西下载巨慢,常常出错,折腾了好久才编译完成,这里就记录一下踩过的那些坑。 ...

三月 29, 2021 · 4 分钟 · 1559 字

Gitea 安装使用

前言 今天偶然看到一个新的开源的git服务软件Gitea,一看到界面,瞬间就爱了,因为之前我自己用的是gitblit,界面比较简单,主要是用来管理公司的一些小项目。今天看到Gitea之后,就决定迁移到过去,简单折腾了一下,配置起来比gitblit要简单一些,但界面却更加漂亮了,总体上看起来比较像github,并且还支持主题系统,很合我的胃口。 下载二进制包 首先去下载对应系统的二进制包,可以去github或者官网下载最新的发布版本。 我是在windows下配置的,所以选择下载windows版的可执行程序。 ...

三月 22, 2021 · 3 分钟 · 1076 字

一些常用的git命令

说明 这里是个人工作时常用的一些git命令,现在越来越多了,小本本都快记不下了,这里稍微做一下整理。 工具下载 首先是git的下载地址: 官网:https://git-scm.com/ taobao镜像:https://npm.taobao.org/mirrors/git-for-windows/ 由于官网的下载速度很慢,推荐使用taobao镜像的下载地址。 ...

十一月 26, 2020 · 3 分钟 · 1227 字

Inno Setup 简体中文语言包

食用方法 Step 1 将ChineseSimplified.isl放到Inno Setup安装目录下的"Languages"文件夹里面 ...

十月 16, 2020 · 1 分钟 · 265 字

Prism note

简介 Prism是一个用于WPF、Xamarin Forms、WinUI等的MVVM框架,刚刚学习,这里只是个人总结的一些知识点笔记。 IoC IContainerProvider 1 2 3 4 protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } 1 2 3 4 5 6 public void OnInitialized(IContainerProvider containerProvider) { var regionManager = containerProvider.Resolve<IRegionManager>(); var viewA = containerProvider.Resolve<ViewA>(); ... } IContainerRegistry 1 2 3 4 5 6 7 8 9 // App.xaml.cs protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.Register<IApplicationCommands, ApplicationCommands>(); containerRegistry.RegisterDialog<NotificationDialog, NotificationDialogViewModel>(); containerRegistry.RegisterForNavigation<Page1>(); containerRegistry.RegisterForNavigation<Page2>(); ... } Module IModule ...

九月 4, 2020 · 3 分钟 · 1338 字