65.9K
CodeProject 正在变化。 阅读更多。
Home

设置新的 VisionFive 2 RISC-V SBC

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2023年11月9日

CPOL

39分钟阅读

viewsIcon

14879

VisionFive 2 RISC-V SBC 是 Raspberry Pi 4 的替代品,但其软件还有一些粗糙之处。我决定写下我使用 VisionFive 对一系列 Raspberry Pi 3 爱好实验的经验。

目录

简介

有多种小型单板计算机 (SBC) 可作为 Raspberry Pi 3/4/5 的替代品。大多数 SBC 的物理尺寸与 Raspberry Pi 3/4 相似,并提供类似的功能,例如用于物联网的 40 引脚连接器,以及 HDMI、USB 和 RJ-45 连接器。这些连接器允许设备用作带有显示器、键盘、鼠标和以太网连接的台式机。大多数设备也提供 Wi-Fi 和蓝牙功能,但这可能需要一个适配器(USB 或如 Orange Pi 5 Plus 中的 M.2 连接器)。一些替代品不仅有 microSD 卡驱动器,还有一个适合 NVMe 固态硬盘的 M.2 连接器。大多数设备也可以访问 USB 固态硬盘。

一些替代品,如 Orange Pi 5,基于 ARM 处理器,这些处理器在各种 Linux 发行版中都有良好的支持。微软现在提供 ARM 版 Windows,它不像 x86 版那样可以单独购买,而是预装在一些笔记本电脑设备上。还有一个 WoR 项目,可以为 Raspberry Pi 构建 Windows for ARM 安装程序,并为 Orange Pi 5 或其他配备 Rockchip 3588 的 SBC 提供实验性版本。

另一种替代品是 RISC-V SBC,例如 VisionFive 2 和 Lichee Pi 4。这些设备的生态系统尚未完善。硬件和软件都处于开发阶段,这意味着使用这些替代品需要一定的专业知识以及面对失败的毅力。

背景

由于 VisionFive 2 的外观与 Raspberry Pi 3 相似,我选择了它。AliExpress 和 Amazon 都有各种产品和套装。我选择了一个通过 Amazon 购买的 GeekPi 套装。

本次实验的目的是尝试复制我用 Raspberry Pi 3 进行的物联网项目实验。实验的代码位于我的 Github 仓库:https://github.com/RichardChambers/raspberrypi

随着我进行这个项目,我开始想我是否需要从适用于 Raspberry Pi 和 Orange Pi 的 WiringPi 库改用其他库,例如标准的 Linux 库 libgpiod。当我尝试将一些 Raspberry Pi 3 项目移植到 Orange Pi 5 Plus 时,有一个适用于 Orange Pi 的 WiringPi 库移植版本,源代码唯一需要更改的是 GPIO 引脚号,这与 Raspberry Pi 3 不同。对于 VisionFive 2,似乎没有 WiringPi 库的 RISC-V 版本。另一方面,我的印象是 libgpiod 库在 Raspberry Pi 和 Orange Pi 上可用且可使用,前提是 Linux 内核支持 libgpiod 库。然而,libgpiod 并不提供 WiringPi 库的所有功能,因为它主要只针对 GPIO 引脚。

VisionFive 2 似乎有几个硬件版本。硬件版本丝印在 PCB 处理器旁边以及 StarFive 标志印制处。似乎 1.2 和 1.3 版本板都在出货。

关于工具的重要说明

在我使用 VisionFive 2 的这段时间里,我发现拥有一台装有 Linux 的 PC 是一个关键资源。我使用的是一台装有旧 i7 处理器的 Dell PC 和一台我自制的装有第 11 代 i5 处理器的 PC。Dell 运行 Windows 10 Pro,自制 PC 运行 Windows 11 Pro,两者都安装了 Windows Subsystem for Linux (WSL),并使用 Ubuntu 作为 WSL 发行版。一些问题在 Linux 系统可用后得到了相当容易的解决。

我还使用了 Windows 10 和 Windows 11 附带的工具,以及从 Introducing Raspberry Pi Imager, our new imaging utility - Raspberry Pi 下载的 Raspberry Pi Imager 应用程序。看起来 Raspberry Pi Imager 也适用于 Ubuntu x86 和 MacOS。

这台 Dell PC 前面板有标准的 SD 卡插槽和几个 USB 端口,而我的自制 PC 没有 SD 卡插槽。在使用 Windows 处理 VisionFive 2 的 microSD 卡时,我使用了 microSD 转 SD 适配器和 microSD 转 USB 适配器。这两个适配器在两台 PC 上都工作正常。

除了 microSD 卡转 USB 适配器外,另一个工具是 TTY 转 USB 适配器电缆。这条电缆允许您连接一台运行终端模拟器(如 PuTTYgtkterm)的 PC 到 VisionFive 2 40 引脚连接器上的 UART 引脚。如果您因为某种原因无法使用带有 HDMI 连接显示器以及 USB 键盘和鼠标的图形桌面环境,这将非常有用。如果您在调试 Linux 内核构建和引导问题时,这条电缆尤其有用。请注意,这些电缆中的 TTY 转 USB 转换器的质量可能有所不同,Windows 可能会拒绝某些 Linux 能接受的电缆。此外,有些电缆的引脚连接器有标签,有些则没有,这可能会使 TTY 引线连接到 40 引脚连接器上正确的 UART 引脚变得有些猜测。

开箱和设置

我购买的套装包含以下组件:

  • 8 GB VisionFive 2 SBC 板,我的是 1.2A 版本板
  • Type C 接口电源适配器,输出 5v 3.6 安
  • WiFi 适配器
  • 64GB microSD 卡
  • microSD 转 USB 适配器
  • TTL 转 USB 电缆
  • 带支架的亚克力底板
  • CPU 散热器

我遇到的第一个问题是关于 VisionFive 2 板的英文文档不足。通过 StarFive 网站。StarFive 网站有点慢,难以导航,而且有些令人困惑。我确实找到了其他人发布的关于 VisionFive 2 实验的几篇文章,这在一定程度上有所帮助,尽管它们更多地让我感到恐惧,担心我刚刚花了 100 多美元买了一块看起来像装饰品的板子。

