visionfive 是赛昉科技推出的一款开发板,使用的处理器是他们自家研发的惊鸿 7100(JH7100),这是一颗 risc-v 架构的处理器,双核 U74,U74 对标的是 ARM 的 Cortex-A55 。
写入镜像
这块板子的系统运行和树莓派一样,需要先将系统镜像写入内存卡,再插到板子上来运行。目前官方提供的只有 Fedora 这个发行版,可以在 GitHub 上找到下载链接。
https://github.com/starfive-tech/Fedora_on_StarFive
下载完是一个特殊的压缩格式,zst,我搜了一下
当前这种 ZST 格式是一种 压缩文件 ,是由 ZStandard 研发,作为一种 ZStandard压缩文件使用,此文件流行程度是 50 分(0-100满分)。
还得使用专门的工具才能解压,稍微麻烦了点。工具在这里有提供
点击网页左侧的 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 输出高电平。
dts | sys | Pin Name | Num | Num | Pin Name | sys | dts |
3.3V Power | 1 | 2 | 5V Power | ||||
i2c1 | i2c-1 | GPIO48 (I2C SDA) | 3 | 4 | 5V Power | ||
i2c1 | i2c-1 | GPIO47 (I2C SCL) | 5 | 6 | GND | ||
494 | GPIO46 | 7 | 8 | GPIO14 (UART TX) | ttyS0 | uart3 | |
GND | 9 | 10 | GPIO13 (UART RX) | ttyS0 | uart3 | ||
492 | GPIO44 | 11 | 12 | GPIO45 | PWM2 | ||
470 | GPIO22 | 13 | 14 | GND | |||
468 | GPIO20 | 15 | 16 | GPIO21 | 469 | ||
3.3V Power | 17 | 18 | GPIO19 | 467 | |||
spi2 | spidev0.0 | GPIO18 (SPI MOSI) | 19 | 20 | GND | ||
spi2 | spidev0.0 | GPIO16 (SPI MISO) | 21 | 22 | GPIO17 | 465 | |
spi2 | spidev0.0 | GPIO12 (SPI SCLK) | 23 | 24 | GPIO15 (SPI CE0) | spidev0.0 | spi2 |
GND | 25 | 26 | GPIO11 (SPI CE1) | spidev0.0 | spi2 | ||
457 | GPIO9 | 27 | 28 | GPIO10 | 458 | ||
456 | GPIO8 | 29 | 30 | GND | |||
454 | GPIO6 | 31 | 32 | GPIO7 (PWM0) | PWM0 | ||
PWM1 | GPIO5 (PWM1) | 33 | 34 | GND | |||
451 | GPIO3 | 35 | 36 | GPIO4 | 452 | ||
449 | GPIO1 | 37 | 38 | GPIO2 | 450 | ||
GND | 39 | 40 | GPIO0 | 448 |
对此我写了一个 Python 脚本,作用是监控哔哩哔哩上面是否有人给我发私信,也就是我是否有未读消息,如果有的话,则点亮 LED 灯。而当我看完消息后,脚本检测到目前没有未读消息了,则会将 LED 灯熄灭。
脚本已放在 GitHub 上面,有兴趣的朋友可以参考一下。