Zum Hauptinhalt springen

Blog

Bleiben Sie mit aktuellen Nachrichten vom RuyiSDK-Team auf dem Laufenden

嘉楠勘智K230D: 首款基于新32位 RuyiSDK 的AIoT量产芯片

· 7 Minuten Lesezeit
RuyiSDK
RuyiSDK 团队

在上期文章中,向大家介绍了《玄铁团队与PLCT实验室联合发布:新32位产品级开源工具链及Linux内核》,本期为大家带来新32位(RV64ILP32)产品化的最新进展:嘉楠勘智K230D。去年,嘉楠推出 K230,它基于玄铁c908 打造,是世界上第一款带有 VECTOR 1.0 的 RISC-V 64位 AIOT 芯片。今年,嘉楠勘智推出更高集成度的 K230D AIoT 芯片,内存由原来外挂 256MB/512MB 改为内封 128MB。原先基于 LP64 ABI 的软件内存开销过大,不再适合 K230D,而新32位技术可同时提升内存与缓存的效率。PLCT实验室联合玄铁团队,一起为 K230D 打造基于新32位的 RuyiSDK,第一次实现新32位 AIoT 产品的落地。相比原先基于 LP64 ABI 的 SDK,新32位 SDK 内存开销下降 30%,同时链表遍历性能提升 20%,兼顾成本和性能。

616c6103a9a4656a2b24226e55425d62.png

达摩院玄铁团队联手嘉楠科技和中科院软件所PLCT实验室,将新32位落地到Banana Pi开源社区的BPI-CANMV-K230D-Zero 开发板,并与PLCT实验室的 RuyiSDK 集成,一起为用户提供便捷的使用体验:

  • 升级 Linux 内核至 6.6、升级工具链

  • 新增32位根系统 和 LVGL

  • 基于 VECTOR 的图形加速

  • 支持 Linux + Nuttx 双系统,大小核任意切换

  • 支持传统64位和新32位,两种系统配置

内核配置:

传统64位(64LP64)新32位(64ILP32)
内核编译命令make ARCH=riscv k230_defconfig allmake ARCH=riscv k230_defconfig 64ilp32.config all

默认配置差异仅2行:

CONFIG_ARCH_RV64ILP32=y

CONFIG_32BIT=y

内存对比

下面的视频和图片展示了,传统64位(左)与新32位(右)对比 LVGL 的运行:

k230d_final.jpeg

动态内存对比传统64位 (RV64 LP64)新32位 (RV64 ILP32)
used37MB24MB
静态内存对比传统64位 (RV64 LP64)新32位 (RV64 ILP32)
kernel code10282KB10456KB
rwdata1126KB832KB
rodata5105KB4464KB
bss500KB376KB

相比传统64位,新32位 RuyiSDK 大幅提升内存使用效率,避免了 K230D 产品化中的内存浪费。

性能对比

由于 LP64 的指针数据类型比 ILP32 大一倍,导致 LP64 的缓存利用率偏低。下面,基于 K230D 对比二者的双向链表遍历性能:

双向链表遍历 (链表节点为4000,遍历50000次结果)

第一次执行时长第二次执行时长第三次执行时长第四次执行时长第五次执行时长平均执行时长
单位:纳秒单位:秒
LP64387222162834202618503774494961353948499840349405903.728280805
ILP32261474925722618915172680216665289449936828472820362.659727769

结果显示,ILP32 的链表遍历性能显著优于 LP64。

相关资料:

K230D RuyiSDK:https://github.com/ruyisdk/k230_linux_sdk

