在 Milk-V Duo 上跑通 Alpine 与 RuyiSDK 的完整实践

本教程内容整理自 张子彤 - 在 Milk-V Duo 上跑通 Alpine 与 RuyiSDK 的完整实践 - 20250827 的演讲视频,属于 PLCT 实验室内部报告,仅供技术交流使用。演讲围绕 RISC-V 嵌入式系统的完整部署与工具链集成展开 ,以 Milk-V Duo 开发板和 Alpine Linux 系统为例 ,讲解了系统安装 、RuyiSDK 在 Musl 环境下的离线部署 、基于 WSL 的 coremark 交叉编译测试 、以及如何配置 IDE 实现远程构建、运行和 GDB 远程调试等步骤 。

如有疏漏或错误之处,欢迎批评指正,共同完善。如需转载或引用本文内容,请注明出处,尊重原作者的劳动成果。

一、基础环境准备与 Alpine 系统安装

1.1 测试环境概览

  • 平台: Milk-V Duo 256M 开发板
  • 系统: Alpine Linux Edge 3.19 alpha
  • 架构: riscv64
  • 硬件: Milk-V Duo 256M 开发板、USB Type-C 数据线、Micro SD 卡和读卡器

1.2 Alpine 系统烧录与初次连接

  1. 从指定链接下载 Alpine 系统的镜像文件
  2. 解压镜像文件,并使用 BalenaEtcher 或类似软件将镜像烧录到 Micro SD 卡
  3. 将 USB Type-C 数据线一端插到电脑,另一端插到 Milk-V Duo 开发板;打开电脑端的 设备管理器;在 其他设备 栏目中,可以看到一个带有感叹号的 RNDIS 设备;点击该 RNDIS 设备,选择 更新驱动;选择 网络适配器,然后选择 远程 NDIS 兼容设备,成功更新驱动
  4. 使用 PuTTY 等工具进行 SSH 登录测试
    • 默认 IP 地址为:192.168.42.1
    • 输入用户名和密码即可登录到开发板

二、开发板网络配置:设置共享网络与自启

为了让开发板能够访问互联网,需要额外设置共享主机的网络

  1. 在主机上,将 Wi-Fi 选择 共享,共享给 RNDIS 设备
  2. 给 RNDIS 网卡设置一个静态 IP(例如,在 192.168.137.1 的子网)
  3. 在开发板内部(SSH 终端):
    • 删掉旧的默认网关
    • 将主机的共享网络地址(如 192.168.137.1)设置为默认网关
    • 配置 DNS 服务器
  4. 解决时间/证书问题: 校准系统时间,并修改证书错误
  5. 设置开机自启: 将上述所有网络配置和校准操作设置为开机自启

三、RuyiSDK 在 Alpine 上的离线安装

由于官方预编译的 RuyiSDK 二进制包是 glibc 目标,与 Alpine 使用的 musl 运行时不兼容,故需采用 Python Wheel 包离线安装。

  1. 在主机侧(PowerShell/WSL)准备依赖:
    • 下载 RuyiSDK 运行所需的依赖包
    • 下载 RuyiSDK 的 Wheel (whl) 包
    • 将这些依赖包打包上传到开发板
  2. 在开发板侧离线安装:
    • 在开发板上进行这些依赖包的离线安装
    • 部署 RuyiSDK 的 whl 包,完成离线安装
  3. 配置全局可用性:
    • 配置启动器,使离线安装的 RuyiSDK 变成全局可用的命令
    • 允许 root 用户运行
  4. 验证: 使用 ruyi version 命令验证版本号

四、RuyiSDK 的使用与 coremark 性能测试

4.1 RuyiSDK 基础使用

  • 通过 SSH 远程连接开发板
  • 演示 ruyi update 刷新本地缓存包
  • 演示 ruyi news list --new 列出未读新闻
  • 演示 ruyi list --name-contains''列出软件包

4.2 coremark 交叉编译测试

  • 原因: Milk-V Duo 内存(256M)和算力有限,在板端进行构建编译会因内存不足和耗时长而失败,因此选择在主机上进行交叉编译 。
  • 主机 WSL 侧操作:
    1. 在 WSL 上安装 RuyiSDK 工具
    2. 创建并激活虚拟环境
    3. 使用 RuyiSDK 的包管理功能安装 coremark 源码并解包
    4. 指定交叉工具链
    5. 构建 coremark
    6. 验证产物架构,确认是 RISC-V 架构的可执行文件
  • 传输与运行:
    1. 将 coremark 可执行文件传输到开发板上
    2. 在开发板上执行 coremark

五、IDE 集成与远程调试

  • 环境切换: 将主机环境从 WSL 切换到 VMware 虚拟机,以解决网络连接问题

5.1 IDE 配置与 Hello World 远程运行

  1. 在虚拟机中安装并启动 RuyiSDK IDE (REEXTRACT)
  2. 获取 hello-world 源码
  3. 导入工程: 在 IDE 中导入 helloworld 工程
  4. 绑定工具链:
    • 选择 RISC-V Cross GCC
    • 配置 Watching Folder 为工具链的 bin 目录(通过终端查询工具链的路径后填入)
    • 配置编译器前缀为 riscv-linux-musl
  5. 准备 Makefile: 填写工具链前缀、开发板设备信息、编译参数和编译规则
  6. 运行: 进入项目目录,执行 make run_remote,实现远程连接、上传可执行文件并在板端运行,输出 hello world

5.2 远程调试 (GDB Server)

  1. GDB Server 安装: 在开发板上下载并安装 GDB Server
  2. 板端启动: 通过 SSH 连接开发板,启动 GDB Server,调试目标项目(如 sumdemo
  3. 主机端调试:
    • 在主机端进入虚拟环境
    • 使用交叉编译的 GDB,调试主机端的二进制文件
    • 设置远程端口,连接到开发板上的 GDB Server
    • 设置断点(例如在第 6 行),让程序运行
    • 查看 back trace 回溯,完成远程调试

补充说明

  • 网络自动化: Milk-V Duo 的 USB 网卡设备名会变化,建议使用 netplan 等工具配合自动化脚本来管理网络,并增加开机自动修复功能
  • 免密配置: 配置 SSH 免密登录,避免在执行 make 等操作时重复输入密码
4 个赞