然后我发现了 这篇文章,它帮助我开始了。然而,我的经历要容易一些,因为软件已经有了几个月的改进,变得更稳定了。随着我继续使用该设备,我似乎在互联网搜索方面变得更好了,或者也许我已经学到了足够的知识来提出明智的问题。无论如何,我开始找到有用的资源,并且在理解 VisionFive 2 SBC 及其软件方面取得了稳步进展。

最近,我发现了 RVspace 论坛和 RVspace wiki。RVspace wiki 上的这个列表 可用 PDF 文档 -> 英文文档,包含许多关于该板的文档以及各种项目的应用笔记。

我决定使用 StarFive 网站上的 Debian 发行版,它有两个不同的链接:Baidu Cloud Disk 和 OneDrive。还有一个 StarFive Github 仓库,我还没有调查过,只是看到了看起来像是 Linux 内核源代码和构建区域。

我尝试了每个链接,它们似乎都要求我先进行身份验证。Baidu Cloud Disk 链接显示了一个动漫风格的背景,上面似乎有一个登录页面,但由于都是中文,我不确定。然而,动漫女孩形象的胸部非常丰满。OneDrive 要求我使用我的 Microsoft OneDrive 凭据进行身份验证,所以我拒绝了。

自那次初次尝试以来,当我使用同一台 PC 和浏览器返回这些链接时,不再要求身份验证,并且我在浏览器中看到一个文件层次结构,可以进行导航。

我决定使用 OneDrive 存储库获取 Debian 镜像。导航到文件夹层次结构后,我看到一个文件夹列表,其名称是日期。我选择了最近的一个,对我来说是 202310,文件夹中有发行说明以及几个不同的文件夹,它们似乎是针对不同存储设备的,如 SD 卡、NVMe 驱动器或 EMMC 的不同镜像。

当我使用不同的 PC 和浏览器再次访问该网站时,选择了 Baidu Cloud Disk 链接,我注意到用户名 csx2 似乎被自动填充到左侧的编辑框上方,那里有一个带有中文文本的按钮。我只点击了按钮,它就带我进入了存储区域。之后,当我使用同一台 PC 和浏览器返回该网站时,我直接进入了存储区域,无需进行任何身份验证。

但是,当我尝试从 Baidu Cloud Disk 下载时,我被要求安装一个应用程序,我拒绝了。然后我导航到 OneDrive 链接,它要求我进行身份验证,我退出了,然后又回来了,没有要求身份验证。从 OneDrive 下载工作正常,没有关于安装附加软件的提示。

由于我使用 microSD 卡作为存储,我使用了 starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img.bz2 文件,这是一个包含实际镜像的 zip 文件。

创建可启动的 microSD 卡

我在 Windows 10 PC 上使用 Raspberry Pi Imager 应用程序创建了可启动的 microSD 卡。这是我曾用于 Raspberry Pi 4 和 Orange Pi 5 Plus 创建可启动 microSD 卡的同一个应用程序。我使用 7zip 将镜像文件解压到一个文件夹中。我将 microSD 卡插入了我的套装附带的 microSD 转 USB 适配器。我认为任何其他 SD 驱动器都可以工作,尽管您可能需要一个 microSD 转 SD 卡适配器才能使用某些类型的驱动器。

我的套装附带的 microSD 卡似乎是为 Windows 格式化的,当我插入 USB 适配器时,Windows 立即识别了新驱动器,并且它与 Raspberry Pi Imager 应用程序完美配合。

另外,在用我的 Orange Pi 5 Plus 处理 microSD 卡时,Windows 拒绝显示驱动器。我使用了 Windows 中的 磁盘管理 工具,它允许我看到磁盘设备(我的 PC 上的磁盘 3),并在格式化后,Windows 显示了设备,我得以成功使用 Raspberry Pi Imager 应用程序。

启动设备

我连接了 HDMI 显示器、键盘和鼠标。我没有尝试在第一次启动时连接以太网或 Wi-Fi。然后我将可启动的 microSD 卡插入驱动器并打开电源。我等待 HDMI 显示器上出现内容,几分钟后,没有任何显示。我关闭了设备,并回到我找到的有帮助的文章,看看是否能找出问题所在。

在 USB Type C 电源接口附近有两个 LED,一个红色,一个绿色,还有一个红色 LED 旁边有一个小电源按钮瞬时开关。红色 LED 点亮了,但显示器上没有任何显示。在再次阅读上述文章后,我看到提到了需要正确设置引导跳线开关。

在更改了用于从 SD 卡引导的启动开关后,我打开了设备。红色 LED 点亮,几秒钟后绿色 LED 开始闪烁,显示器上出现了正常的 Linux 滚动文本。大约一分钟后,我首次成功登录了我的 VisionFive 2。

这是引导跳线底部的特写图像,位于 40 引脚连接器下方,在一个丝印的白色线条框内,有两个小型滑动开关。在此照片中,RGPIO_1 是顶部跳线开关,RGPIO_0 是底部跳线开关。正如跳线开关右侧丝印所示,从 microSD 卡启动需要将 RGPIO_1 设置为 0 或 L(低),开关在此照片中向右移动;将 RGPIO_0 设置为 1 或 H(高),开关在此照片中向左移动。我的板子开箱时两个跳线开关都设置为 L。

初印象

这个桌面对我来说很不寻常,我习惯于默认的 Ubuntu 桌面,并且不太熟悉各种可用的 Linux 桌面。顶部有一个标有“Activities”的按钮,点击后底部中央会出现一个工具栏。底部的工具栏允许启动几个应用程序:终端窗口、FireFox、VLC 媒体播放器和文件管理器 GUI。

设备成功启动并登录后,我使用终端窗口应用程序进行了一些导航。默认用户具有标准的文件夹层次结构,其中包含一个 Documents 文件夹。

接下来,我插入了套装附带的 Wi-Fi 适配器,操作系统识别了设备,我设置了 Wi-Fi 凭据。套装中的 Wi-Fi 适配器似乎只支持 2.4 GHz,因为我没有看到 5 GHz Wi-Fi 接入点。我不知道这是硬件还是软件限制。后来我尝试了另一个 USB Wi-Fi 适配器,但该适配器似乎与 VisionFive 2 无法正常工作,所以我使用的是套装中的适配器。我不知道是驱动程序问题还是某种硬件不兼容,尽管该适配器在 Windows PC 上工作正常。

