香橙派5plus上跑云手机方案一 redroid(带硬件加速)
首发地址:https://mp.weixin.qq.com/s/1e8er_amC94DTVCaNbSuUw
前言
折腾这玩意倒不是为了用来玩游戏啥的,只是想在逆向APP的时候少一点对手机的依赖。毕竟手机刷机步骤也挺烦,一不留神还容易变砖。
像一些对环境检测不严格的APP就可以在上面测试,也方便后面更改系统源码刷机。不过可惜的是无法自定义内核(redroid和Waydroid都是走的容器方案,和主机共享内核),想自定义内核只能用谷歌的cuttlefish或者avd,但是这些在arm上的支持很有限,可以运行但也是没有GPU加速,后面折腾下cuttlefish。
刷Ubuntu
香橙派刷Ubuntu的过程就不说了,有兴趣的看之前那篇文章:香橙派5plus从ssd启动Ubuntu。刷这个系统的话,运行redroid就不需要再安装配置啥了。不过,如果要用虚拟WIFI或者ebpf的话,还是得修改内核参数自己编译linux内核来实现,这个下篇文章具体说编译过程。
redroid
官方教程:https://github.com/remote-android/redroid-doc
检查必要条件
grep binder /proc/filesystems
grep ashmem /proc/misc
如果什么也没打印,则可能需要手动启动(我在一台安装Ubuntu的鲲鹏920的机器使用下面两个命令就可以了,这个机器虽然带的amd的显卡,但是也无法直接调用GPU)
sudo modprobe ashmem_linux
sudo modprobe binder_linux devices=binder,hwbinder,vndbinder
如果这两个命令报错或是没效果,可能是当前使用的linux内核没有开启这两个功能,则需要参考下面的仓库说明来安装支持的内核或是编译一个内核开启这两项功能:https://github.com/remote-android/redroid-modules
GPU加速
使用官方的docker镜像能启动,就是没有GPU加速,视频走的软解(cpu模拟),所以操作起来比较卡,在github的issue[1]里搜索rk3588可以看到几条GPU加速有关的评论。
但之前一直没人分享具体是怎么编译带GPU加速的镜像,评论里只能得出一个有点帮助的结论:从香橙派官方的SDK源码中获取到一些GPU加速相关的驱动文件,放到安卓源码内一起编译。或者直接将这些文件复制到docker容器中,重新启动容器。
这个结论太模糊了,肯定有很多坑,我就一直没试。直到有一个大佬发出了完整的编译过程和源码[2]:
教程写的很详细,按照步骤来编译一次就通过了。另外,还有大佬[3]在这个镜像的基础上增加了一个东西。
所以这里使用这位大佬的镜像[4],在这之前先看一下他提到的依赖(内核版本5.10.160和mali ddk g18p0):
那应该没问题,还提到要将mali_csffw.bin
文件拷贝到/lib/firmware/
下,我看了下这个文件夹下是有这个文件的
默认是链接的g15p0
,所以我们把这个软链接删了,创建一个新的链接到g18p0
。不过经过测试,用g15p0
版本redroid容器也能正常使用GPU。
测试刷视频也还可以,只能说不算卡吧,也不算流畅,毕竟现在手机配置已经很高了,比这个开发板流畅多了。
安装docker
sudo apt install docker.io -y
sudo usermod -aG docker $USER
sudo chmod a+rw /var/run/docker.sock
后两行命令是为了普通用户运行docker不需要加sudo。
启动容器
然后拉取镜像: docker pull cnflysky/redroid-rk3588:12.0.0-latest
。
docker run -d --privileged \
-p 5555:5555 \
-v ~/redroid-data:/data \
--name redroid \
cnflysky/redroid-rk3588:12.0.0-latest androidboot.redroid_height=1920 androidboot.redroid_width=1080 androidboot.redroid_magisk=1 androidboot.redroid_virt_wifi=1
然后用adb连接这个端口(adb connect 192.168.31.208:5555
)就能用QtScrcpy
看到这个容器的桌面了
先装个aida64看看显卡调用是否正常:
显卡渲染用的mali-G610那就没问题,而且刷新率也有60hz,如果走的软解刷新率只有15hz。
magisk
这个容器启动的时候带了一个androidboot.redroid_magisk=1
就是开启magisk,所以开机之后直接就能看到magisk是正常运行的,第一次点进去可能要你重启,使用docker restart redroid
重启后就能正常使用了。
lsposed
先在magisk里开启zygisk,然后用adb push命令将lsposed的安装包推到容器内。接着在Modules里安装,然后重启就能看到lsposed也是正常运行的。
随便安装一个xposed模块就能进去lsposed的设置界面,
gapps
官方就有教程[5]说明怎么编译带gapps的docker镜像,不过即使带了gapps也过不了谷歌的safetynet
验证,很多APP用不了。
issue里也有人问了,并没有解决方案:https://github.com/remote-android/redroid-doc/issues/378
。下载的镜像就有谷歌商店这些。
虚拟WIFI
看了issue,如果不设置虚拟WIFI,有些软件即使在有网的情况也会认定没有网络,比如QQ。因为它们只检测WIFI和流量,这两个在docker容器里都是没有的。但是我测试发现,有虚拟WIFI很多软件会显示没网,没开虚拟WIFI就正常联网,所以建议别开,知道有这么个东西就行了。
所以需要给容器里弄一个虚拟WIFI,需要内核支持[6]
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
切换为ip6tables-legacy
后,docker需要重启服务sudo systemctl restart docker
,重启机器都没用,会导致容器没网。
而安装的这个系统内核没有开启这个参数,zcat /proc/config.gz | grep CONFIG_MAC80211_HWSIM
github提供的内核代码编译起来很简单,基本一步到位就能编译,但可惜的是没有提供修改内核参数的选项,并且当你修改了内核配置文件时,在编译的时候它又会改回来。
折腾了几天,把issue里的问题都翻遍了也没有找到答案,无奈只能自己去看编译脚本,这个具体的过程放到下一篇文章来说,这里提供编译好的内核。
更新内核
内核deb包下载地址,系统用的Ubuntu22[7]:https://www.123pan.com/s/ihEKVv-TbOx.html
提取码: AZ3A
。除了上面那个参数,我还添加的ebpf相关的参数,这个后面再说。
先用uname -a
查看下当前的内核信息
首先把编译好的内核文件传到机器上,然后运行sudo dpkg -i *.deb
,一共有五个deb文件,第一个是构建信息,可以不安装。
接着使用sudo reboot
重启,在看内核信息的时间。
内核参数也是正常开启:
坑1
更新完内核重启后,原先创建的容器没网了,只有后面创建的容器才能正常上网。最开始我还以为是内核有问题,还得我又把系统刷了一遍,内核重新编译了一遍。
坑2
虽然有网,但是b站视频刷不出来,只能刷新首页,浏览器也访问不了网页。(注意:要先去设置里连接虚拟WIFI才有网)
根据这个里面的说明:https://github.com/CNflysky/redroid-rk3588/issues/2
保证只有无线连接?虽然我没理解什么意思,难道是只能由一个路由,看ip route
默认是有两个路由的
第二个是虚拟WIFI,那要不我把第一个删了试试: ip route del 192.168.200.0/24 dev radio0 proto kernel scope link src 192.168.200.2
发现有时候有网,视频能播放出来,大部分时候都很卡,要一些时间才能加载出视频来,但是刷新首页又很快,加载评论也很快。改dns也没用,后面再试试其他软件会不会也是这样。
vpn
可以参考:https://github.com/CNflysky/redroid-rk3588/issues/5
,我就不试了。看redroid的说明,启动的时候也可以指定代理。如果全局设置vpn的话,adb可能会断开连接。
音频
可能会失败,多试几次就可以了
引用链接
- [1]
https://github.com/remote-android/redroid-doc/issues?q=rk3588
- [2]
https://github.com/redroid-rockchip
- [3]
https://blog.csdn.net/CNflysky/article/details/136452455
- [4]
https://github.com/CNflysky/redroid-rk3588
- [5]
https://github.com/remote-android/redroid-doc/blob/master/android-builder-docker/README.md
- [6]
https://github.com/redroid-rockchip/vendor_redroid_ext/tree/master/wifi
- [7]
https://github.com/Joshua-Riek/ubuntu-rockchip/releases
本文由博客一文多发平台 OpenWrite 发布!