(镜像构建详见文档 https://github.com/ruyisdk/k230_linux_sdk/blob/dev/README_zh.md

K230D 使用说明:https://ruyisdk.org/docs/k230d/intro

结束语

与过往的架构(ARM、x86、MIPS、Sparc)聚焦用户态的思路不同,当前新32位的方案是:基于 RVA20/22/23 Profiles 为 RV64 架构的特权态提供 ILP32 ABI 能力,这是前人未曾走过的新路。自 2024 年 3 月推出新 32 位工具链和 Linux 内核以来,这次终于在 K230D 上实现了产品化,降低了 30% 的内存开销,大幅提升缓存性能,这些成果进一步揭示了新 32 位的产业化价值。我们热切期待开发者们积极参与新32位的开发和完善中,共同提出宝贵的建议和意见,推动新 32 位不断发展。我们致力于建立一个健康和活跃的开源社区,将持续投入资源和精力,确保新32位软件的稳定和可靠,并不断改进和完善其功能和性能。在此,我们也呼吁更多的硬件厂商加入我们的阵营,共同推动新32位嵌入式系统的发展和创新,为行业带来更多机遇。

关于我们

●   RuyiSDK 是一个由 PLCT Lab 所启动的开源项目,该项目旨在为 RISC-V 开发者提供一个完整的、全家桶式的全功能开发环境,包含从编译、调试到仿真的全套工具,并计划支持市面上主流的 RISC-V 硬件。

●   达摩院玄铁团队持续深耕 RISC-V 技术研发及生态建设,并陆续推出了一系列玄铁处理器,可满足高中低全系列性能需求。玄铁积极拥抱开源,坚持开放创新,已逐渐构建起以 RISC-V 为核心的生态体系,与生态伙伴协同推动 RISC-V 芯片、开发工具、操作系统、应用解决方案等不同层面的软硬一体化发展。全力推动 RISC-V 软硬全栈技术多领域发展落地,加速实现智能时代的万物互联!

●   嘉楠科技(Canaan Inc.)(纳斯达克股票代码:CAN)是一家领先的高性能ASIC芯片设计公司,以“区块链+AI”为多元化经营战略,业务范围涵盖高性能ASIC计算芯片及设备研发、AI芯片及产品开发。作为一家纳斯达克上市公司,嘉楠科技是全球“区块链第一股”,也是第一家在美国上市的中国自主知识产权AI芯片公司。公司愿景:提升社会运行效率,改善人类生活方式。

RuyiSDK 0.15 版本更新说明

· 3 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

RuyiSDK 0.15 现已发布,对应的包管理器版本也为 0.15.0。您可前往以下位置之一下载 RuyiSDK 包管理器:

本次更新主要包含了以下内容,祝您使用愉快!

RuyiSDK 包管理器

  • 为多语言支持做好准备:在需要输出本地化内容,如软件包的手工下载步骤说明等内容时,当用户系统的区域、语言配置与当前内容的可选区域、语言版本不完全匹配时,现在会尽可能地匹配了。

    例如:如果您将系统配置为新加坡英语,而某条内容仅提供美国英语与中国大陆中文两种版本,那么 ruyi 0.15.0 将为您展示美国英语内容,而非崩溃。

  • 支持了不依赖 Docker 的构建方式,以方便发行版打包者,或不使用官方支持架构、系统组合的用户尝鲜 ruyi

    需要注意的是:因为目前 RuyiSDK 官方软件源的内容分发形式以二进制为主,所以想在非官方支持系统上使用 ruyi 的用户将需要组织起来,自行搭建另一套软件源。RuyiSDK 团队无法保证此种情况下的用户体验。

RuyiSDK 软件源

  • 软件源的结构不再与 ruyi 0.7.0 或更低版本兼容。是时候升级到最新版本了。
  • emulator/box64-upstream 已更新到 0.3.0。
  • 用 Box64 运行 WPS Office 的操作文档已更新。
  • Ruyi 设备安装器(ruyi device provision)现已新增支持以下设备型号与系统:
    • Canaan Kendryte K230D:由 RuyiSDK 受权打包的 CanMV Linux SDK 镜像,附带演示程序。提供 LP64 与 RV64ILP32 两种 ABI。

RuyiSDK 0.14 版本更新说明

· 3 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

RuyiSDK 0.14 现已发布,对应的包管理器版本也为 0.14.0。您可前往以下位置之一下载 RuyiSDK 包管理器:

本次更新主要包含了以下内容,祝您使用愉快!

RuyiSDK 包管理器

  • 正式引入插件架构:ruyi 虚拟环境的 profile 相关处理现在完全由插件负责了。
  • 支持了 Debian 软件包格式 *.deb 的解包操作。
  • 再次完善了对“预发布版本”的判断:先前会对非完全由数字结尾的该类版本号判断错误。 但该潜在问题不会被当前的 RuyiSDK 软件源内容触发。
  • 修复了 riscv64 Python 3.12 环境下 pygit2 的构建失败问题:先前需要在 pygit2 构建开始之后、试图在其虚拟环境中执行 setup.py 前,人工干预,在该环境中安装 setuptools——从 Python 3.12 起该包已经不会被自动安装。

RuyiSDK 软件源

  • 增加了从上游源码打包的 Box64 架构模拟器:emulator/box64-upstream
  • 增加了办公套件 extra/wps-office。请注意:由于是商业软件的缘故,首次运行该软件包时需要操作接受一份《最终用户许可协议》。
  • 您可按照 ruyi news 的指引,在您的 RISC-V 桌面设备上用 Box64 运行 WPS Office 进行办公了。

为了支持刷写方式复杂、需要夹杂人工干预、镜像文件需要手工下载等复杂情况下的设备初始化,我们正在将设备安装器重构为基于插件架构的形式。 由于本开发周期临时加入了 Box64 运行 WPS Office 的 PoC 内容,设备安装器的插件化重构工作暂缓,但仍将在未来的版本上线。届时旧版 ruyi 的设备安装器功能将不可用,请先升级再进行体验。

尝鲜:使用 Box64 在 RISC-V 系统上运行 WPS Office

· 6 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

得益于 Box64 RISC-V 移植工作的进展,在 RISC-V Linux 桌面发行版上运行 WPS Office 等常见 x86 二进制软件已成为可能。RuyiSDK 正在开展此方面的集成工作; 按以下的步骤操作,您将能先行一步感受 RISC-V 办公体验。

我们假定您在进行以下操作之前,已经升级到了 ruyi 0.14.0 或更高的版本, 并执行了 ruyi update 以将软件源信息同步到最新。

操作步骤

为叙述方便,设您的 $HOME/home/foo,架构(uname -m 输出)为 riscv64,使用 sudo 提权。

允许安装预发布版本的软件包

由于 Box64 RISC-V 支持进展迅速,目前(2024 年 7 月初)很多功能改进没有在 其最新稳定版本得到体现。我们打包了 Box64 的开发快照版本;为了能够安装此版本, 您需要配置 ruyi 以使其在安装软件包时考虑预发布版本。

  • 如果 ~/.config/ruyi 目录不存在,则创建之。
  • 编辑 ~/.config/ruyi/config.toml
[packages]
prereleases = true

安装 Box64

按照 RuyiSDK 软件包的命名习惯,从 Box64 的上游(而非 PLCT 或某些厂商的 fork) 构建的 Box64 二进制包,名字叫 box64-upstream

ruyi install box64-upstream
# ...
# info: package box64-upstream-0.2.8-ruyi.20240702 installed to /home/foo/.local/share/ruyi/binaries/riscv64/box64-upstream-0.2.8-ruyi.20240702

记下安装路径。

配置 Linux binfmt_misc 机制

由于 WPS Office 的打包方式特殊,它只能从开发商提供的启动器脚本被间接拉起, 而不能直接交由 Box64 启动。因此您需要确保您的系统支持 binfmt_misc: 如果不支持,接下来的操作会失败。

不同 Linux 发行版的 binfmt_misc 配置方式不尽相同,以下针对采用 systemd 的系统叙述。您可以根据自身情况自行调整。

# 确认 Box64 可执行文件的位置
ls /home/foo/.local/share/ruyi/binaries/riscv64/box64-upstream-0.2.8-ruyi.20240702/bin/box64

# 调整 Box64 `binfmt.d` 配置文件的路径
# 假设您使用 nano 编辑器
nano /home/foo/.local/share/ruyi/binaries/riscv64/box64-upstream-0.2.8-ruyi.20240702/etc/binfmt.d/box64.conf
# 将行尾的 //bin/box64 改为先前验证过的绝对路径

# 将其部署到系统
sudo cp /home/foo/.local/share/ruyi/binaries/riscv64/box64-upstream-0.2.8-ruyi.20240702/etc/binfmt.d/box64.conf /etc/binfmt.d/box64.conf
sudo systemctl restart systemd-binfmt

# 检查部署结果
cat /proc/sys/fs/binfmt_misc/box64

安装 x86 sysroot

由于 Box64 主要面向游戏等软件的模拟,而这些软件基本都自带所有依赖,所以 Box64 本身基本没有自带什么 x86 运行时库。WPS Office 作为一个预期被系统包管理器管理的 桌面应用,Box64 自带的少量 x86 运行时库无法满足它的需求,因此我们需要自行准备 x86 环境。

# 下载预制的 x86 sysroot
# 此为临时性的链接。后续待本功能迭代稳定之后,操作方式将改变,此链接也将失效
# 假设此文件放在了 ~/Downloads 目录下
wget https://mirror.iscas.ac.cn/ruyisdk/dist/temp/debian-bookworm.gui.20240705.amd64.tar.zst

# 假设安装到 /opt/debian-bookworm.amd64
sudo mkdir /opt/debian-bookworm.amd64
pushd /opt/debian-bookworm.amd64
tar -xf ~/Downloads/debian-bookworm.gui.20240705.amd64.tar.zst
popd

安装 WPS Office

强制安装 x86_64 架构的 WPS Office 软件包:

ruyi install --host x86_64 wps-office
# ...
# info: package wps-office-11.1.0-r.11719 installed to /home/foo/.local/share/ruyi/binaries/x86_64/wps-office-11.1.0-r.11719

由于 WPS Office 官方下载页面的限制,ruyi 无法自动下载安装包。 请按照提示信息操作,之后重新执行该命令以安装。

调整 WPS Office 启动器脚本

由于 WPS Office 预期自身被系统包管理器管理,它的启动器脚本假定了自身的安装路径 为 /opt/kingsoft/wps-office,需要为它们打补丁。

pushd /home/foo/.local/share/ruyi/binaries/x86_64/wps-office-11.1.0-r.11719

# 当前工作目录路径中应当不含特殊字符。
# 如果含有,请自行适当调整 sed 命令的参数
sed -i "s@gInstallPath=/@gInstallPath=$(pwd)/@" ./usr/bin/*

popd

运行 WPS Office

准备工作终于完成,现在将所有部分串起来:

# 此动态链接库的原生转发仍有些问题,因此强制以模拟方式执行
export BOX64_EMULATED_LIBS=libsqlite3.so.0
# 配置 Box64 库搜索路径
export BOX64_LD_LIBRARY_PATH=/opt/debian-bookworm.amd64/usr/lib/x86_64-linux-gnu

# 现在可以执行了!
/home/foo/.local/share/ruyi/binaries/x86_64/wps-office-11.1.0-r.11719/usr/bin/wps

结语

以上是 RuyiSDK 对 RISC-V 二进制翻译 x86 软件的初步集成成果。 今后我们仍将迭代这一过程的用户体验,以期用户在 RISC-V 系统上运行需要的应用 更加方便。

RuyiSDK 0.12 版本更新说明

· 2 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

RuyiSDK 0.12 现已发布,对应的包管理器版本也为 0.12.0。您可前往以下位置之一下载 RuyiSDK 包管理器:

本次更新主要包含了以下内容,祝您使用愉快!

RuyiSDK 包管理器

  • 修复了先前 Pine64 Star64 Armbian 镜像无法下载的问题。
  • 对于部分必须由用户手工下载的文件,支持了相应的用户体验:按照当前系统语言设置,渲染相应的提示语。
  • 升级了 pygit2 依赖库版本到 1.5.0,以支持 libgit2 的 1.8 版本。
  • 修复了 XDG_STATE_HOME 环境变量被无视的问题。

为了支持刷写方式复杂、需要夹杂人工干预、镜像文件需要手工下载等复杂情况下的设备初始化,我们正在对设备安装器进行重构,预计将于下个版本付诸测试。届时旧版 ruyi 的设备安装器功能将不可用,请先升级再进行体验。

RuyiSDK 0.11 版本更新说明

· 2 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

RuyiSDK 0.11 现已发布,对应的包管理器版本也为 0.11.0。您可前往以下位置之一下载 RuyiSDK 包管理器:

本次更新主要包含了以下内容,祝您使用愉快!

RuyiSDK 包管理器

  • 去除了先前唯一的 LGPL 依赖。现在 RuyiSDK 包管理器及其所有依赖都采用宽松开源许可证了,方便下游用户在商业场景取用。

RuyiSDK 软件源

  • Ruyi 设备安装器(ruyi device provision)现已新增支持以下设备型号:
    • Pine64 Star64

请在升级 RuyiSDK 包管理器之后,执行 ruyi update 以拉取软件源更新。

我们注意到越来越多的设备型号,甚至如最新面世的 BananaPi BPI-F3 等等,其系统镜像仅以网盘(百度网盘、Google Drive、MEGA 等服务)方式分发。 对这些设备型号的妥善支持面临挑战;在接下来的版本迭代中,我们将尝试支持此场景,敬请期待或参与进来。

RuyiSDK 0.10 版本更新说明

· 2 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

RuyiSDK 0.10 现已发布,对应的包管理器版本也为 0.10.0。您可前往以下位置之一下载 RuyiSDK 包管理器:

本次更新主要包含了以下内容,祝您使用愉快!

RuyiSDK 包管理器

  • 支持了全局选项 --porcelain 以方便外部程序与 ruyi 交互。初期为 ruyi listruyi news list 两种操作适配了 porcelain 输出格式。
  • ruyi news 在某条新闻存在当前系统语言翻译版本时,会优先展示此语言版本了。

RuyiSDK 软件源

RuyiSDK 自 0.10 版本开始支持沁恒微电子(WCH)RISC-V 产品。

  • 新增打包了 PLCT 维护的 LLVM 工具链 toolchain/llvm-plct。其主要特色是支持 XTHeadVector 扩展。
  • Ruyi 设备安装器(ruyi device provision)现已新增支持以下设备型号:
    • WCH CH32V103 评估板
    • WCH CH32V203 评估板
    • WCH CH32V208 评估板
    • WCH CH32V303 评估板
    • WCH CH32V305 评估板
    • WCH CH32V307 评估板
    • WCH CH582F 评估板
    • WCH CH592X 评估板

请在升级 RuyiSDK 包管理器之后,执行 ruyi update 以拉取软件源更新。

RuyiSDK 0.9 版本更新说明

· Eine Minute Lesezeit
xen0n
ruyi 包管理器负责人

RuyiSDK 0.9 现已发布,对应的包管理器版本也为 0.9.0。您可前往以下位置之一下载 RuyiSDK 包管理器:

本次更新主要包含了以下内容,祝您使用愉快!

RuyiSDK 包管理器

  • 支持了 LZ4 格式压缩文件的解包。

RuyiSDK 软件源

RuyiSDK 自 0.9 版本开始支持矽速(Sipeed)全线 RISC-V 产品。

Ruyi 设备安装器(ruyi device provision)现已新增了以下设备型号:

  • Sipeed LicheeRV Nano
  • Sipeed Lichee Cluster 4A
  • Sipeed Lichee Console 4A
  • Sipeed Maix-I
  • Sipeed Tang Mega 138K Pro

以下设备型号先前已得到 Ruyi 设备安装器支持:

  • Sipeed LicheePi 4A
  • Sipeed LicheeRV

请在升级 RuyiSDK 包管理器之后,执行 ruyi update 以拉取软件源更新。

RV64ILP32 裸机工具链与 profile 现已可用

· 2 Minuten Lesezeit
xen0n
ruyi 包管理器负责人

为了您的跟踪前沿开发动态方便,RuyiSDK 团队现已打包了 RV64ILP32 这一实验性 ABI 的裸机工具链供您使用。 由于是裸机工具链,此工具链不自带 sysroot,且未开启 multilib:可用的 ABI 为 ilp32d

使用示例

给定如下的 C 程序:

// test.c
long long add(long long *a, long long b)
{
return *a + b; // Should be realized with `ld` and `add`
}

void check(int);

void check_sizes(void)
{
check(sizeof(int)); // a0 should be 4
check(sizeof(long)); // a0 should be 4
check(sizeof(long long)); // a0 should be 8
check(sizeof(void *)); // a0 should be 4
}

使用相应的工具链包与 profile,我们将可编译出符合 RV64ILP32 ABI 的目标代码:

$ ruyi update
$ ruyi install gnu-plct-rv64ilp32-elf
$ ruyi venv -t gnu-plct-rv64ilp32-elf --without-sysroot baremetal-rv64ilp32 /tmp/venv
$ source /tmp/venv/bin/ruyi-activate
$ /tmp/venv11/bin/riscv64-plct-elf-gcc -O2 -c -o test.o test.c

检查目标代码是否符合预期:

$ riscv64-plct-elf-readelf -h test.o | grep 32
Class: ELF32
Flags: 0x25, RVC, X32, double-float ABI
$ riscv64-plct-elf-objdump -dw test.o

test.o: file format elf32-littleriscv


Disassembly of section .text:

00000000 <add>:
0: 6108 ld a0,0(a0)
2: 952e add a0,a0,a1
4: 8082 ret

00000006 <check_sizes>:
6: 3141 addiw sp,sp,-16
8: 4511 li a0,4
a: e406 sd ra,8(sp)
c: 00000097 auipc ra,0x0
10: 000080e7 jalr ra # c <check_sizes+0x6>
14: 4511 li a0,4
16: 00000097 auipc ra,0x0
1a: 000080e7 jalr ra # 16 <check_sizes+0x10>
1e: 4521 li a0,8
20: 00000097 auipc ra,0x0
24: 000080e7 jalr ra # 20 <check_sizes+0x1a>
28: 60a2 ld ra,8(sp)
2a: 4511 li a0,4
2c: 2141 addiw sp,sp,16
2e: 00000317 auipc t1,0x0
32: 00030067 jr t1 # 2e <check_sizes+0x28>

可见,此工具链确实生成了指针宽度为 32 位,但利用了 RV64 能力的目标代码。

新增板卡支持 (2024-01-29)

· Eine Minute Lesezeit
xen0n
ruyi 包管理器负责人

现已为以下板卡新增了镜像包。

您可用 RuyiSDK 设备安装向导 ruyi device provision 自动初始化您的设备,或通过 ruyi install 手动安装它们:镜像文件会被自动解压或符号链接到 ~/.local/share/ruyi/blobs/<包名>-<包版本号> 的位置。

感谢您对 RuyiSDK 的支持!

Sipeed LicheeRV & Allwinner 哪吒 D1

此两种型号在硬件层面大体兼容,但也有细微差别,仅体现在设备树层面。

  • board-image/oerv-awol-d1-base: openEuler RISC-V 系统镜像,基础系统
  • board-image/oerv-awol-d1-xfce: openEuler RISC-V 系统镜像,含 XFCE GUI

StarFive VisionFive

  • board-image/oerv-starfive-visionfive-base: openEuler RISC-V 系统镜像,基础系统
  • board-image/oerv-starfive-visionfive-xfce: openEuler RISC-V 系统镜像,含 XFCE GUI

StarFive VisionFive2

  • board-image/oerv-starfive-visionfive2-base: openEuler RISC-V 系统镜像,基础系统
  • board-image/oerv-starfive-visionfive2-xfce: openEuler RISC-V 系统镜像,含 XFCE GUI