ARM主机部署Docker云手机

Redroid

突发奇想,想部署一个云手机玩玩,正好自己有一个 ARM 服务器,用来虚拟安卓手机相当合适。这里选择的是 Redroid,ReDroid (remote android) 是一个能够利用 Docker 部署的,支持 GPU 加速的 AIC (Android In Container) 解决方案。ReDroid 同时支持 arm64 和 amd64 架构。适用于云游戏、VMI(虚拟移动设备)、自动化测试等。

重新编译内核

通过 Redroid文档 可以知道,Redroid 需要两个内核模块支持:ashmem(主线内核在5.18 drop了这个模块,官方的替代方案是memfd,而且redroid也提供了androidboot.use_memfd=1来启用memfd支持)和 binder

因此这里需要在 Linux 内核源码中增加下列配置项:

1
2
3
4
5
6
7
8
9
# binder相关
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
CONFIG_ANDROID_BINDER_IPC_SELFTEST=y
# ashmem相关
CONFIG_ASHMEM=y
# memfd相关(由于linux主线drop了ashmem,因此最好也把memfd编译进去,供替换)
CONFIG_MEMFD_CREATE=y

重新编译并替换内核

检查内核相关模块是否存在

1
2
3
sudo grep binder /proc/filesystems

sudo grep ashmem /proc/misc

检查内核模块

增加 systemd.unified_cgroup_hierarchy=0

经过测试,我的 ARM 服务器还需要在 /boot/cmdline.txt 中增加 systemd.unified_cgroup_hierarchy=0 才能正常启动 Redroid

1
2
3
4
5
┌[allen☮Ubuntu]-(~)
└> cat /proc/cmdline
root=LABEL=emmc-rootfs rw rootfstype=ext4 console=ttyS0,115200n81 quiet systemd.unified_cgroup_hierarchy=0 splash plymouth.ignore-serial-consoles vt.global_cursor_default=1 irqchip.gicv3_pseudo_nmi=0 net.ifnames=0 rtleth=ethaddr:6a:3b:0f:c3:0c:8b
┌[allen☮Ubuntu]-(~)
└>

部署 Redroid

官方提供的 Docker 镜像仓库 redroid

拉取镜像

这里用 Android 11 测试

1
sudo docker pull redroid/redroid:11.0.0-latest

启动容器

1
sudo docker run -d --privileged --name android -p 5555:5555 -v ~/data11:/data redroid/redroid:11.0.0-latest

安装 Scrcpy

Linux 里面可以直接使用 apt 安装

1
sudo apt install scrcpy

Window 可以直接从Scrcpy 的 Git 仓库下载

连接adb

1
adb connect 127.0.0.1:5555

启动 Scrcpy

1
scrcpy --serial 127.0.0.1:5555

启动成功,但是发现运行比较卡,而且可以观察到宿主机 CPU 占用率很高,用 Aida64 看一下,果然 GPU 没能识别出来。

拉取支持 rk3588 GPU 加速的镜像

官方的相关 issues 有提到 RK3588 芯片如果要使用 GPU,需要添加额外的图形库。

在另一个 issues 中,有大佬分享了自己打包的镜像,感谢大佬😉

这里直接拉取测试一下

1
sudo docker pull shangzebei/rk3588:latest

还有一个支持 GPU 的 docker 镜像是

1
sudo docker pull registry.cn-hangzhou.aliyuncs.com/whsyf/dobox:rk3588-202303011

启动新的容器

shangzebei/rk3588

1
sudo docker run -d --privileged --name android -p 5555:5555 -v ~/data12:/data -v /dev/net/tun:/dev/tun -v /dev/mali0:/dev/mali0 shangzebei/rk3588 androidboot.redroid_gpu_mode=mali

dobox:rk3588-202303011

1
2
3
4
5
6
7
8
docker run -itd --rm --privileged \
--pull always \
-v /mmc/zcg1:/data \
-v /dev/net/tun:/dev/tun \
-v /dev/mali0:/dev/mali0 \
-p 5555:5555 \
--name dobox1 \
registry.cn-hangzhou.aliyuncs.com/whsyf/dobox:rk3588-202303011

运行测试

直接 Scrcpy 连接容器,明显流畅很多,Aida64 看一下,GPU 能够正常识别

识别到GPU驱动


ARM主机部署Docker云手机
https://www.liaomz.top/2023/08/28/arm-zhu-ji-bu-shu-docker-yun-shou-ji/
作者
发布于
2023年8月28日
许可协议