香橙派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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容