✦RVspace.org✦
本文转自B站up主Powersee,博客地址:https://powersee.github.io/。另外,RVspace.org社区开通了昉·星光VisionFive中文讨论区,欢迎大家来玩~
最近一直在折腾昉·星光VisionFive这块开发板,这是赛昉推出的可运行Linux的RISC-V单板计算机,处理器是赛昉的昉·惊鸿7100 SoC(JH7100),这是一颗RISC-V架构的处理器,工作频率1.0GHz,64位双核,内核性能对标ARM A55。
写入镜像
这块板子的系统运行和树莓派一样,需要先将系统镜像写入内存卡,再插到板子上来运行。目前官方提供的只有 Fedora 这个发行版,可以在GitHub上找到下载链接:https://github.com/starfive-tech/Fedora_on_StarFive
下载完是一个特殊的压缩格式,zst,当前这种zst格式是一种压缩文件,是由ZStandard研发的,作为一种ZStandard压缩文件使用,此文件流行程度是50分(0-100满分)。
需要使用专门的工具才能解压,稍微麻烦了点。工具在这里有提供:
https://rvspace.org/en/Product/VisionFive/Technical_Documents/VisionFive_Single_Board_Computer_Quick_Start_Guide
点击RVspace.org网页左侧的Flashing Fedora OS to a Micro-SD Card可以快速达到。
我是在win10进行操作的,将下载好的解压工具从压缩包里解压出来,和zst文件放在一起。
此时在这个文件夹里的空白处,一只手按住键盘上的Shift键,另一只手按一下鼠标的右键,在此处打开powershell,就可以快速在当前文件夹打开一个命令行窗口。(此处我的 powershell 是自己升级过的,系统自带的是没有带preview的)
执行这条命令就可以解压了,
./zstd.exe -d Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw\.zst -o Fedora-riscv64-jh7100-developer-xfce-Rawhide-20211226-214100.n.0-sda.raw
解压出来的文件差不多 13G,可以使用写盘工具将它写入内存卡中,例如etcher。
开机
之后将内存卡插入开发板,使用HDMI线连接显示器,通电开机,便可进入Fedora了。
默认的用户名是riscv,密码是starfive。
由于没有GPU,且本身只是双核,所以桌面体验会有一些卡顿。于是我放弃用鼠标来控制它,而是选择在电脑上通过ssh来控制它。
通过GPIO控制LED灯
通过这个网页,我们可以了解到这块板子的GPIO信息;
https://rvspace.org/en/Product/General/StarFive_40-Pin_GPIO_Header_User_Guide
准备一颗LED灯,一头连接34号的GND,一头连接40号的GPIO0;
在终端里进行如下的操作(需要 root 身份来执行);
cd /sys/class/gpio
echo 448 > export
cd gpio448
echo out > direction
echo 1 > value
这样便能点亮LED灯;
如果想熄灭它,只需执行
echo 0 > value
官方文档里的这个表格非常重要,刚才我们控制 GPIO0,操作的是 448,如果现在我们想控制 GPIO4,从表格可以查到是 452,那么只需将刚才的 448 换成452 即可让 GPIO4 输出高电平。
用Python脚本监测B站未读消息
我写了一个Python脚本,作用是监测哔哩哔哩上面是否有人给我发私信,也就是我是否有未读消息,如果有的话,则点亮LED灯。而当我看我消息后,脚本检测到目前没有未读消息了,则会将LED灯熄灭。
脚本已放在GitHub 上面,有兴趣的朋友可以参考一下。
https://github.com/powersee/bilibili_unread/blob/master/bili-for-visionfive.py
import requests
import time
import os
# 使用time模块的sleep来控制亮灯熄灯时间间隔
# 使用哪一个针脚,例如 448、450、452 等
gpio = 452
led = '/sys/class/gpio/gpio' + str(gpio)
# 通过浏览器的 F12 获取 cookie
cookie = ""
url_mes = 'https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread?unread_type=0&build=0&mobi_app=web'
headers = {'cookie': cookie}
if os.path.exists(led):
pass
else:
os.system(f'echo {gpio} > /sys/class/gpio/export')
os.system(f'echo out > {led}/direction')
# 将引脚设置为输出端
# 获取未读消息数量
unread = requests.get(url_mes, headers=headers).json()
unfollow_unread = unread['data']['unfollow_unread']
follow_unread = unread['data']['follow_unread']
num = unfollow_unread + follow_unread
# 如果有未读消息,将未读数量打印出来
if num:
print(num)
#GPIO.output(ioNum, GPIO.HIGH)
os.system(f'echo 1 > {led}/value')
print(time.asctime(time.localtime(time.time())))
# 引脚输出高电平,LED灯亮起
else:
# print("No message.")
#GPIO.output(ioNum, GPIO.LOW)
os.system(f'echo 0 > {led}/value')
# 引脚设置为低电平,LED灯熄灭
此外,Powersee在RVspace.org和他的博客上分享了另外两篇使用心得,分别是VisionFive串口调试与编译内核和RISC-V开源软件安装与编译内核,感兴趣的朋友可自行查看~
全部0条评论
快来发表一下你的评论吧 !