试用软件

设置好 Wi-Fi 后,我尝试了 FireFox 应用程序,它似乎可以工作,尽管它最初显示一个全黑窗口,然后才显示实际页面。我能够浏览包括 YouTube 在内的各种网站。YouTube 视频可以播放。我偶尔遇到一个舞蹈视频的问题,但一个新闻访谈视频似乎播放得很好。速度有点慢,但这可能是 microSD 卡存储和 2.4 GHz Wi-Fi 结合的结果。

然后我尝试使用 vi 编辑器创建一个简单的 HelloWorld C 源文件,它工作正常,允许我输入 C 文本并保存。当我尝试编译 C 源文件时,我发现镜像中没有 C 编译器。我使用 sudo apt install gcc 安装了一个 C 编译器,并成功编译并运行了我的 HelloWorld 程序。

除了 gcc,我还需要 apt install gitmake 才能为我的 Raspberry Pi 仓库实验设置工作环境。使用 git,我成功地将我的 Raspberry Pi 仓库克隆到 microSD 存储上,并在安装 sudo apt install make 后,能够运行仓库中的 Project01。然而,它依赖于 WiringPi 库,我需要解决这个问题,因为 VisionFive 2 中缺少该库。

我将把 WiringOP 库移植到 VisionFive 2 的工作留待以后进行,初步浏览代码表明我需要先学习一些知识。而且,切换到其他库,如 libgpiod,可能更可取。

我使用 apt-cache search {package-name} 来检查我可能感兴趣的其他一些软件。Apache2 Web Server 的最新版本可用,GimpSubversion 的最新版本以及Java Runtime Environment(包 default-jre)也是可用的。Php 也可用,包括 MySQL 和 Postgres 在内的几个数据库引擎也可用。

在想办法扩展文件系统分区以使用所有 64 GB microSD 卡后,我使用 apt install 设置了一个 VisionFive 2 托管的网站,其中包含 Apache2 Web 服务器、PHPPostgres。我已经准备了一个使用 PHP 的小型测试网站,并准备使用 PostgresPHP 来构建一个简单的 Web 访问数据库应用程序。

我在配置和运行 Postgres 数据库引擎时遇到了一些问题,但这归因于我缺乏经验且找不到足够有用的文档。我遇到的部分问题是我雄心勃勃地尝试使用 PEAR。在与 PEAR 失败后(它似乎混合了 PHP 4/5 组件和 PHP 8.1),我只是使用 apt remove 将其卸载。

花了一个多小时尝试设置 Postgres 用户角色和测试 PHP 数据库应用程序失败后,我使用了 apt remove 卸载了各种 Postgres 包,使用了 apt autoremove 清理了一下,重新启动了设备,然后再次尝试安装 Postgres,之后设置就顺利多了。我还有另一篇 CodeProject 文章记录了那次经历,草稿即将发布。

Python3 可用,并且是 Debian 镜像的一部分。您需要输入 python3 来启动应用程序,因为仅输入 python 会显示 -bash: python: command not found。Python3 报告它是 Python 3.10.9

您应该检查 PATH 环境变量中的目录列表,因为该列表可能不包含您可能需要的所有目录。例如,在尝试使用 resize2fs 命令时,我发现它所在的目录以及许多其他管理工具(/sbin)未包含在 PATH 目录列表中。

microSD 卡镜像的存储大小限制

在使用了 64 GB microSD 卡进行了几天的实验后,在安装了 Gimp 和几个小的 Github 仓库后,我遇到了磁盘空间不足的问题。我想要尝试 Apache2 Web 服务器和其他一些东西,但不得不等待我订购的新 microSD 卡到货。新卡应该比我套装附带的 64 GB 卡更快,容量也更大,一张 256 GB 的 U3 V30 卡,面向游戏设备和 4K 视频录制设备。

以下是我在遇到磁盘空间不足时 df 的报告(分区 /dev/mmcblk1p4 的大小很重要):

user@starfive:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1716100       0   1716100   0% /dev
tmpfs             396776    3444    393332   1% /run
/dev/mmcblk1p4   3840592 3795624     28584 100% /
tmpfs            1983868       0   1983868   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
tmpfs             396772      88    396684   1% /run/user/1000
user@starfive:~$

稍后,我再次查看了 df 报告,意识到数字加起来不足 64 GB。关闭设备,我取出 microSD 卡,然后在我的 Windows PC 上使用 Windows 10 Pro 的磁盘管理工具查看了磁盘。它显示磁盘有大约 55 GB 的未分配空间!

我尝试使用磁盘管理工具扩展 Linux 文件系统分区,但它不允许我这样做。经过一番阅读,我决定需要进行一些实验和研究来弄清楚如何利用那部分未分配的空间。

我的第一个方法是直接使用磁盘管理工具在该未分配空间中创建一个新的、大的卷。当我将修改后的 64 GB microSD 卡插入 VisionFive 2 时,它找到了新空间并自动挂载了它。我现在可以访问额外的空间了,但我不太喜欢它是一个单独的卷。

增加磁盘空间尝试 2

使用另一张 32 GB microSD 卡,我进行了一些实验并研究了各种可能性。我最终使用的方法在此 Superuser StackExchange 帖子中进行了描述:Can I expand the size of a file based disk image?

我使用 Windows Subsystem for Linux 进行了更改,并按照以下步骤使用了 Linux 命令:

  • 在我的 Windows PC 上启动 WSL
  • 将镜像文件 starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img 复制到 WSL 存储区域
  • 使用帖子中描述的 Linux 命令 ddparted,将镜像文件大小增加 2 GB,并将根分区大小增加 2 GB
  • 使用 Raspberry Pi Imager 工具将修改后的镜像写入 32 GB microSD 卡
  • 将带有修改后镜像的 32 GB microSD 卡插入 VisionFive 2,然后通过打开电源并按下板上红色 LED 旁边的启动按钮来启动它
  • 登录后,在设备上打开终端窗口
  • 使用 df 命令检查文件大小,它报告仍为 3.8 GB,然后使用命令 sudo /sbin/resize2fs /dev/mmcblklp4 调整文件空间大小,然后再次用 df 检查,它报告存储空间为 5.8 GB

