0x00 引言

最近 不知道为啥 对硬件又很感兴趣了,可能是因为喵喵的树莓派出了点问题跑不起来了,于是想整点替代的东西。

由于疫情原因封校了,快递大多也不发货,不过学弟买了个 Sipeed 荔枝派 LicheeRV Dock 全志D1开发板,然而他玩不起来放着吃灰了,于是正好合适咱就拿过来折腾折腾好了。(好耶,有新玩具了!

啊,是块 RISC-V 架构的板子!

众所周知,喵喵一篇博客一般会写很多东西。这篇博客就是喵喵对这块板子的开箱体验及上手入门的折腾过程,咱尽量写正确的操作,可能有误导性或者尝试失败的操作放在了每部分的最后面,就留作个记录吧。

文中的先后顺序有所调整,不影响整体阅读 hhh。

(论喵喵翻车了多少次

0x01 开箱 & 板卡介绍

喵喵手里的板子大概是图里的这款,相对而言挺便宜的了。

长相是这样的。Dock 底板上嵌入了一块 RTL8723DS WiFi及蓝牙芯片。计算条通过双 M2 接口插入到底板上。

组合起来是这样的。

LicheeRV 系列是 Lichee 系列下的 RV 子系列,主要为 RISC-V 内核的 Linux SBC 产品。(顺便借用个图

核心板上是一颗全志科技的 D1 芯片。

D1-H 是全志科技首款基于RISC-V指令集的芯片,集成了阿里平头哥64位C906核心,支持RVV,1GHz+主频,可支持Linux、RTOS等系统。同时支持最高4K的H.265/H.264解码,内置一颗HiFi4 DSP,最高可外接2GB DDR3,可以应用于智慧城市、智能汽车、智能商显、智能家电、智能办公和科研教育等多个领域。

Via D1-H 芯片介绍

接下来就是对板子的折腾故事啦。

0x02 烧录系统 & 上电测试

烧录工具: PhoenixCard

系统镜像:包含两种系统,Tina 为官方魔改的 OpenWRT 系统,非常轻量;而 Debian 为桌面级镜像。

Tina是基于OpenWRT魔改的小型Linux系统,不含工具链,建议用户运行类似WAFT这样的wasm字节码程序或者其他脚本类程序,或者使用交叉编译工具链进行二进制可执行程序的开发。

Debian镜像是桌面级镜像,含包管理器和工具链等,用户可以像在PC上一样开发,适合普通软件工程师使用,缺点是体积大,速度慢。

  • 国内用户:Tina 系统镜像

    或者 Debian 系统镜像 (百度网盘 提取码:wbef)

  • 国外用户:Mega

Tina 系统登录用户名:root 密码:tina

Debian 系统登录用户名:sipeed 密码:licheepi

这里借用个官方的图,记得选的是 启动卡

Tina 系统镜像只有 110多 MiB,刷起来很快,大概半分钟左右;而 Debian 系统镜像由于差不多 3.7+GiB,貌似需要10多分钟,可能很长一段时间界面上没动静,等着就好了。

连上 HDMI,怼上 USB 键鼠,插电开机。

噢,这里要注意的是,直接用 USB C to C 的线是不能给他提供供电的,官方的说明

当前核心板的USB Type-C连接器使用CC引脚作为自动OTG的识别引脚,但是与USB C to C 数据线的识别存在冲突,只能使用A to C数据线,可在硬件上改动器件进行切换,共有两种工作方式…

如需使用C to C数据线,则需要改动TypeC接口周围的器件对应CC识别模式,并在需要扩展外置USB设备时手动切换为HOST模式。

于是么得办法,找了条 USB A to C 的线才能上电。

喵喵先试了试 Tina 系统,顺便为了看看串口的消息,得找个工具,然而手上没有独立的 CH340 / CP2102 之类的 USB 转 UART 串口调试器。

(嗯,手边一个 FPGA 板子上自带了个 CP2102,但看了下手册发现芯片使用的 3.3V 电平与 FPGA 的 1.8V 电平中间加了个电平转换芯片,也就是说如果直接复用 FPGA 引出的管脚,有烧坏 FPGA 的风险,这显然太危险,坏了就太亏了

考虑到手边只有个开源的逻辑分析仪 nanoDLA,虽然只能收信号不能发信号,但毕竟信号都是01跳变的电平,再加上本身上位机也带有 UART 协议解析,于是突然一想不如直接把线怼到板子的 UART 管脚上把数据抓下来。

嗯,还不错,又不是不能用.jpg

好耶,跑起来了!

接下来试试 Debian,毕竟咱还是用来跑东西玩的,顺便用来开发(?),后文就都是 Debian 了。

烧录的是 LicheeRV_Debian_dock_hdmi_8723ds.img 这个镜像,支持 LicheeRV Dock 底板,支持 HDMI 接口,8723ds 是 WiFi 芯片的型号。

烧好后等了好一会儿,终于屏幕上有显示了!

用上面的默认密码登录进去,随便看看

好耶!感觉还行?

顺便来张板卡的实景图,忽略乱七八糟的桌面(

0x03 配置 WiFi

图形化界面中,依次点击左下角开始菜单 / Preferences / Connman Settings,即可打开 WIFI 连接页面

BTW,终端位于 System Tools / Termit

在界面上配置 WiFi 即可,连接后会占用 wlan0 网口。

现在通过屏幕或者通过你的路由器看一看 IP 地址,就能从 ssh 上去啦!

刚开始喵喵改的是 /etc/wifi/wpa_supplicant.conf里的 ssid 和 密码,但是发现重启之后也连不上 WiFi,猜想是没开启 WiFi 的缘故。

但是在已经配置上述文件的情况下再在图形化界面连接 WiFi,不知道为啥连上之后整个界面就卡死了,键盘鼠标啥反应都没有……

可是重启后又连上 WiFi 了而且图形化界面并没有卡死反而能用了(???),而占用的是 wlan1 接口。

另外,之后重新刷了镜像,直接在图形化界面上配(而没有配这个文件),就不会出现卡死的情况,有点迷,摸了。

噢,后面在网上也查到了类似的问题:Sipeed Lichee RV Dock, with Debian: system locks up when wifi on “Association” in Connman

他发现连接一个无密码的 WiFi 就能用了,草。

另外,这里也提示了 connman 的配置文件存放在 /var/lib/connman/ 下。

(意思是他没有调用 /etc/wpa_supplicant 或者 /run/wpa_supplicant

比如咱在图形化界面上配置好了的话,里面的文件结构是这样子的。(按理说直接配文件也行吧

还有一种方法是用 wpa_cli 工具,不过咱没试过,这里就丢一份备用吧。

wpa_cli -iwlan0 scan
wpa_cli -iwlan0 scan_result
wpa_cli -iwlan0 add_network
wpa_cli -iwlan0 set_network 1 ssid '"YourSsid"'
wpa_cli -iwlan0 set_network 1 psk '"YourPassword"'
wpa_cli -iwlan0 enable_network 1
wpa_cli -iwlan0 save_config
wpa_cli -iwlan0 status 

网上的说法是需要注意:wifi名以及wifi密码的字符串需要用一个单引号加一个双引号包住

0x04 更换软件源 / 换源

默认的是官方的 ftp,这里可以换成国内的镜像站。

用你喜欢的编辑器打开,比如 nano

sudo nano /etc/apt/sources.list 

比如换成阿里的:

deb https://mirrors.aliyun.com/debian-ports/ sid main 
deb https://mirrors.aliyun.com/debian-ports/ unreleased main 
# deb http://ftp.ports.debian.org/debian-ports/ sid main 
# deb http://ftp.ports.debian.org/debian-ports/ unreleased main 
# deb-src http://ftp.ports.debian.org/debian-ports/ sid main

或者 上交 SJTU 的:

deb [arch=riscv64] http://mirror.sjtu.edu.cn/debian-ports unstable main
deb [arch=riscv64] http://mirror.sjtu.edu.cn/debian-ports unreleased main

(然而上交的源咱用的时候 expire 了,估计是太久没同步的原因 吧

而后需要手动 添加 public key,不然会提示由于公钥不可用导致签名无法验证,从而无法更新。

The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E852514F5DF312F6

第一种方法:

可以直接把下载好的 archive_2022.key 通过 SD 卡或者 scp 或者其他你喜欢的方式传到板子上,然后 add。

下载地址: 咱这里,或者 百度网盘

sudo apt-key add archive_2022.key 
sudo apt update

或者第二种方法:

下载 deb 包来更新下密钥

之后执行

sudo dpkg -i debian-ports-archive-keyring_2022.02.15_all.deb
sudo apt update

再或者,第三种方法:

从 gpg keyserver 接收公钥

sudo apt-key adv --keyserver keys.gnupg.net --recv-keys <PUBKEY>
# or
# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <PUBKEY>

# 或者先接收再导入到 apt-key
# gpg --keyserver keys.gnupg.net --recv-key <PUBKEY>
# gpg -a --export <PUBKEY> | sudo apt-key add -

sudo apt update

别忘了 update

0x05 修改时区

咱这里用的 Asia/Shanghai (CST, +0800)

TZ=Asia/Shanghai
sudo ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime

或者也可以用 timedatectl

timedatectl set-timezone Asia/Shanghai
timedatectl

date 看下时间就发现变成 CST 时区了。

0x06 扩容 SD 卡中的 rootfs

安装了一些东西之后,发现装不下啦!

看了看发现 根目录 / 下只剩下 200多 MiB 可用空间了,这不对啊,这可是张 64GB 的 SD 卡啊!

看一下分区就能发现,根目录挂载到了 SD 卡的第7个分区,而最后的第8分区则没有利用上。

把 SD 卡插到读卡器上,直通进 Ubuntu 虚拟机里也可以看到。

这里参考的是 LicheeRV dockのrootボリュームを拡張したりいろいろ 这篇。

直接在板子上进行操作

(如果您数据宝贵,建议先对 SD 卡内容进行备份)

删除最后的第8个分区,将第7个分区扩展到 100%,而后退出,最后扩展文件系统。

[emailprotected]:~$ sudo parted
GNU Parted 3.4
Using /dev/mmcblk0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: SD EC2QT (sd/mmc)
Disk /dev/mmcblk0: 64.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name           Flags
 1      21.2MB  25.4MB  4129kB               boot-resource  msftdata
 2      25.4MB  25.6MB  258kB                env            msftdata
 3      25.6MB  25.9MB  258kB                env-redund     msftdata
 4      25.9MB  37.2MB  11.3MB               boot           msftdata
 5      37.2MB  37.7MB  516kB                dsp0           msftdata
 6      37.7MB  52.2MB  14.5MB               recovery       msftdata
 7      52.2MB  8642MB  8590MB  ext4         rootfs         msftdata
 8      8642MB  64.0GB  55.4GB               UDISK          msftdata

(parted) rm 8
(parted) p
Model: SD EC2QT (sd/mmc)
Disk /dev/mmcblk0: 64.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name           Flags
 1      21.2MB  25.4MB  4129kB               boot-resource  msftdata
 2      25.4MB  25.6MB  258kB                env            msftdata
 3      25.6MB  25.9MB  258kB                env-redund     msftdata
 4      25.9MB  37.2MB  11.3MB               boot           msftdata
 5      37.2MB  37.7MB  516kB                dsp0           msftdata
 6      37.7MB  52.2MB  14.5MB               recovery       msftdata
 7      52.2MB  8642MB  8590MB  ext4         rootfs         msftdata

(parted) resizepart 7 100%
(parted) p
Model: SD EC2QT (sd/mmc)
Disk /dev/mmcblk0: 64.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name           Flags
 1      21.2MB  25.4MB  4129kB               boot-resource  msftdata
 2      25.4MB  25.6MB  258kB                env            msftdata
 3      25.6MB  25.9MB  258kB                env-redund     msftdata
 4      25.9MB  37.2MB  11.3MB               boot           msftdata
 5      37.2MB  37.7MB  516kB                dsp0           msftdata
 6      37.7MB  52.2MB  14.5MB               recovery       msftdata
 7      52.2MB  64.0GB  64.0GB  ext4         rootfs         msftdata

(parted) q
Information: You may need to update /etc/fstab.

[emailprotected]:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       3.6G  3.2G  224M  94% /
devtmpfs        242M     0  242M   0% /dev
tmpfs           246M     0  246M   0% /dev/shm
tmpfs            99M  892K   98M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs            50M   24K   50M   1% /run/user/110
tmpfs            50M   20K   50M   1% /run/user/1000
[emailprotected]:~$ ls -al /etc/fstab
-rw-r--r-- 1 root root 92 Jun  1  2021 /etc/fstab
[emailprotected]:~$ cat /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
/dev/mmcblk0p7 / ext4 rw,defaults,relatime,discard 0 1
[emailprotected]:~$ sudo resize2fs /dev/mmcblk0p7
resize2fs 1.46.2 (28-Feb-2021)
Filesystem at /dev/mmcblk0p7 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 4
The filesystem on /dev/mmcblk0p7 is now 15617597 (4k) blocks long.

[emailprotected]:~$ df -ah
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  3.2G   53G   6% /
devtmpfs        242M     0  242M   0% /dev
proc               0     0     0    - /proc
sysfs              0     0     0    - /sys
tmpfs           246M     0  246M   0% /dev/shm
devpts             0     0     0    - /dev/pts
tmpfs            99M  892K   98M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
cgroup2            0     0     0    - /sys/fs/cgroup
debugfs            0     0     0    - /sys/kernel/debug
fusectl            0     0     0    - /sys/fs/fuse/connections
configfs           0     0     0    - /sys/kernel/config
tmpfs            50M   24K   50M   1% /run/user/110
tmpfs            50M   20K   50M   1% /run/user/1000

扩容完成啦!

说一下尝试过的方法,请注意这里的方法不可行!不可行!不可行!

之前在 Windows 下想用 DiskGenius 来扩容。

也是删除最后一个分区,然后把倒数第二个扩容到最后,结果报错啦!

说是在 inode 里有调用或者交叉 link 啥的???麻了呀!

然而咱么得办法,想想要不先把这个 rootfs 分区备份一遍,重新刷原版系统再恢复回去?

于是就这么干了,刷好之后用备份好的 rootfs 分区覆盖掉,结果发现怎么系统起不来了……麻了!!!!

估计是其他的 boot 等分区锅了的原因,尝试着把备份好的在 DiskGenius 里还原,可是,他不支持还原这文件系统,让咱选一个其他的分区来还原!!!也就是说他对这种非 Windows 系统分区支持不大行。

可恶啊!!!

另一篇文章 中也提到了这点。

最后么得办法只能又重刷了一遍官方镜像……

另一种扩容方案:

当然,如果挂载到 Linux 的虚拟机里,再进行扩容操作应该是可行的,这里就略了,可以参考 【平头哥Sipeed LicheeRV 86 Panel测评】7-Waft图形界面开发测试(下) 这个帖子里的做法。

0x07 停止系统日志错误显示

在 ssh 界面,会不停地提示 kernel 错误的信息。

Message from [emailprotected] at Mar 20 07:05:09 ...
 kernel:[  386.031121] Oops [#17]

虽然不影响正常使用,但让喵喵看得非常难受,比如在 nano 下编辑着东西或者 htop 下看着监控(咋监控室老大爷啊。。),动不动来个内核错误的消息弹出来,啊,忍不了!

查了下,也有人遇到了这问题,官方在 twitter 上的回复 说是 8723 WiFi 芯片驱动的问题,但是他能正常工作,忽略就完事了。

啊草,那总出现也太难受了吧……

于是有个又不是不行的方案,那就是 只让错误信息输出给 root 用户 就好了。

用你喜欢的编辑器打开 /etc/rsyslog.conf 文件,修改最后一行,将 * 改成 root

# *.emerg             :omusrmsg:* 
*.emerg             :omusrmsg:root  

重启之后再 ssh 上去就不会再弹 message 了。

BTW,丢个日志截图在这里。

0x08 修改密码

passwd

按提示输入两次密码就完事了。

0x09 安装 neofetch

咱装系统都喜欢整个 neofetch 看看,哈哈(

sudo apt install neofetch
neofetch

好耶!

BTW, 这玩意其实可以通过指定图案对应的文件来实现读取任意文件,如果配上 suid 或者 sudo 权限的话还能越权读了(

LFILE=file_to_read
neofetch --ascii $LFILE
# sudo neofetch --ascii $LFILE

0x0A 安装 curl wget git

默认这个镜像里没有啥方便的网络请求工具,于是顺手装一下。

sudo apt install curl wget git

顺便感叹一下在这上面装东西确实挺慢的……

好耶,在 RV 板子上访问咱博客!

0x0B 安装 speedtest

还是先拿 speedtest-cli 凑合用一下吧……

sudo apt install speedtest-cli
speedtest

啊,这 WiFi 连接确实不大稳。。又不是不能用

其实喵喵不大喜欢 python 编写的那个 speedtest-cli,还是习惯官方的 Speedtest® CLI

(最开始这么弄的,结果发现翻车了

## If migrating from prior bintray install instructions please first...
# sudo rm /etc/apt/sources.list.d/speedtest.list
# sudo apt-get update
# sudo apt-get remove speedtest
## Other non-official binaries will conflict with Speedtest CLI
# Example how to remove using apt-get
# sudo apt-get remove speedtest-cli
# sudo apt-get install curl
curl -s https://install.speedtest.net/app/cli/install.deb.sh | sudo bash
sudo apt-get install speedtest

这是官方的安装方案,提示了如果之前安装过 speedtest-cli 的话先移除。

可恶啊,添加的软件源里不支持 riscv64.

那在官网下载预编译的二进制程序。 看上去没有 riscv64 架构的,唔……(当喵喵没说

0x0C 安装 pip3

sudo apt install python3-pip

之后就能 pip3 install xxx 啦!

0x0D 一些其他问题

Broken packages

sudo apt upgrade 的时候发现锅了

[emailprotected]:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libwacom9 : Depends: libwacom-common (= 2.1.0-2) but 1.8-2 is to be installed
E: Broken packages

参考 Package blocking upgrades on Jammy 这个,把 libwacom2 移除就好了。(草

sudo apt remove libwacom2

之后就能执行 sudo apt upgrade 了。

0x0E 小结

由于喵喵经验不足,也是第一次碰这板子,可能说的有错误的地方,希望大家能多多指正哈!

(论喵喵翻车了多少次

挺想吐槽的一点是,这个 WiFi 芯片连接的稳定性确实不咋样,在没有连 HDMI、串口的情况下,喵喵都得去路由器的管理界面上看荔枝派有没有连上 WiFi,而且即使连上了也不一定就能 ssh 上去,甚至不一定能 ping 通。所以经常得重启几次才行……(摊手,难难

另外目前 RISV64 架构的软件支持还在路上,很多软件还不能直接拿来用,得自己编译,难难。

总之,感觉这板子目前来看只能说是个玩具,拿来教学科研还是挺有意义的,工业化生产环境使用的话还需要有一段相对长的路要走,大概这样子吧。

希望 RISCV 社区能越做越好,国产芯片和国产操作系统能进一步发展吧!

0xFF References & Extended Reading

(溜了溜了喵~