目的
anbox可以利用宿主机的硬件资源,对容器内的安卓系统图形进行硬件加速渲染并在宿主机上显示。用于测试验证anbox硬件加速渲染方案在x100笔记本和d2000pc机上是否可行以及其兼容性。
一、在飞腾笔记本(x100显卡)搭建anbox
拿到飞腾笔记本后,发现上面已经安装了binder和ashmem驱动,所以此步骤省略。如果没有安装,笔记本的内核是5.4版本,可参考下面链接进行安装。
https://github.com/anbox/anbox-modules 或https://github.com/choff/anbox-modules
1、下载anbox宿主机源码
git clone https://github.com/anbox/anbox.git --recurse-submodules |
2、安装编译依赖
sudo apt install build-essential cmake cmake-extras 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 libexpat1-dev libsystemd-dev libegl1-mesa-dev libgles2-mesa-dev libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev \ libprotobuf-dev libsdl2-dev libsdl2-image-dev lxc-dev pkg-config protobuf-compiler python3-minimal |
相关安装依赖报错解决办法,见下面的编译报错问题集。
3、编译
cd anbox mkdir build cd build/ cmake .. make -j8
3.1 编译报错问题集
问题1
/home/phytium/ptg/anbox/src/anbox/cmds/launch.h:24:10: fatal error: systemd/sd-bus.h: 没有那个文件或目录
24 | #include <systemd/sd-bus.h>
解决办法
需要安装libsystemd-dev包,sudo apt install libsystemd-dev
下列软件包有未满足的依赖关系:
libsystemd-dev : 依赖: libsystemd0 (= 245.4-4kylin3.11k14) 但是 245.4-4kylin3.11k30 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
phytium@phytium-d2000:~/ptg/download_debs$ apt search libsystemd0
正在排序... 完成
全文搜索... 完成
libsystemd-dev/10.1 245.4-4kylin3.11k14 arm64
systemd utility library - development files
libsystemd0/now 245.4-4kylin3.11k30 arm64 [已安装,本地]
systemd utility library
麒麟系统的包管理存在缺陷,libsystemd0和libsystemd-dev包版本不一致(两者同属一个项目出来的包,理应一致的)导致安装依赖冲突,apt install方式安装不上。
这里采用dpkg -i 强制安装,apt download libsystemd-dev && sudo dpkg -i libsystemd-dev_245.4-4kylin3.11k14_arm64.deb
问题2
/home/phytium/ptg/anbox/src/anbox/ui/splash_screen.h:23:10: fatal error: SDL2/SDL.h: 没有那个文件或目录
23 | #include <SDL2/SDL.h>
解决办法
需要安装libsdl2-dev
phytium@phytium-d2000:~/ptg/download_debs$ sudo apt install libsdl2-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
您也许需要运行“apt --fix-broken install”来修正上面的错误。
下列软件包有未满足的依赖关系:
libsdl2-dev : 依赖: libasound2-dev 但是它将不会被安装
依赖: libglu1-mesa-dev 但是它将不会被安装
依赖: libibus-1.0-dev 但是它将不会被安装
依赖: libpulse-dev 但是它将不会被安装
依赖: libsndio-dev 但是它将不会被安装
依赖: libxss-dev 但是它将不会被安装
依赖: libxt-dev 但是它将不会被安装
依赖: libxv-dev 但是它将不会被安装
依赖: libxxf86vm-dev 但是它将不会被安装
libsystemd-dev : 依赖: libsystemd0 (= 245.4-4kylin3.11k14) 但是 245.4-4kylin3.11k30 正要被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。
phytium@phytium-d2000:~/ptg/download_debs$ sudo apt install libpulse-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
您也许需要运行“apt --fix-broken install”来修正上面的错误。
下列软件包有未满足的依赖关系:
libpulse-dev : 依赖: libpulse0 (= 1:13.99.1-1kylin32) 但是 1:13.99.1-1kylin90 正要被安装
依赖: libpulse-mainloop-glib0 (= 1:13.99.1-1kylin32) 但是 1:13.99.1-1kylin90 正要被安装
libsystemd-dev : 依赖: libsystemd0 (= 245.4-4kylin3.11k14) 但是 245.4-4kylin3.11k30 正要被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。
phytium@phytium-d2000:~/ptg/download_debs$ apt search libpulse0
正在排序... 完成
全文搜索... 完成
libpulse0/now 1:13.99.1-1kylin90 arm64 [已安装,本地]
PulseAudio client libraries
phytium@phytium-d2000:~/ptg/download_debs$ apt search libpulse-dev
正在排序... 完成
全文搜索... 完成
libpulse-dev/10.1 1:13.99.1-1kylin32 arm64
PulseAudio client development headers and libraries
麒麟系统的包管理存在缺陷,libpulse0和libpulse-dev包版本不一致(两者同属一个项目出来的包,理应一致的)导致安装libpulse-dev依赖冲突,
而libsdl2-dev又依赖了libpulse-dev等各个开发包,从而导致libsdl2-dev也apt install方式安装不上。
这里采用dpkg -i 强制安装,apt download libsdl2-dev && sudo dpkg -i libsdl2-dev_2.0.10+dfsg1-3_arm64.deb
问题3
/home/phytium/ptg/anbox/src/anbox/ui/splash_screen.cpp:23:10: fatal error: SDL2/SDL_image.h: 没有那个文件或目录
23 | #include <SDL2/SDL_image.h>
解决办法
需要安装libsdl2-image-dev,采取同上的方式进行安装,apt download libsdl2-image-dev && sudo dpkg -i libsdl2-image-dev_2.0.5+dfsg1-2_arm64.deb
4、安装
sudo make install |
5、配置容器启动服务,使用anbox运行自己编译好的Android镜像
(1)创建好挂载目录:
datadir=$HOME/anbox-data mkdir -p $datadir/rootfs |
(2)将之前编译好的arm64版本的安卓系统镜像android.img 放在 /home/phytium/目录下。
(3)编写服务启动配置文件anbox-container-manager.service,文件内容如下:
[Unit] Description=Anbox Container Manager [Service] ExecStart=/usr/local/bin/anbox container-manager --daemon --privileged --android-image=/home/phytium/android.img --data-path=/home/phytium/anbox-data --container-network-gateway=192.168.250.1 --container-network-address=192.168.250.2 [Install] WantedBy=multi-user.target |
(4)将service文件放置系统目录
sudo cp anbox-container-manager.service /usr/lib/systemd/system/ |
(5)enable服务
sudo systemctl enable anbox-container-manager.service |
(6)启动anbox容器
sudo systemctl start anbox-container-manager.service |
后面重启系统时会自动启动anbox容器
6、配置appmanager主界面启动快捷方式 appmgr.desktop
文件内容如下:
[Desktop Entry] Name=Anbox Application Manager GenericName=Anbox Application Manager Version=1.0 Type=Application Icon=${HOME}/.config/gui/icon.png Exec=anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity Terminal=false |
将文件放置系统applications目录
sudo cp appmgr.desktop /usr/share/applications/ |
7、启动anbox应用管理界面
在启动栏点击Anbox Application Manager快捷图标,即可拉起anbox应用管理主界面。
二、在d2000 PC机上搭建anbox
在d2000 PC上安装anbox的流程与笔记本上是类似的。
问题1、d2000 PC机上没有安装binder和ashmem驱动,由于内核是5.15版本的,anbox-modules没有做好此内核版本的适配。这里安装了一下xdroid,将xdroid的binder驱动软链接过来,暂时先绕过了binder驱动问题。
问题2、d2000 PC机上安装anbox后,启动会报错:phytium anbox[10940]: Failed to start container: Failed to start container: Failed to set config item lxc.group.devices.deny
这是由于lxc容器版本太高(5.0.0)导致,将lxc版本降到4.0.2后,重新编译安装anbox,容器启动失败问题解决。
d2000 PC上anbox启动后画面
运行anbox内置应用‘Clock’时,amd显卡资源使用情况。
最终运行结果,在x100笔记本和d2000pc机上,anbox硬件加速渲染方案均跑通了,正常显示画面。
0 评论