在 WSL 中使用的两个 Linux 命令是:

dd if=/dev/zero bs=1M count=2000 >> ./starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img
parted ./starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img 

这是我所做操作的日志。第一个日志是我在 WSL 中修改镜像的操作。

rick@DESKTOP-GFSP7AC:~/Documents$ dd if=/dev/zero bs=1M count=2000 >> ./starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img
2000+0 records in
2000+0 records out
2097152000 bytes (2.1 GB, 2.0 GiB) copied, 3.8399 s, 546 MB/s
rick@DESKTOP-GFSP7AC:~/Documents$ parted starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img
WARNING: You are not superuser.  Watch out for permissions.
GNU Parted 3.4
Using /home/rick/Documents/starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model:  (file)
Disk /home/rick/Documents/starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img: 6291MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name   Flags
 1      2097kB  4194kB  2097kB               spl
 2      4194kB  8389kB  4194kB               uboot
 3      8389kB  113MB   105MB   fat16        image  boot, esp
 4      113MB   4193MB  4080MB  ext4         root   legacy_boot

(parted) print free
Model:  (file)
Disk /home/rick/Documents/starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img: 6291MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name   Flags
        17.4kB  2097kB  2080kB  Free Space
 1      2097kB  4194kB  2097kB               spl
 2      4194kB  8389kB  4194kB               uboot
 3      8389kB  113MB   105MB   fat16        image  boot, esp
 4      113MB   4193MB  4080MB  ext4         root   legacy_boot
        4193MB  6291MB  2098MB  Free Space

(parted) resizepart 4
End?  [4193MB]? 6291
(parted) print
Model:  (file)
Disk /home/rick/Documents/starfive-jh7110-VF2_515_v3.8.2-66-SD-minimal-desktop-wayland.img: 6291MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name   Flags
 1      2097kB  4194kB  2097kB               spl
 2      4194kB  8389kB  4194kB               uboot
 3      8389kB  113MB   105MB   fat16        image  boot, esp
 4      113MB   6291MB  6178MB  ext4         root   legacy_boot

(parted) quit

接下来,使用 Raspberry Pi Imager 将修改后的镜像文件写入 32 GB microSD 卡,并用它来启动 VisionFive 2,我进行了以下操作:使用 df 检查当前大小,使用 /sbin/resize2fs 调整文件系统大小,并再次使用 df 检查结果。日志如下:

user@starfive:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1716100       0   1716100   0% /dev
tmpfs             396776    3416    393360   1% /run
/dev/mmcblk1p4   3840592 3176936    647272  84% /
tmpfs            1983868       0   1983868   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
tmpfs             396772     128    396644   1% /run/user/1000
user@starfive:~$ sudo resize2fs /dev/mmcblk1p4
[sudo] password for user:
resize2fs 1.46.6-rc1 (12-Sep-2022)
Filesystem at /dev/mmcblk1p4 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk1p4 is now 1508240 (4k) blocks long.
user@starfive:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1716100       0   1716100   0% /dev
tmpfs             396776    3420    393356   1% /run
/dev/mmcblk1p4   5872420 3192504   2663532  55% /
tmpfs            1983868       0   1983868   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
tmpfs             396772     128    396644   1% /run/user/1000
user@starfive:~$

在所有这些调整之后,我才意识到我不必更改用于镜像 microSD 卡的镜像文件的大小。**我可以直接在 VisionFive 2 的终端窗口中使用 partedresize2fs 命令来直接更改磁盘分区,因为文件空间位于最后一个分区,紧邻磁盘上的未分配空间。**

增加磁盘空间的最终方法

我使用的最终方法是使用 VisionFive 2 本身的工具,即 /sbin/parted 工具和 resize2fs 工具,来更改 64 GB microSD 卡上的分区大小,将文件空间分区的大小从大约 3.2 GB 增加到 63 GB,保守起见留出一小部分未分配空间。

此后,我发现 VisionFive 2 的 StarFive Git 仓库有一个 README.md 文件,其中记录了构建 Linux 内核和 BusyBox 的过程,然后创建 SD 卡镜像。过程 Generate SD Card Image File 描述了使用 fdiskresize2fs 来以类似的方式扩展 /dev/mmcblk1p4 分区。

然而,对我来说,第一步是使用**Windows 磁盘管理**实用程序删除我在未分配空间中创建的卷。这使得我可以将文件空间分区扩展到磁盘末尾,使用所有可用空间。

最终的 microSD 卡磁盘似乎工作正常。

我用于更改 64 GB microSD 卡分区大小的程序日志如下。请注意,一些命令需要设备名称 /dev/mmcblk1,而其他命令需要分区名称 /dev/mmcblk1p4

user@starfive:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1716100       0   1716100   0% /dev
tmpfs             396776    3440    393336   1% /run
/dev/mmcblk1p4   3840592 3817668      6540 100% /
tmpfs            1983868       0   1983868   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
/dev/mmcblk1p3    102156   22986     79170  23% /boot
tmpfs             396772     128    396644   1% /run/user/1000
user@starfive:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mtdblock0    31:0    0  256K  0 disk 
mtdblock1    31:1    0   64K  0 disk 
mtdblock2    31:2    0    3M  0 disk 
mtdblock3    31:3    0    1M  0 disk 
mmcblk1     179:0    0 59.4G  0 disk 
├─mmcblk1p1 179:1    0    2M  0 part 
├─mmcblk1p2 179:2    0    4M  0 part 
├─mmcblk1p3 179:3    0  100M  0 part /boot
└─mmcblk1p4 179:4    0  3.8G  0 part /
user@starfive:~$ sudo /sbin/parted /dev/mmcblk1
[sudo] password for user: 
GNU Parted 3.5
Using /dev/mmcblk1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: SD SD64G (sd/mmc)
Disk /dev/mmcblk1: 63.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   Flags
 1      2097kB  4194kB  2097kB               spl
 2      4194kB  8389kB  4194kB               uboot
 3      8389kB  113MB   105MB   fat16        image  boot, esp
 4      113MB   4193MB  4080MB  ext4         root   legacy_boot

