龙芯2K500开发板上实现的呼吸灯效果

前言 本来这篇文章应该在上周就写完的,不过突然被安排出差,一直忙到了现在,终于可以静下心来做些其它事情。 之前和龙芯3A5000主机一起送过来的还有一块龙芯2K500的迷你开发板,整个板子不到巴掌大小。之前只是简单做了上电启动,这次拿到了比较完整的开发资料,可以尝试为开发板编写一些程序了。 由于暂时没有屏幕,只能先试着做一些其它的事情,如通信和IO控制,其中最简单,最基础的就是LED灯的控制。然后我就发现,这个板子居然有一颗可以调节亮度的LED灯!没错,之前做的LED控制都只能进行开关操作,而可以调节亮度,意味着可以做出更多的显示效果,这次我就做了一个呼吸灯的效果。 然后,我也简单了解了一下这种亮度调节的原理,实际上就是通过调节PWM输出的占空比,改变一个周期内输出的高低电平所占的比例,实现控制LED灯亮度的效果。由于引脚输出的电压是固定的,所以不能通过改变电平来控制亮度,而改变高低电平的占空比则是另一种思路,嵌入式设备的屏幕背光亮度调节也是基于同样的原理。 开发板上电启动、连接串口终端 由于暂时没有屏幕,想要和开发板进行交互就只能通过终端的方式,通常开发板都会有调试串口,我们先通过串口终端登录设备,配置好网口IP地址后,再通过网络连接登录设备。 串口的连接方式如下图: 将绿、白、黑三色线以图中方式接好(红线不用接),USB端插入到电脑,应该不需要装驱动,电脑可以直接识别出串口设备。 打开串口终端工具,比如Windows MobaXterm,linux minicom等,我比较喜欢用putty。 配置好端口,设置 波特率:115200 数据位:8位 停止位:1位 校验:无 硬件流控:无 然后给开发板接通电源,就可以看到调试输出信息了。 查看系统信息,可以看到运行的是安装了PREEMPT_RT补丁的实时操作系统。 1 2 3 [root@LS-GD ~]# uname -a Linux LS-GD 5.10.0.lsgd-g434b00a6badf #1 PREEMPT Wed Sep 14 12:57:58 CST 2022 loongarch64 GNU/Linux [root@LS-GD ~]# 配置交叉编译环境 2K500开发板是loongarch64架构的嵌入式板卡。下载好对应的交叉编译工具链后,解压到系统/opt/目录下。按手册来就好~ 1 $ sudo tar -xf toolchain-loongarch64-linux-gnu-gcc8-host-x86_64-2022-07-18.tar.xz -C /opt/ 然后我们需要将交叉编译器添加到系统路径,方便我们接下来使用。 这里我直接将配置写成脚本,方便下次使用。 1 2 3 4 5 6 7 8 $ cd /opt/toolchain-loongarch64-linux-gnu-gcc8-host-x86_64-2022-07-18 # 创建脚本 $ sudo touch environment-setup-loongarch64-linux-gnu # 添加可执行权限 $ sudo chmod +x environment-setup-loongarch64-linux-gnu # 修改脚本内容 $ sudo vi environment-setup-loongarch64-linux-gnu # 内容如下~ 1 2 3 4 5 6 7 8 # environment-setup-loongarch64-linux-gnu CC_PREFIX=/opt/toolchain-loongarch64-linux-gnu-gcc8-host-x86_64-2022-07-18 export PATH=$CC_PREFIX/bin:$PATH export LD_LIBRARY_PATH=$CC_PREFIX/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$CC_PREFIX/loongarch64-linux-gnu/lib64:$LD_LIBRARY_PATH export ARCH=loongarch export CROSS_COMPILE=loongarch64-linux-gnu- 接下来测试一下交叉编译环境 ...

二月 19, 2023 · 3 分钟 · 452 字

weston桌面系统截屏方法

使用weston-screenshooter 但必须启用weston桌面--debug选项,否则会出现以下错误: 1 2 3 [root@RK356X:/]# weston-screenshooter [02:41:05.145] libwayland: error in client communication (pid 776) weston_screenshooter@5: error 0: screenshooter failed: permission denied. Debug protocol must be enabled 以RK3568开发板,buildroot系统为例,修改/etc/init.d/S50launcher,找到weston所在行,添加--debug选项。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...... # Uncomment to disable mirror mode # unset WESTON_DRM_MIRROR export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/var/run} export QT_QPA_PLATFORM=${QT_QPA_PLATFORM:-wayland} weston --tty=2 --debug --idle-time=0& { # Wait for weston ready while [ ! -e ${XDG_RUNTIME_DIR}/wayland-0 ]; do sleep .1 done /usr/bin/QLauncher & }& ...... forlinx开发板使用的yocto系统也类似,修改/lib/systemd/system/weston.service,在weston后添加--debug选项。 ...

二月 3, 2023 · 1 分钟 · 100 字

龙芯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 字