随着云计算相关产业蓬勃发展,用户对移动设备的弹性需求推动出云手机、云游戏等概念,云手机和云游戏就是将云计算技术运用于网络终端服务,通过云服务器实现云服务的手机,支持弹性适配用户个性化需求,释放手机本身硬件资源。
安卓系统在Arm平台上有着广泛部署的历史,Arm同时提供了高性能的云计算平台,既完全兼容安卓生态,无指令翻译环节,海量应用无需迁移,又支持虚拟化和容器技术,CPU、内存、存储和网络等资源可按需弹性分配,可以完美地为终端用户提供安卓云服务。终端用户可以通过手机、电脑等设备远程访问Arm服务器上的安卓实例,并运行标准的安卓应用程序和游戏。
本文主要介绍在Arm服务器上,Robox安卓容器方案的构建编译过程和使用方法。
Robox容器方案是基于Docker容器使能安卓系统的虚拟化方案。容器的实现是基于一个anbox的基本框架,基本架构如下图所示。
服务器:Arm服务器1台
显卡:AMD Radeon Pro WX 7100 或 Nvidia Tesla T4
OS: Ubuntu 20.04.2
Kernel: 5.4.0
apt install dpkg libncurses5-dev libncursesw5-dev libssl-dev cmake cmake-data debhelper dbus google-mock libboost-dev libboost-filesystem-dev libboost-log-dev libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libcap-dev libsystemd-dev libdbus-1-dev libegl1-mesa-dev libgles2-mesa-dev libglib2.0-dev libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev libprotobuf-dev libsdl2-dev libsdl2-image-dev lxc-dev pkg-config protobuf-compiler libboost-filesystem1.62.0 libboost-system1.62.0 docker.io dkms libboost-iostreams1.62.0 apt install build-essential apt install mesa-common-dev
下载: libprocess-cpp3_3.0.1-0ubuntu5_arm64.deb: https://launchpad.net/ubuntu/zesty/arm64/libprocess-cpp3/3.0.1-0ubuntu5 libdbus-cpp5_5.0.0+16.10.20160809-0ubuntu2_arm64.deb: https://launchpad.net/ubuntu/zesty/arm64/libdbus-cpp5/5.0.0+16.10.20160809-0ubuntu2 libdbus-cpp-dev_5.0.0+16.10.20160809-0ubuntu2_arm64.deb: https://launchpad.net/ubuntu/bionic/arm64/libdbus-cpp-dev/5.0.0+16.10.20160809-0ubuntu2
安装
dpkg -i libprocess-cpp3_3.0.1-0ubuntu5_arm64.deb dpkg -i libdbus-cpp5_5.0.0+16.10.20160809-0ubuntu2_arm64.deb dpkg -i libdbus-cpp-dev_5.0.0+16.10.20160809-0ubuntu2_arm64.deb
vim /etc/default/docker
DOCKER_OPTS= -s overlay
/etc/init.d/docker restart
安装xfce4
apt install xfce4 xfce4-* xrdp
打开.xsession文件夹
cd /home/ubuntu
vi .xsession
注意 “/home/ubuntu”为用户文件夹。
在.xsession中添加如下内容
xfce4-session
重启xrdp远程桌面
/etc/init.d/xrdp restart
https://github.com/kunpengcompute/robox/tree/master2. binder.ko和ashmem.ko模块编译安装
下载内核源码,供内核模块编译
apt search linux-source
apt install linux-source-5.4.0
拷贝ashmem和binder源码
cd /home/robox-master/kernel/robox-modules
cp anbox.conf /etc/modules-load.d/
cp 99-anbox.rules /lib/udev/rules.d/
cp -rT ashmem /usr/src/anbox-ashmem-1
cp -rT binder /usr/src/anbox-binder-1
使用dkms进行编译和安装
dkms install anbox-ashmem/1
dkms install anbox-binder/1
将ko模块安装到内核,binder_linux模块需要带参数
modprobe ashmem_linux
modprobe binder_linux num_devices=254
lsmod | grep -e ashmem_linux -e binder_linux
chmod 777 /dev/ashmem /dev/binder*
注意:每次服务器重启后,需要将binder_linux模块移除之后,再重新安装。
若ashmem和binder的属性权限不是下列命令显示的,需要使用chmod添加权限
ls -alh /dev/binder* /dev/ashmem
crwxrwxrwx 1 root root 10, 55 Oct 22 10:47 /dev/ashmem
crwxrwxrwx 1 root root 511, 0 Oct 22 10:47 /dev/binder0
crwxrwxrwx 1 root root 511, 0 Oct 22 10:47 /dev/binder1
...
下载安卓镜像包:android.imghttps://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/native/android.img
将android镜像挂载到“/mnt”目录
cd /home
mount /home/android.img /mnt
进入/mnt目录,注册镜像
cd /mnt
tar --numeric-owner -cf- . | docker import - android:robox_with_exagear
查看系统容器
回显信息如下,则确认android容器存在
创建编译目录
cd /home/robox-master
mkdir build
cd build
配置编译,在“/home/robox-master/build”目录执行命令
cmake ..
在“/usr/include/glm/gtx/transform.hpp”文件中在第21行添加以下内容
编译安装
make -j
make install
安装xfce4桌面和相关工具
apt install -y xfce4 mesa-utils x11vnc vainf
修改/etc/X11/xorg.conf配置文件
在xorg.conf文件中添加如下内容,其中BusID项需要根据服务器中显卡pci号修改(BusID都是用英文冒号(:)分隔)
ection "ServerFlags"
Option "DontVTSwitch" "on"
Option "AutoAddDevices" "off"
Option "AutoEnableDevices" "off"
Option "AutoAddGPU" "off"
Option "AutoBindGPU" "off"
EndSection
Section "Device"
Identifier "AMD"
Driver "amdgpu"
BusID "pci00:00"
EndSection
Section "Monitor"
Identifier "monitor0"
Modeline "1280x720" 74.50 1280 1344 1472 1664 720 723 728 748 -hsync +vsync
Option "enable" "true"
EndSection
Section "Screen"
Identifier "screen0"
Device "AMD"
Monitor "monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x720"
EndSubSection
EndSection
查询显卡的pci号
#lspci |grep AMD
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon Pro WX 7100]
05:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
注意:
cd /home/ git clone https://anongit.freedesktop.org/git/mesa/mesa.git cd /home/mesa git checkout mesa-19.0.8
下载编译依赖包apt build-dep mesa apt install libomxil-bellagio-dev libva-dev llvm-7 llvm-7-dev python-mako
执行autogen.sh生成Makefile./autogen.sh --enable-texture-float --with-gallium-drivers=radeonsi,swrast --with-dri-drivers=radeon,swrast --with-platforms=drm,x11 --enable-glx-tls --enable-shared-glapi --enable-dri3 --enable-lmsensors --enable-gbm --enable-xa --enable-osmesa --enable-vdpau --enable-nine --enable-omx-bellagio --enable-va --with-llvm-prefix=/usr/lib/llvm-7 --enable-llvm --target=aarch64-linux-gnu CFLAGS="-fsigned-char -O2" CPPFLAGS="-fsigned-char -O2" CXXFLAGS="-fsigned-char -O2" --enable-autotools
make -j make install
cat /etc/ld.so.conf /usr/local/lib include /etc/ld.so.conf.d/*.conf
ldconfig
Xorg :0 -config /etc/X11/xorg.conf
NVIDIA显卡
安装显卡驱动
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux_sbsa.run
sudo sh cuda_11.6.2_510.47.03_linux_sbsa.run
运行如下命令创建Xconfig文件
sudo nvidia-xconfig
Xorg :0 -config /etc/X11/xorg.conf
cp /home/robox-master/binaryFiles/ /home/robox-master
注意:robox脚本里的docker run命令中的镜像名称需要改成本地自己注册的名称export DISPLAY=:0
注意:
./robox -v start 1
#docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b77d371b402c android:robox_with_exagear "/anbox-init.sh" 13 seconds ago Up 11 seconds 0.0.0.0:5561->5555/tcp instance2 77b2c041315f android:robox_with_exagear "/anbox-init.sh" 2 hours ago Up 2 hours 0.0.0.0:5559->5555/tcp instance1
#ps -aux | grep session root 4330 0.0 0.0 9332 6160 ? Ss Oct22 0:01 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile -- systemd-activation --syslog-only root 172678 22.1 0.0 6433328 250472 pts/8 Sl 19:51 25:38 anbox session-manager --run-multiple=instance1 --standalone -- experimental --single-window --gles-driver=translator --window-size=720,1280 root 215155 1.4 0.0 5196228 185688 pts/8 Sl 21:46 0:01 anbox session-manager --run-multiple=instance2 --standalone -- experimental --single-window --gles-driver=translator --window-size=720,1280
#docker exec -it instance1 sh 77b2c041315f:/ # getprop | grep sys.boot.completed [sys.boot_completed]: [1]
sys.boot.completed显示为1,标识安卓启动完毕
使用scrcpy远程访问安卓实例。Scrcpy是一款开源免费的安卓投屏控制软件,支持在PC、Mac、linux上运行。可参考下面链接安装: https://github.com/Genymobile/scrcpy/blob/master/README.zh-Hans.md使用方法:
adb连接到安卓实例
adb connect serverip:android_instance_port
使用scrcpy远程访问安卓实例
scrcpy -s serverip:android_instance_port
基于以上步骤可以在Arm服务器上快速构建安卓云服务,终端用户可以在手机、电脑等设备上远程访问服务器上的安卓实例,并按需求安装、运行标准的安卓应用程序和游戏,运行效果如下图。
原文标题:技术分享 | 基于Arm服务器的安卓云容器方案构建方法
文章出处:【微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !