ROC-RK3568-PC
本文档介绍如何在 ROC-RK3568-PC 开发板上启动和验证 AxVisor 项目,涵盖多种部署场景:
- AxVisor + Linux 客户机:在虚拟化环境中运行 Linux 系统
- AxVisor + ArceOS 客户机:在虚拟化环境中运行 ArceOS 系统
- AxVisor + 多客户机:同时运行多个不同类型的客户机系统
快速体验:如果您不想自己编译构建,我们也提供了预构建的固件镜像,可以直接下载体验。请访问AxVisor 官方网站获取适用于 ROC-RK3568-PC 的预构建固件,并直接跳转到烧录到开发板章节
开发环境
AxVisor 及 ROC-RK3568-PC 的 SDK 仅支持在 Linux 系统中进行开发。本文档基于 Ubuntu 24.04 系统验证,其他 Linux 发行版可能需要相应调整。
系统要求
- Linux 操作系统
- Git 工具
- Rust 工具链(用于编译 AxVisor)
- 基本的 Linux 命令行操作能力
注意:ROC-RK3568-PC 的 SDK 对 Python 环境有特殊要求,详见后续章节。
构建准备
准备 AxVisor 源码
首先,使用 git clone 命令获取 AxVisor 的源代码并创建工作目录:
git clone https://github.com/arceos-hypervisor/axvisor.git
cd axvisor
# 创建工作 目录
mkdir -p tmp/{configs,images}
准备设备树文件
设备树文件可以通过在开发板上运行 Linux 系统导出,也可以下载项目提供的设备树文件使用。
项目提供的 Linux 镜像文件夹中包含设备树文件,可直接下载到 tmp/images 目录:
# 下载包含设备树的 Linux 镜像
cargo xtask image download roc-rk3568-pc_linux --output-dir tmp/images
准备客户机镜像
AxVisor 项目提供了预构建的客户机镜像,方便用户快速验证和体验功能。通过 cargo xtask image 命令可以方便地管理这些镜像。
# 下载 ArceOS 客户机镜像
cargo xtask image download roc-rk3568-pc_arceos --output-dir tmp/images
# 下载 Linux 客户机镜像
cargo xtask image download roc-rk3568-pc_linux --output-dir tmp/images
# 列出所有可用镜像
cargo xtask image ls
AxVisor 所支持的客户机镜像的构建脚本和构建产物可以在 axvisor-guest 仓库中找到。
部署到开发板
部署方式概述
AxVisor 支持两种客户机加载方式:内存加载部署(编译时将客户机镜像打包进 AxVisor 二进制文件, 启动时自动从内存加载)和文件系统加载部署(客户机镜像存放在开发板文件系统中,运行时动态从文件系统加载)。本文档采用文件系统加载部署方式进行介绍。
在此部署方式下,客户机配置文件需设置 image_location = "fs",.build.toml 中的 vm_configs 字段设置为空数组 [],并启用文件系统相关特性。
重要说明:由于瑞芯微提供的 SDK 对整个部署方式进行了预定义,难以实现自定义部署方式,因此我们通过构建后编辑瑞芯微原生镜像的方式来实现部署。整个部署操作要求在 ROC-RK3568-PC 的 SDK 目录中执行相关命令,以便直接使用 SDK 生成的各种镜像和工具。
部署步骤
一、前期准备
1. 准备客户机配置文件
复制客户机配置文件模板到工作目录:
# 复制 ArceOS 客户机配置文件
cp configs/vms/arceos-aarch64-rk3568-smp1.toml tmp/configs/
# 复制 Linux 客户机配置文件
cp configs/vms/linux-aarch64-rk3568-smp1.toml tmp/configs/
修改客户机配置文件,设置为文件系统加载模式:
# 修改 ArceOS 客户机配置
sed -i 's|image_location = ".*"|image_location = "fs"|g' tmp/configs/arceos-aarch64-rk3568-smp1.toml
sed -i "s|kernel_path = \".*\"|kernel_path = \"/guest/images/arceos.bin\"|g" tmp/configs/arceos-aarch64-rk3568-smp1.toml
# 修改 Linux 客户机配置
sed -i 's|image_location = ".*"|image_location = "fs"|g' tmp/configs/linux-aarch64-rk3568-smp1.toml
sed -i "s|kernel_path = \".*\"|kernel_path = \"/guest/images/linux.bin\"|g" tmp/configs/linux-aarch64-rk3568-smp1.toml
2. 配置构建文件
使用 cargo xtask defconfig roc-rk3568-pc 命令设置 ROC-RK3568-PC 为默认构建配置:
cargo xtask defconfig roc-rk3568-pc
然后修改 .build.toml 文件,启用文件系统相关特性:
# 在 features 数组中添加文件系统相关特性
sed -i '/^features = \[/,/^\]/c\
features = [\
"fs",\
"axstd/ext4fs",\
"driver/rk3568-clk",\
"driver/sdmmc",\
"dyn-plat",\
"axstd/bus-mmio",\
]' .build.toml
或者手动编辑 .build.toml 文件,将 features 字段修改为:
features = [
"fs",
"axstd/ext4fs",
"driver/rk3568-clk",
"driver/sdmmc",
"dyn-plat",
"axstd/bus-mmio",
]
注意: 文件系统加载模式下,vm_configs 保持为空数组 [],不需要指定客户机配置文件。
3. 编译 AxVisor
编译 AxVisor:
cargo xtask build
编译完成后,AxVisor 镜像位于 target/aarch64-unknown-none-softfloat/release/axvisor.bin。
4. 获取 ROC-RK3568-PC SDK
由于没有完善的构建框架,我们套用原有的构建 Linux 内容来生成镜像。根据 ROC-RK3568-PC 开发板官方文档,构建 AxVisor 的镜像。
下载的 SDK 实际上是由 repo 工具管理的一个仓库源码压缩包及相关说明文档,需要解压后使用 repo 命令恢复 SDK 内容。

