任航麒(2572131118@qq.com)
更新时间:2025.4.23
新板子需要的操作
如果板子为新到手的 RK3588,则可能板子内部未被烧写任何内容,包括引导,因此需要首先对板子进行初步烧写,为其烧写 Uboot、Linux、Rootfs 等内容。烧写推荐在 Windows 通过RKDevTool完成。
可以直接下载此链接中的 update.img。此镜像打包了上述所有内容。直接烧写此镜像即可一步到位,具体操作如下:
- 用 USB 连接电脑和板子上的 Type-C 口。
- 首先让板子处于 MaskRoom 或者 Loader 模式(可以在 RKDevTool 识别到)
- Loader 模式:在通电状态下同时按住 RST 和 BOOT 按键,或者在 Uboot、Linux 下输入
reboot loader
- MaskRoom 模式:新板子默认处于此模式。
- Loader 模式:在通电状态下同时按住 RST 和 BOOT 按键,或者在 Uboot、Linux 下输入
- 在 RKDevTool 中按照下图进行操作
获取 RK3588 内核镜像
RK3588 有着专用的内核镜像,源码可以通过此链接获取。
为了方便快速上手,这里的内核已经是经过编译的内核,因此文件较大。可以通过kernel/arch/arm64/boot/Image
直接获取镜像,也可利用现成的.config
重新定制所需镜像。
当然,如果不关心内核源码,可以通过此链接直接获取 Image。
串口连接
RK3588 的串口比较特殊,需要自行购买 USB转TTL 转换器进行连接
连接时 RT-TX、TX-RD、GND-GND,连接到电脑后串口波特率为1500000。
重新烧写 Uboot
要想启动 hvisor,原有的 Uboot 没有等待时间,会直接启动 Linux。需要对 Uboot 进行重新烧写,这里也已经准备好了一份 Uboot 及其烧写工具,通过Uboot、Upgrade-tool即可获取。
在 Linux 系统下,同样用 Usb 连接板子和电脑,并使其处于 Loader 模式:
chmod +777 /path/to/upgrade_tool
sudo upgrade_tool di -u /path/to/uboot.img
编译 Hvisor 和设备树
- 和其他开发板类似,拉取 hvisor 最新代码,仓库地址:https://github.com/syswonder/hvisor。进入目录后编译 hvisor:
make BID=aarch64/rk3588
- 进入
/images/aarch64/devicetree/
,rk3588-root-aarch64-sdmmc.dts
是 RK3588 RootLinux 所使用的设备树,rk3588-nonroot-aarch64.dts
是 RK3588 NonRootLinux 所使用的设备树。 可以使用下面的命令对其编译:dtc -I dts -O dtb rk3588-nonroot-aarch64.dts -o ./linux1.dtb dtc -I dts -O dtb rk3588-root-aarch64-sdmmc.dts -o ./zone0.dtb
制作文件系统
准备一个 SD 卡,分区两块,第一块 FAT32 格式,大小 1g;第二块 EXT4 格式。
下载文件系统,将此文件系统解压到 EXT4 格式分区下即可。
当然,也可以自行制作,参考基于ubuntu_base构建文件系统。
启动 RootLinux
TFTP
如果已经搭建了 TFTP 服务器,那么可以以方便的方式快速启动 RootLinux,具体而言:
- 将 Image、zone0.dtb、hvisor.bin 复制到 ~/tftp 文件夹下
- 用网线连接主机与开发板,配置主机ip为
192.168.137.2
,子网掩码255.255.255.0
。 - 直接开机并连接串口即可,uboot 将自动下载 tftp 文件夹下的内容并启动。
如果有搭建需求,可以参考嵌入式平台快速开发-Tftp 服务器搭建与配置。
无 TFTP
此时 SD 卡中第一块 FAT32 分区即派上了用场,将 Image、zone0.dtb、hvisor.bin 复制到此分区中
- 启动开发板,连接串口。
- 打断 Uboot 自动启动。
- 输入下述指令启动 RootLinux
fatload mmc 0:1 0x00480000 hvisor.bin;fatload mmc 0:1 0x10000000 zone0.dtb;fatload mmc 0:1 0x09400000 Image;bootm 0x00480000 - 0x10000000
启动 NonRootLinux
下载现成的配置文件
通过此链接可下载可用的 NonRoot 配置,包括 Image、配置文件、rootfs等,将其解压到 RootLinux 的文件系统中,其可以帮助快速启动Nonroot,主要启动的设备有virtio-blk和virtio-console,也可根据自己的需求直通设备。
Tips:
请不要随意修改 Image 为 Rootlinux 使用的 Image,此会导致 Nonroot 启动失败!
编译 hvisor-tool
拉取 Hvisor-tool 的最新代码:https://github.com/syswonder/hvisor-tool/tree/main,进行编译:
make all ARCH=aarch64 LOG=LOG_WARN KDIR=RK3588内核源码 VIRTIO_GPU=n
更多细节请参考 hvisor-tool 的 Readme.md。
注意,内核源码必须已经经过编译,否则hvisor-tool将会因为找不到编译产物而报错。
Tips:
编译 hvisor-tool 时所使用的 glibc 版本需要保证 Rootlinux 文件系统也支持,否则会导致 hvisor-tool 不能正常工作!
例如,本文给出的 Rootlinux Rootfs 为 Ubuntu 24.04。编译机的 Glibc 版本要不高于 Ubuntu24.04 的 Glibc 版本,这里由于 Ubuntu24.04 较新,一般是满足的。
当然,上述操作是通过对齐两个文件系统所用的 glibc 版本来完成的,也可以直接在 Rootlinux 文件系统中编译 hvisor-tool,或者在编译机指定 Rootlinux 的文件系统目录,使得编译链接时直接链接 Rootlinux 文件系统的 glibc,具体如下:
make all ARCH=aarch64 LOG=LOG_WARN KDIR=RK3588内核源码 VIRTIO_GPU=n \
ROOT=/path/to/target_rootfs
启动
在 Rootlinux 下执行下述命令
insmod hvisor.ko
nohup ./hvisor virtio start virtio_cfg.json &
./hvisor zone start zone1_linux.json
screen /dev/pts/0
即可看到第二个虚拟机(Nonroot)的输出。
Tips:
如果不按照上述流程配置 Rootlinux 的文件系统,或者随着版本迭代,可能会出现现成配置文件不可用的情况,此时需要自行更新配置,我们也会尽早跟进。
具体最新配置格式可以参考 hvisor-tool 下的 example 进行。