(parted) resizepart 4 63000                                               
Warning: Partition /dev/mmcblk1p4 is being used. Are you sure you want to continue?
Yes/No? y                                                                 
(parted) print                                                            
Model: SD SD64G (sd/mmc)
Disk /dev/mmcblk1: 63.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name   Flags
 1      2097kB  4194kB  2097kB               spl
 2      4194kB  8389kB  4194kB               uboot
 3      8389kB  113MB   105MB   fat16        image  boot, esp
 4      113MB   63.0GB  62.9GB  ext4         root   legacy_boot

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

user@starfive:~$ sudo resize2fs /dev/mmcblk1p4                            
resize2fs 1.46.6-rc1 (12-Sep-2022)
Filesystem at /dev/mmcblk1p4 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 8
The filesystem on /dev/mmcblk1p4 is now 15353211 (4k) blocks long.

user@starfive:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1716100       0   1716100   0% /dev
tmpfs             396776    3452    393324   1% /run
/dev/mmcblk1p4  60399460 3842552  56540524   7% /
tmpfs            1983868       0   1983868   0% /dev/shm
tmpfs               5120      12      5108   1% /run/lock
tmpfs             396772     136    396636   1% /run/user/1000
user@starfive:~$ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mtdblock0    31:0    0  256K  0 disk 
mtdblock1    31:1    0   64K  0 disk 
mtdblock2    31:2    0    3M  0 disk 
mtdblock3    31:3    0    1M  0 disk 
mmcblk1     179:0    0 59.4G  0 disk 
├─mmcblk1p1 179:1    0    2M  0 part 
├─mmcblk1p2 179:2    0    4M  0 part 
├─mmcblk1p3 179:3    0  100M  0 part 
└─mmcblk1p4 179:4    0 58.6G  0 part /
user@starfive:~$  

通过 PuTTY 进行远程访问

我的 Windows 10 PC 上安装了 PuTTY 工具集。我可以使用 PuTTY 终端应用程序从家庭办公室的 PC 或媒体室沙发上的 Windows 笔记本电脑远程连接到我餐桌上的 VisionFive 2。我还可以使用 PuTTY 软件包附带的 PSFTP 工具连接到设备,导航文件层次结构,以及上传和下载文件。

带有 Debian 镜像的 VisionFive 2 的默认主机名是 starfive,可以与 PuTTY 一起使用,也可以用 ping 来查找设备的 IP 地址。我确实发现,设备运行一天后,使用其主机名查找设备的功能似乎停止工作了。Ping IP 地址会收到 Destination host unreachable 错误。然后我重启了 VisionFive 2,之后 ping 就可以工作了,我就可以使用 PuTTY 连接到设备并登录了。

远程访问使我能够使用我熟悉的 Windows 10/11 工具,以及大显示器(我的实验室里有一个 32 英寸 4K 显示器,媒体室里有一个 46 英寸 4K LG 电视)和快速处理器,以及快速且更大的固态存储。在研究方面,在 microSD 存储的 VisionFive 2 上使用 27 英寸 1k 显示器上的 FireFox,与在 NVMe 存储的 Intel i5 上使用 46 英寸 4k 显示器和 NVIDIA RTX3070 上的 Chrome 相比,速度和视觉质量差异非常显著。 at some point,我预计会开始构建内核,并计划在这样做时使用 Windows Subsystem for Linux 和 RISC-V 交叉编译器工具链。

使用 TTY 转 USB 适配器连接 UART

在某些情况下,有必要通过 UART 接口而不是标准的图形桌面接口来访问 VisionFive 2。例如,在调试 Linux 引导问题时,尤其是在您开始构建自己的 Linux 内核和镜像时。

这需要一种称为 TTY 转 USB 适配器的设备,它可以将 40 引脚连接器上的三个引脚(引脚 6、8 和 10)的 TTY 信号转换为 USB 设备连接器,该连接器插入运行终端仿真程序的 PC 或笔记本电脑。

TTY 转 USB 适配器的构造和质量水平各不相同。最常见的是一条带有四根线的电缆,一端是母连接器,另一端是一个大的 USB 连接器。大的 USB 连接器内部包含 TTY 转 USB 转换器以及一个 USB-A 公头连接器。如果您运气好的话,TTY 线会标有标签。如果没有,请参见下文。

USB-A 连接器插入运行串行终端程序的 PC 或笔记本电脑,该程序允许您连接到 USB 设备。Windows PC 上最常见的程序似乎是 PuTTY 应用程序,可以免费下载和安装。对于 Linux PC,最常见的程序似乎是 minicomscreengtkterm

请参阅 RVspace 的这篇文章,了解 关于设置和使用 TTY 转 USB 适配器的信息

以下是我迄今为止的一些经验提示:

  • Windows 可能对识别 USB 转换器很挑剔,并且可能拒绝设置它。Linux 则更宽容。
  • gtktermminicom 更容易使用,并且可以通过 sudo apt install gtkterm 安装。
  • 如果 TTY 转 USB 适配器电缆上的 TTY 连接器引脚未标记,最常见的情况是黑线连接到引脚 6,白线连接到引脚 8,绿线连接到引脚 10,红线(如果有)未使用。
  • VisionFive 2 上的 GPIO 引脚为 3.3v,因此请确保 TTY 转 USB 转换器在 TTY 端可以使用 3.3v。
  • 默认波特率似乎是 115200,无校验位,8 数据位,1 停止位,所以请在终端模拟器中设置这些连接设置。我使用 Xon/Xoff 流控制,但不确定在该波特率下是否重要。
  • 您将 USB-A 插入 PC 的哪个 USB 端口通常决定了 Windows 下创建的 COM 端口(请检查设备管理器)或 Linux 下创建的 /dev/ttyUSB 设备(ls /dev/ttyUSB* 将提供列表)。

此图显示了用于将 TTY 转 USB 适配器连接到 VisionFive 2 板的引脚和 TTY 端引线。偶数引脚位于外侧边缘,奇数引脚位于 40 引脚连接器的内侧边缘。引脚 2 位于外侧底部,其上方是引脚 4。这两个引脚都是 5v,所以不要将 TTY 引线连接到这些引脚。黑色连接到引脚 6,然后白色连接到引脚 8,绿色连接到引脚 10。我的电缆还有一个红线,未使用。

对 libgpiod 的简要调查

