Blog
Bleiben Sie mit aktuellen Nachrichten vom RuyiSDK-Team auf dem Laufenden
在上期文章中,向大家介绍了《玄铁团队与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%,兼顾成本和性能。

达摩院玄铁团队联手嘉楠科技和中科院软件所PLCT实验室,将新32位落地到Banana Pi开源社区的BPI-CANMV-K230D-Zero 开发板,并与PLCT实验室的 RuyiSDK 集成,一起为用户提供便捷的使用体验:
| 传统64位(64LP64) | 新32位(64ILP32) |
|---|
| 内核编译命令 | make ARCH=riscv k230_defconfig all | make ARCH=riscv k230_defconfig 64ilp32.config all |
默认配置差异仅2行:
CONFIG_ARCH_RV64ILP32=y
CONFIG_32BIT=y
下面的视频和图片展示了,传统64位(左)与新32位(右)对比 LVGL 的运行:

| 动态内存对比 | 传统64位 (RV64 LP64) | 新32位 (RV64 ILP32) |
|---|
| used | 37MB | 24MB |
| 静态内存对比 | 传统64位 (RV64 LP64) | 新32位 (RV64 ILP32) |
|---|
| kernel code | 10282KB | 10456KB |
| rwdata | 1126KB | 832KB |
| rodata | 5105KB | 4464KB |
| bss | 500KB | 376KB |
相比传统64位,新32位 RuyiSDK 大幅提升内存使用效率,避免了 K230D 产品化中的内存浪费。
由于 LP64 的指针数据类型比 ILP32 大一倍,导致 LP64 的缓存利用率偏低。下面,基于 K230D 对比二者的双向链表遍历性能:
| 第一次执行时长 | 第二次执行时长 | 第三次执行时长 | 第四次执行时长 | 第五次执行时长 | 平均执行时长 |
|---|
| 单位:纳秒 | | | | | 单位:秒 |
| LP64 | 3872221628 | 3420261850 | 3774494961 | 3539484998 | 4034940590 | 3.728280805 |
| ILP32 | 2614749257 | 2261891517 | 2680216665 | 2894499368 | 2847282036 | 2.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 现已发布,对应的包管理器版本也为 0.15.0。您可前往以下位置之一下载 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 现已发布,对应的包管理器版本也为 0.14.0。您可前往以下位置之一下载 RuyiSDK 包管理器:
本次更新主要包含了以下内容,祝您使用愉快!
- 正式引入插件架构:
ruyi 虚拟环境的 profile 相关处理现在完全由插件负责了。
- 支持了 Debian 软件包格式
*.deb 的解包操作。
- 再次完善了对“预发布版本”的判断:先前会对非完全由数字结尾的该类版本号判断错误。
但该潜在问题不会被当前的 RuyiSDK 软件源内容触发。
- 修复了 riscv64 Python 3.12 环境下
pygit2 的构建失败问题:先前需要在
pygit2 构建开始之后、试图在其虚拟环境中执行 setup.py 前,人工干预,在该环境中安装
setuptools——从 Python 3.12 起该包已经不会被自动安装。
- 增加了从上游源码打包的 Box64 架构模拟器:
emulator/box64-upstream。
- 增加了办公套件
extra/wps-office。请注意:由于是商业软件的缘故,首次运行该软件包时需要操作接受一份《最终用户许可协议》。
- 您可按照
ruyi news 的指引,在您的 RISC-V 桌面设备上用 Box64 运行
WPS Office 进行办公了。
为了支持刷写方式复杂、需要夹杂人工干预、镜像文件需要手工下载等复杂情况下的设备初始化,我们正在将设备安装器重构为基于插件架构的形式。
由于本开发周期临时加入了 Box64 运行 WPS Office 的 PoC 内容,设备安装器的插件化重构工作暂缓,但仍将在未来的版本上线。届时旧版
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
按照 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
记下安装路径。
由于 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
由于 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
强制安装 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 预期自身被系统包管理器管理,它的启动器脚本假定了自身的安装路径
为 /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
准备工作终于完成,现在将所有部分串起来:
# 此动态链接库的原生转发仍有些问题,因此强制以模拟方式执行
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.13 现已发布,对应的包管理器版本也为 0.13.0。您可前往以下位置之一下载 RuyiSDK 包管理器:
本次更新主要包含了以下内容,祝您使用愉快!
- 修复了 issue #158:
coremark 包的两个版本,解压后的目录布局不统一。现在都会在当前工作目录下“摊开”了。
- 修复了 issue #159: 对“预发布版本”判断方式的不统一。
- 随着 Python 3.12 的正式发布,官方
ruyi 二进制也在 Python 3.12 环境构建了。
- 为引入插件架构做好准备:引入了 Starlark 语言支持,并支持在 CI 自动化构建。Starlark
是一种极度简化的 Python 方言,被 Bazel、BUCK 等构建系统广泛采用;这是为了让所有了解
Python 语言的开发者都可使用熟悉的语法撰写 RuyiSDK 包管理器插件。
为了支持刷写方式复杂、需要夹杂人工干预、镜像文件需要手工下载等复杂情况下的设备初始化,我们正在将设备安装器重构为基于插件架构的形式,预计将于下个版本付诸测试。届时旧版
ruyi 的设备安装器功能将不可用,请先升级再进行体验。
RuyiSDK 0.12 现已发布,对应的包管理器版本也为 0.12.0。您可前往以下位置之一下载 RuyiSDK 包管理器:
本次更新主要包含了以下内容,祝您使用愉快!
- 修复了先前 Pine64 Star64 Armbian 镜像无法下载的问题。
- 对于部分必须由用户手工下载的文件,支持了相应的用户体验:按照当前系统语言设置,渲染相应的提示语。
- 升级了 pygit2 依赖库版本到 1.5.0,以支持 libgit2 的 1.8 版本。
- 修复了
XDG_STATE_HOME 环境变量被无视的问 题。
为了支持刷写方式复杂、需要夹杂人工干预、镜像文件需要手工下载等复杂情况下的设备初始化,我们正在对设备安装器进行重构,预计将于下个版本付诸测试。届时旧版
ruyi 的设备安装器功能将不可用,请先升级再进行体验。
RuyiSDK 0.11 现已发布,对应的包管理器版本也为 0.11.0。您可前往以下位置之一下载 RuyiSDK 包管理器:
本次更新主要包含了以下内容,祝您使用愉快!
- 去除了先前唯一的 LGPL 依赖。现在 RuyiSDK 包管理器及其所有依赖都采用宽松开源许可证了,方便下游用户在商业场景取用。
- Ruyi 设备安装器(
ruyi device provision)现已新增支持以下设备型号:
请在升级 RuyiSDK 包管理器之后,执行 ruyi update 以拉取软件源更新。
我们注意到越来越多的设备型号,甚至如最新面世的 BananaPi BPI-F3
等等,其系统镜像仅以网盘(百度网盘、Google Drive、MEGA 等服务)方式分发。
对这些设备型号的妥善支持面临挑战;在接下来的版本迭代中,我们将尝试支持此场景,敬请期待或参与进来。
RuyiSDK 0.10 现已发布,对应的包管理器版本也为 0.10.0。您可前往以下位置之一下载 RuyiSDK 包管理器:
本次更新主要包含了以下内容,祝您使用愉快!
- 支持了全局选项
--porcelain 以方便外部程 序与 ruyi 交互。初期为
ruyi list 与 ruyi news list 两种操作适配了 porcelain 输出格式。
ruyi news 在某条新闻存在当前系统语言翻译版本时,会优先展示此语言版本了。
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 现已发布,对应的包管理器版本也为 0.9.0。您可前往以下位置之一下载 RuyiSDK 包管理器:
本次更新主要包含了以下内容,祝您使用愉快!