二、构建 SDK
1. 解压和配置 SDK
解压 SDK 仓库
# 给脚本执行权限
chmod +x ./sdk_tools.sh
# 创建 SDK 目录
mkdir ../firefly_rk3568_sdk
# 解压 SDK 仓库压缩包
./sdk_tools.sh --unpack -C ../firefly_rk3568_sdk
解压后只有一个 .repo 文件夹,需要进一步恢复 SDK 内容:

恢复 SDK 内容
# 方法一:使用工具脚本
./sdk_tools.sh --sync -C ../firefly_rk3568_sdk
# 方法二:手动执行(推荐)
cd ../firefly_rk3568_sdk
.repo/repo/repo sync -l
.repo/repo/repo start firefly --all
恢复后的 SDK 内容:

Python 环境兼容性修复
如果当前构建环境 Python 版本是 3.12 及以上,需要修复 SDK 中的 repo 工具兼容性:
- 修改
../firefly_rk3568_sdk/.repo/repo/main.py中的imp相关 代码(Python 3.12 中已删除) - 新建
.repo/repo/formatter.py文件(参考Code中的完整代码)

注意:上述修复只需要执行一次,后续更新可在
firefly_rk3568_sdk目录中执行.repo/repo/repo sync -c --no-tags
SDK 恢复完成后,build.sh 就是构建入口。

2. 移植适配和构建准备
Python 环境适配
ROC-RK3568-PC 的 SDK 对 Python 环境有特殊要求,需要进行适配修复。
U-Boot 构建修复
修改 u-boot/make.sh 中的 Python2 检测代码:

说明:U-Boot 源码中还有大量基于 Python2 的脚本文件,但在默认构建中不会使用到,因此无需进一步修改。
3. 安装构建依赖
首先安装 SDK 构建所需的依赖工具包:
sudo apt install git ssh make gcc libssl-dev liblz4-tool expect expect-dev \
g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib \
g++-multilib unzip device-tree-compiler ncurses-dev \
libgucharmap-2-90-dev bzip2 expat cpp-aarch64-linux-gnu \
libgmp-dev libmpc-dev bc python-is-python3
注意:如果使用 Python2 环境,则不要安装
python-is-python3这个包。
4. 准备 Rootfs 镜像(可选)
如果选择构建 Ubuntu 的 rootfs(在下一步配置文件时选择),则需要先下载预编译 的 Ubuntu 镜像。SDK 不支持从源码构建 rootfs。
下载步骤:
-
访问 Firefly 官方下载页面,从提供的网盘中下载任意一个 rootfs 镜像,例如
Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.7z -
解压镜像到 SDK 根目录的
prebuilt_rootfs文件夹(需自行创建):
# 创建目录
mkdir -p <SDK_PATH>/prebuilt_rootfs
# 解压并重命名
7z x Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.7z
# 将解压后的镜像移动并重命名为 rk356x_ubuntu_rootfs.img
mv <解压后的文件> <SDK_PATH>/prebuilt_rootfs/rk356x_ubuntu_rootfs.img