我在 Github 上找到了一个包含使用 libgpiod 库的多个示例的仓库:https://github.com/starnight/libgpiod-example。我将该仓库 git 克隆到我的 VisionFive 2 上进行调查。

我做的第一件事是用 sudo apt install gpiod libgpiod-dev 获取 libgpiod 库。然后我查看了仓库中的示例项目 libgpiod-led。这个示例在源代码中使用了引脚号 23,我将其更改为 37。然后我使用面包板搭建了一个简单的 LED 电路,包括一个电阻和一个 LED,其中一根引线连接到 VisionFive 2 40 引脚连接器上的接地引脚(引脚 34),另一根连接到引脚 37。

然后我在 libgpiod-led 文件夹中运行 make 成功编译了示例程序。当我尝试运行可执行文件时,我收到一个错误。

Open chip failed.

:  Permission denied.

我将其解释为需要使用 sudo 命令运行。我再次尝试使用 sudo 命令,LED 开始闪烁。

下图显示了 VisionFive 2 的 40 引脚连接器引脚图。这是 StarFive 文档中的一张截图,虽然是中文的,但包含这个漂亮的图表。

为物联网配置硬件访问,无需 sudo

实现物联网 (IoT) 应用通常需要硬件访问主板设备,例如 40 引脚连接器(使用 GPIO 引脚)、I2C、SPI、PWM 等硬件功能。

使用 libgpiod 库构建简单闪烁 LED 项目的示例需要使用 sudo 来运行生成的应用程序。否则,应用程序将没有必要的权限来访问 GPIO 引脚并发出错误。

让我们来看看其他板子是如何处理的,以 Raspberry Pi 为例。

首先要检查 /dev 中我们想要使用的硬件接口属于哪个组。这很简单,使用命令 ls -l /dev/gpio* 来查看所有与 GPIO 引脚相关的设备。在 VisionFive 2 上,有两个这样的设备:/dev/gpiochip0/dev/gpiochip1,这两个设备都由 root 所有,这就是为什么我们需要 sudo 来运行我们的 libgpiod-led 程序。

user@starfive:~$ ls -l /dev/gpio*
crw------- 1 root root 254, 0 Nov  8 23:59 /dev/gpiochip0
crw------- 1 root root 254, 1 Nov  8 23:59 /dev/gpiochip1

默认情况下,GPIO 引脚同时由用户 root 和组 root 拥有。上述文章建议应该有一个名为 gpio 的组,它应该拥有这些硬件位,然后该组中的任何用户都可以运行一个不需要 sudo 并且不是 root组成员的 GPIO 使用应用程序。然而,VisionFive 2 版的 Debian 似乎没有提供这样的组,您可以通过查看组列表来检查,命令是 getent group

第一步是创建 gpio 组,然后将用户 user(我们使用的 Debian 操作系统镜像附带的默认用户)添加到该组的用户列表中。我们使用 usermod -a -G,这样我们将指定的组追加到用户已有的组列表中,而不是用我们指定的列表替换它。

sudo groupadd gpio
sudo usermod -a -G gpiod user

我发现组数据更新可能需要一两分钟,并且使用 groups 命令列出用户现有组可能需要几分钟才能显示添加的组。

接下来,我们需要为 /dev/gpiochip0/dev/gpiochip1 创建一个新规则,以允许属于 gpio 组的任何人访问 GPIO 引脚。

使用文本编辑器(如久经考验的 vi)创建一个新规则文件,位于 /etc/udev/rules.d/,命令为 sudo vi /etc/udev/rules.d/60-gpio.rules。将以下行插入文件中。

# udev rules for gpio port access through libgpiod
SUBSYSTEM=="gpio", KERNEL=="gpiochip[0-4]", GROUP="gpio", MODE="0660"

进行这些更改后,我重新启动了 VisionFive 2,启动后,我以用户 user 登录,导航到已构建的 libgpiod-led 版本所在的文件夹,然后运行程序而无需使用 sudo

我还没有对 I2C 接口进行任何测试。我不知道访问该硬件是否也会有类似的问题。但是,如果我使用命令 ls -l /dev/i2*,我看到以下输出,这表明我访问不会有问题。

user@starfive:~$ ls -l /dev/i2*
crw-rw-rw- 1 root root 89, 0 Nov  9 19:59 /dev/i2c-0
crw-rw-rw- 1 root root 89, 2 Nov  9 19:59 /dev/i2c-2
crw-rw-rw- 1 root root 89, 5 Nov  9 19:59 /dev/i2c-5
crw-rw-rw- 1 root root 89, 6 Nov  9 19:59 /dev/i2c-6
crw-rw-rw- 1 root root 89, 7 Nov  9 19:59 /dev/i2c-7
user@starfive:~$

查看 I2C

标准的 I2C 命令行工具集包含在 i2c-tools 包中,必须在终端窗口中使用 sudo apt install i2c-tools 进行安装。但是,安装后,当我尝试使用 i2cdetect -l 来获取我的 I2C 设备列表时,我收到了 command not found 错误。然后我使用 find 命令查找安装位置,sudo find / -name 'i2c*',报告实用程序已安装在 /usr/sbin 中。使用 echo $PATH,我发现该位置不在我的路径中。我再次尝试使用完整路径命令,如 /usr/sbin/i2cdetect -l,它运行成功并提供了 I2C 设备列表。

我使用 vi 编辑器编辑了我的 .profile 文件,将 /usr/sbin 添加到 PATH 环境变量中,以便不需要输入 I2C 工具的完整路径名,命令是 vi .profile。我在文件末尾添加了以下行,然后使用 source 命令检查是否成功。

# set PATH so it includes /usr/sbin if it exists
if [ -d "/usr/sbin" ] ; then
    PATH="$PATH:/usr/sbin"
fi

i2cdetect -l 命令显示以下输出。

user@starfive:~$ i2cdetect -l
i2c-0   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-2   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-5   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-6   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-7   i2c             Inno HDMI                               I2C adapter
user@starfive:~$

查看 PWM

我花了几个小时研究 PWM 的使用。我还没有成功创建一个工作的 PWM 驱动 LED 项目。我发布了一个 StackOverflow 问题:how to blink an LED using a PWM pin on Debian with C,并且有人给了我一些指导。如果您,读者,能对发布的 SO 问题或下面的评论有所贡献,我将不胜感激。

