编辑
2025-01-22
工作知识
0
请注意,本文编写于 135 天前,最后修改于 135 天前,其中某些信息可能已经过时。

目录

一、在系统上安装waydroid
二、根据lxc的要求构建内核
三、waydroid的安卓固件
四、启动waydroid
五、扩展

之前我们可以通过waydroid的官方image来实现通过软件渲染的方式运行waydroid,参考Waydroid预研,从而实现在linux上运行安卓程序,这次我们通过移植了panthor,可以通过官方的mesa进行渲染,这样我们根据外网社区的相关文章,同步验证waydroid在panthor的运行效果。可想而知的是,如果最新的waydroid想要运行在panthor上,安卓内部的mesa需要更新到24以上,这样waydroid是纯硬件渲染了。移植安卓mesa这个动作有人完成了,我们只需要拿到对应的固件即可,关于rk3588上使用panthor的文章可以参考RK3588关于panthor驱动的移植

一、在系统上安装waydroid

我们可以参照waydroid的官网,安装waydroid二进制,这样我们就不需要重编译waydroid源码,如下:

sudo apt install curl ca-certificates -y curl https://repo.waydro.id | sudo bash sudo apt install waydroid

此时我们的系统内可以安装好waydroid

二、根据lxc的要求构建内核

我们上层安装好waydroid后,需要根据lxc的配置打开对应的内核配置,我们需要运行命令lxc-checkconfig,如下

LXC version 5.0.0 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled newuidmap is not installed newgidmap is not installed Network namespace: enabled --- Control groups --- Cgroups: enabled Cgroup namespace: enabled Cgroup v1 mount points: Cgroup v2 mount points: /sys/fs/cgroup Cgroup v1 systemd controller: missing Cgroup v1 freezer controller: missing Cgroup ns_cgroup: required Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled, not loaded Macvlan: enabled, not loaded Vlan: enabled, not loaded Bridges: enabled, loaded Advanced netfilter: enabled, loaded CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, loaded CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded FUSE (for use with lxcfs): enabled, not loaded --- Checkpoint/Restore --- checkpoint restore: enabled CONFIG_FHANDLE: enabled CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled CONFIG_UNIX_DIAG: enabled CONFIG_INET_DIAG: enabled CONFIG_PACKET_DIAG: enabled CONFIG_NETLINK_DIAG: enabled File capabilities: Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

这里如果我们发现一些配置没打开,那么需要在内核中将配置打开。我们需要将其所有的特性功能打开。这里需要留意以下配置:

CONFIG_IPV6=y CONFIG_NF_CT_NETLINK=y CONFIG_PSI=y CONFIG_BLK_DEV_LOOP=y CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_BINDERFS=y CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"

我们可以关闭RK的特性配置如下:

# CONFIG_DRM_IGNORE_IOTCL_PERMIT is not set

至此,相关内核配置可以正常打开,我们编译内核即可

三、waydroid的安卓固件

我们要运行基于panthor的安卓固件,那么我们需要升级安卓的mesa包,我们可以自己编译mesa,也可以利用别人移植好的mesa仓库,替换编译,如下:

https://github.com/WillzenZou/android_external_mesa3d

如果我们只需要二进制,这里我是直接用二进制了,所以可以直接如下获取:

https://github.com/WillzenZou/armbian_fork_build/releases/download/willzen-armbian-24.5.0/2.waydroid-panthorv10-240416-v1.img.tar.gz

此时我们解压镜像如下:

tar xvzf 2.waydroid-panthorv10-240416-v1.img.tar.gz

然后将其拷贝到固件加载目录

cp -rf 2.waydroid-panthorv10-240416-v1.img/* /usr/share/waydroid-extra/images

最后初始化waydroid即可

waydroid init -f -i /usr/share/waydroid-extra/images

四、启动waydroid

我们根据官网的说明直接启动waydroid即可,如下

waydroid show-full-ui

如果启动存在问题,则可以如下查看日志

waydroid logcat

具体cmdline配置可以参考官网:

https://docs.waydro.id/usage/waydroid-command-line-options

至此,我们等一会儿就正常通过panthor启动waydroid,如下:

image.png

五、扩展

根据上面的信息,我们正常的通过panthor在linux设备上运行了安卓设备,这个不是我做这个事情的主要目的,因为如Waydroid预研,waydroid已经可以正常的通过软件渲染运行在麒麟系统上了,这次这个事情是通过硬件渲染的方式来试试waydroid。

这个事情的主要目的是,如果waydroid启动的openharmony,而linux是麒麟系统,那么我们可以使得openharmony通过容器的方式运行,基于麒麟v10上。要完成这个事情,我们还需要如下:

openharmony的gpu支持panthor,(目前仅支持panfrost) 麒麟系统支持的gpu支持panthor,(目前仅支持panfrost/legacy mali) openharmony的hdf和linux内核相互兼容 当然,也有疑问,为什么不直接通过panfrost来运行麒麟系统呢,这里主要原因是,openharmony的panfrost对应的mesa版本在22,而mesa在22上并不完善支持panfrost,我们的机器目前使用的是基于mesa23的panfrost,这个并不兼容,而且,openharmony的mesa的panfrost并不支持rk3588,所以panfrost只能作为openharmony的老旧方案,对应的panfrost版本在Linux上可能并不能工作(waydroid要求显卡显示方案和主机显示方案相同)。