有这份文档 JH7110 PWM Developing Guide,它描述了 PWM 系统。我尝试使用文档中描述的函数,但未成功。

在使用 C 程序处理 PWM 功能时遇到的一个问题是镜像中缺少头文件。我使用 sudo apt install linux-libc-dev 来尝试安装它们。安装成功,但这些新安装的头文件进入了 /usr/src/linux-headers-6.0.0-6-common//usr/src/linux-headers-6.0.0-6-riscv64/ 的文件树,并且似乎仍然缺少头文件。我得出的结论是,描述的源代码是用于构建 Linux 设备驱动程序的,而不是用户空间 PWM 程序。

另一件奇怪的事情是,我在 /dev 中看不到任何名称中包含“pwm”的设备。这就像 PWM 设备不存在一样。gpiochip 设备在那里,I2C 设备也存在,但我没有看到 PWM 设备。

在后面的部分“4.1 Sysfs Interface Example”中,有一个通过 /sys/class/pwm/ 中的 Sysfs 接口访问 PWM 驱动程序的示例。当我尝试按照描述的步骤进行操作时,它没有成功,显示错误消息 -bash: export: Permission denied

然后我发现了这个 SO 帖子 Permission denied with sudo,它解释了问题和所需的解决方法,即使用 sudo sh -c 'echo 0 > export' 而不是仅使用 echo 0 > export

user@starfive:/sys/class/pwm/pwmchip0$ sudo sh -c 'echo 0 > export'
[sudo] password for user:
user@starfive:/sys/class/pwm/pwmchip0$ ls -l
total 0
lrwxrwxrwx 1 root root    0 Nov 13 23:41 device -> ../../../120d0000.pwm
--w------- 1 root root 4096 Nov 13 23:44 export
-r--r--r-- 1 root root 4096 Nov 13 23:41 npwm
drwxr-xr-x 2 root root    0 Nov 13 23:41 power
drwxr-xr-x 3 root root    0 Nov 13 23:44 pwm0
lrwxrwxrwx 1 root root    0 Dec 31  2000 subsystem -> ../../../../../../class/pwm
-rw-r--r-- 1 root root 4096 Dec 31  2000 uevent
--w------- 1 root root 4096 Nov 13 23:41 unexport
user@starfive:/sys/class/pwm/pwmchip0$ ls pwm0
capture  duty_cycle  enable  period  polarity  power  uevent
user@starfive:/sys/class/pwm/pwmchip0$

在 PWM 设备被导出并可用后,我就能够使用 Sysfs 接口驱动 PWM 驱动程序来驱动一个闪烁的 LED,设置如下,这表明 VisionFive 2 在 Debian OS 构建中确实具有工作的 PWM 驱动程序。

user@starfive:/sys/class/pwm/pwmchip0/pwm0$ sudo sh -c 'echo 1 >enable'
[sudo] password for user:
user@starfive:/sys/class/pwm/pwmchip0/pwm0$ sudo sh -c 'echo 1000000000 >period'
user@starfive:/sys/class/pwm/pwmchip0/pwm0$ sudo sh -c 'echo 50000000 >duty_cycle'
user@starfive:/sys/class/pwm/pwmchip0/pwm0$ sudo sh -c 'echo 0 >enable'

查看一些用户空间库,如 WiringPi 库,似乎存在某种用户空间对设备内存的访问。有关用户空间驱动程序的详细信息,请参阅 The Userspace I/O HOWTO

与 Orange Pi 5 Plus 的简要比较

我使用 Orange Pi 5 Plus 的经历比使用 VisionFive 2 明显容易得多。我最初使用 microSD 卡,通过 Raspberry Pi Imager 将 Ubuntu(多种操作系统替代方案之一)安装到 Orange Pi 的可启动 microSD 卡上。Orange Pi 拥有构建我 Raspberry Pi 仓库中的 Project01 所需的所有工具,包括一个版本的 WiringPi 库,WiringOP,我猜意思是 Wiring Orange Pi。我一直在寻找 VisionFive 2 的 WiringPi 库版本,但未能找到。

我在 NVMe 驱动器上安装了 Ubuntu,并且对 Orange Pi 使用新驱动器与使用 Pi 的 microSD 卡之间的速度差异印象深刻。要为 Orange Pi 5 Plus 创建可启动的 NVMe 驱动器,我将驱动器插入 NVMe 转 USB 适配器,然后使用 Raspberry Pi Imager 将 Ubuntu 镜像写入该驱动器。我假设类似的方法也适用于 VisionFive 2,但我正在阅读网上的帖子,说 microSD 卡方法更稳定。

在 x86 Linux 上交叉编译 RISC-V

在看到一篇关于交叉编译 VisionFive 2 的 Linux 内核的文章后,我决定研究如何使用 Windows Subsystem for Linux 在 Windows 10 Pro 下使用默认的 Ubuntu 发行版进行交叉编译。

第一步是在命令行终端应用程序中使用 wsl --install 命令启用 Windows Subsystem for Linux。这需要重启才能使 wsl 终端窗口可用。重启后,出现一个带有 Ubuntu Linux 的命令行终端窗口。

我首先尝试使用下面“有趣的点”中提到的 apt 命令为交叉编译 RISC-V 的 Linux 内核设置交叉编译环境。我收到错误消息,提示包 gcc-riscv64-linux-gnu 不可用。然后我用命令 apt-cache search --names-only 'riscv64' 再次检查,看到所有与 RISC-V 相关的包的列表,只有几个显示出来。

这似乎很奇怪,然后我意识到我可能需要先更新缓存以检索更新的包列表,特别是 since this was the first use of WSL after doing the install。我使用 sudo apt update 命令更新了缓存,然后再次尝试 search 命令,这次显示了很多包。

然后我再次尝试 apt 命令来安装交叉编译包,它成功完成了。

接下来,我创建了一个 Documents 文件夹,并在其中创建了一个 risc-v 文件夹。然后我写了一个简单的 HelloWorld.c 源文件,并使用命令 riscv64-linux-gnu-gcc helloworld.c 进行编译,生成了一个输出文件 a.out

然后我插入了一个有足够空间的 USB 闪存驱动器。使用 Windows 文件管理器在此 Stackoverflow 帖子 中描述的技术,我通过将文件路径更改为 \\wsl.localhost\Ubuntu\home\rick\Documents\risc-v 来导航到包含文件的目录,然后将 a.out 文件从 WSL 文件夹拖到闪存驱动器上。在此过程中,我发现我可以在文件资源管理器的目录路径中输入网络名称 \\wsl$,它会显示 Ubuntu 虚拟机。

然后我从 Windows 弹出驱动器,拔出驱动器,然后将其带到 VisionFive 2 并插入 USB 端口。我打开了文件管理器应用程序,它显示了 USB 驱动器,然后将 a.out 文件复制并粘贴到 VisionFive 2。接下来,我使用 chmod +x a.out 使其可执行,然后成功运行了它。

我的一项预期是能够构建自己的 Linux 内核。我使用 StarFive Git 仓库来构建他们拥有的 Linux 内核源代码。我在我的 WLS Ubuntu VM 中遇到了许多需要安装的缺失软件组件,但我终于能够构建一个新的 Linux 内核,现在我正在处理构建和引导 SD 卡镜像的问题。我还有另一篇文章正在撰写,记录我遇到的问题以及如何解决它们。使用 TTY 转 USB 适配器和能够作为终端的 Windows 或 Linux 设备对于这项工作至关重要。

有用的网站

有趣的点

VisionFive 2 似乎处于 SBC 的前沿。这意味着如果您购买一个,您必须准备好应对一些这样或那样的问题。GPU 支持似乎是影响 FireFox 和其他图形界面的问题之一。

Debian 镜像中的桌面和可用应用程序有点稀少。许多我期望的工具,如 C 编译器和 make,都缺失了,需要安装。不要期望与 x86 或 ARM Ubuntu 发行版有相同的软件种类。

环顾四周,似乎有许多供应商用他们的软件支持 Linux on RISC-V 处理器。似乎也有可以在 x86 Linux 上运行并以 RISC-V 处理器为目标的交叉编译工具链。这个 Linux 内核源代码仓库提到了以下 apt 命令,用于在 Debian/Ubuntu 下设置交叉编译工具链来构建 Linux 内核。

sudo apt-get install libncurses-dev libssl-dev bc flex bison make gcc gcc-riscv64-linux-gnu

我尝试在 Windows 10 x86 PC 上使用 Windows Subsystem for Linux(Ubuntu)进行交叉编译,并成功安装了 RISC-V 交叉编译工具,并在 VisionFive 2 上构建了一个简单的 HelloWorld 程序。

我找不到 VisionFive 2 版本的 WiringPi 库,这意味着我必须将 WiringPi 移植到 VisionFive 2,或者使用标准的 libgpiod 库并修改我 Raspberry Pi 仓库中的项目。

我在使用 PWM 功能时遇到了一些问题。我不确定我 missing 了什么或没有理解什么,所以这仍然是一个正在进行中的工作。我期望在 /dev 中看到的 PWM 设备不存在。我能够安装 I2C 的工具,但我还没有尝试实现我在 VisionFive 2 上构建的 Raspberry Pi I2C 项目。我被其他任务分散了注意力。

我很好奇其他 WiFi USB 适配器是否受支持,以及我是否可以更换套装附带的适配器,换成支持 2.4 GHz 和 5 GHz 的 WiFi USB 适配器。我快速测试了一个我手头上的 Tenda 适配器,但它似乎不起作用。

在使用 64 GB microSD 卡进行了几天的实验后,在尝试安装其他应用程序时,我遇到了磁盘空间不足的问题。经过思考和研究,我意识到问题在于镜像的大小以及在镜像到 microSD 卡时创建的分区大小。经过多次实验和尝试,我开发了一个简单的过程,使用 VisionFive 2 上的 partedresize2fs 工具,将大约 55 GB 的未分配空间添加到我原来的 3.2 GB 用户文件空间分区中。

VisionFive 2 有许多可用的有用应用程序。我尝试了安装 Gimp 后进行的一个简单测试,现在既然已经解决了磁盘空间不足的问题,我计划查看其他许多应用程序,如 LibreOffice、Apache2 Web 服务器、Subversion 等。

我已经安装了 Apache2、Php 和 PostgreSQL 数据库引擎。Web 服务器似乎工作正常,我有一个简单的 Php 生成的网页,该网页从 PostgreSQL 数据库中提取数据并显示它。我正在撰写另一篇文章来描述这项工作。

我非常期待学习 Linux 设备驱动程序的基础知识,并在 x86 Ubuntu 与 WSL 上使用交叉编译工具进行首次成功的 Linux 构建。当我第一次尝试使用 StarFive Git 仓库中的源代码和组件构建 Linux 内核时,由于第三方 GPU 驱动程序的 SHA 校验和不正确,构建失败了。我在 RVspace 论坛上发现有其他人遇到了类似的问题

经过进一步调查,我发现我以为已经安装的 Git Large File System 尚未安装。一旦我完成了这一步,在将仓库克隆到我的 WSL Ubuntu PC 时,GPU 驱动程序 blob 会正确下载,SHA 校验和问题就消失了。我已经成功构建了 Linux 内核,但遇到了生成 SD 卡镜像的问题。构建 BusyBox 似乎存在问题,这可能与我使用 WSL 有关。我正在撰写另一篇文章来描述这项工作。

历史

  • 2023年11月9日:初始版本
  • 2023年11月10日:添加了题为“为物联网配置硬件访问,无需 sudo”的部分
  • 2023年11月13日:添加了几个新部分 (1) 工作环境和工具,(2) 克服由于 StarFive Linux 镜像大小导致的磁盘空间限制,(3) 对 PWM 和 I2C 的探索,这些探索有些徒劳
  • 2023年11月17日:编辑和改进了 PWM 部分,增加了新发现,并添加到软件部分,简要讨论了安装了 Apache2、PHP 和 Postgres 的 VisionFive 2 上的功能但有限的网站,以及我最初尝试从 StarFive Git 仓库构建 Linux 内核的失败尝试。
  • 2023年11月21日:添加了 TTY 转 USB 适配器部分,提及了 RVspace 论坛和 wiki,添加了目录
© . All rights reserved.