我的编程空间,编程开发者的网络收藏夹
学习永远不晚

记一次在OrangePiZero2(香橙派zero 2)上部署Redroid(云手机)的过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

记一次在OrangePiZero2(香橙派zero 2)上部署Redroid(云手机)的过程

一句废话

这次换一种写作风格,尝试一下轻松的行文方式。

起因

很久以前看见有群友讨论关于docker部署Redroid,拿来挂机玩游戏一类的。当时听了感觉很有意思,后面粗浅地在zero2上部署了一下,容器虽然是跑起来了,但是scrcpy连接总是黑屏,后来我试着帮助一个群友部署,也部署失败了。最近又想起来这回事,所以决定再试一试。下面就说说我的尝试过程。

Step -1: 系统环境说明

我使用的系统是官方的5.16内核的系统。4.9内核的系统是跑不起来的,这点需要注意一下。

Step 0: 我不想读那么多废话,只想能跑起来,怎么办?

这里我把编译好的内核和模块放上来,链接和使用方法如下:
123盘链接
下载之后:

unzip opi_zero2_kernel_redroid.zip sudo mv 5.16.17+ /lib/modulessudo mv uInitrd-5.16.17+ vmlinuz-5.16.17+ /bootcd bootsudo rm -rf Image uInitrdsudo ln -s vmlinuz-5.16.17+ Imagesudo ln -s uInitrd-5.16.17+ uInitrdreboot

重启完成后:

sudo apt install docker.iosudo docker pull redroid/redroid:11.0.0-arm64sudo docker run -itd --privileged -v ~/data11:/data -p 5555:5555 --name redroid11 redroid/redroid:11.0.0-arm64 androidboot.use_memfd=1 androidboot.redroid_gpu_mode=guest

这样就部署好了。连接方法见文末。

Step 1: 当然是好好阅读Readme.md

Redroid(remote android)是一种AIC(Android in Cloud),能够便捷的部署很多个Android容器,非常适合于云游戏等应用…(以上废话,一个词总结:云手机)。
项目地址:GitHub
通过仔细研读这篇readme发现,这个小玩意,需要两个内核模块支持:ashmem(注:主线内核在5.18 drop了这个模块,官方的替代方案是memfd,而且redroid也提供了androidboot.use_memfd=1来启用memfd支持,所以理论上可以不编译这个模块,不过这里稳妥起见,还是编译进去了)binder。虽然作者也提供了redroid_modules库来进行树外模块的安装,但是我的内核版本太高了(5.16.17),编译过不了,于是只能通过自定义内核的方式了。

Step 2: 自定义内核,开搓!

先去香橙派官方搞内核源码:GitHub
打开看了看,我选择了orange-pi-5.16-sunxi64分支。
这个时候,我才想起来,手上没有服务器给我编译,只能在本机上进行编译,又想了想4颗a53孱弱的性能…只能忍忍了。

git clone -b orange-pi-5.16-sunxi64 https://github.com/orangepi-xunlong/linux-orangepi

由于众所周知的原因,克隆过程又花了几十分钟,心里一万只羊驼奔腾而过…
随后,把系统本来就带的config搞过去:

cd linux-orangepicp /boot/config-5.16.17-sun50iw9 ./.config

搞好之后,打开内核配置界面:

make menuconfig

打开之后,Device Drivers -> Android -> Android Drivers勾上,弹出来binder ipc driver勾上,binderfs filesystem也勾上,这样binder模块就编译进去了。然后回到上一级,去Staging Drivers里面,进入Android,把Enable the Anonymous Shared Memory Subsystem也勾上,这样ashmem也搞定了。随后开始编译:

make -j8

随后开始漫长的等待…
大概5个小时之后,编译结束了,先把模块安装下,然后搓个initrd镜像出来:

sudo make modules_install -j8sudo mkinitramfs 5.16.17+ -o initrd.imgmkimage -A arm64 -T ramdisk -C none -n uInitrd -d initrd.img uInitrd

然后把内核和initrd镜像搞到/boot目录下面:

cd /bootsudo cp ~/linux-orangepi/uInitrd ./uInitrd-5.16.17+sudo cp ~/linux-orangepi/arch/arm64/boot/Image ./vmlinuz-5.16.17+

搞好之后,ln一下,让系统重启时使用新编译的内核:

sudo rm -rf Image uInitrdsudo ln -s vmlinuz-5.16.17+ Imagesudo ln -s uInitrd-5.16.17+ uInitrd

然后重启就行了。

Step 3:没有docker怎么玩?

答案是装一个:

sudo apt install docker.io

随后,搞个Android13的镜像试试水:

sudo docker pull redroid/redroid:13.0.0-arm64

接下来进入下一个环节:Debug(笑)。

Step 3.1: Debug

对照官方文档,跑个容器试下水:

sudo docker run -itd --privileged -v ~/data13:/data -p 5555:5555 --name redroid13 redroid/redroid:13.0.0-arm64 androidboot.use_memfd=1docker ps -a

OK,容器确实run起来了,但是adb连接提示offline。没辙,只能启动logcat看看What’s happening:

sudo docker exec redroid13 logcat

不看不知道,一看吓一跳啊:

#假装这里有log,但是当时的log我怎么可能还留着嘛!#反正就是/vendor下面一个什么什么dri的so,报了segmentation fault。#dri是什么,是drm的东西,那就和GPU有关系了。#既然知道是GPU的毛病,那看文档就OK了。

根据以上log,可以知道,是GPU的问题(雾)。那怎么办呢,只能启用软件渲染咯:

sudo docker stop redroid13sudo docker rm redroid13sudo docker run -itd --pull always -v ~/data13:/data -p 5555:5555 --name redroid13 redroid/redroid:13.0.0-arm64 androidboot.use_memfd=1 androidboot.redroid_gpu_mode=guest

OK,重新搞起容器,连接还是报offline。麻麻的,还得看log:

sudo docker exec redroid13 dmesg#再次假装有log,大体就是lmkd的问题,可以看见#lmkd以每分钟30次的速度不断重启(大概每2秒一次)。

根据以上log(逃),可以得出是lmkd问题,去仓库issue搜一下,#293
在这里插入图片描述
tnnd,原来还要PSI支持,为什么不早说!(抓狂)在这里插入图片描述
这里怎么不写上PSI支持…麻了
General Setup -> CPU/Task time and stats accounting -> Pressure stall information tracking,勾上。然后又开始一次漫长的编译过程…
编译好之后,还是一样的步骤安装好内核。
搞定之后,还是一样启动容器,照样offline…掏出log仔细研读,也没研究出来个所以然,只能试试换个版本:

sudo docker pull redroid/redroid:11.0.0-arm64sudo docker run -itd --privileged -v ~/data11:/data -p 5555:5555 --name redroid11 redroid/redroid:11.0.0-arm64 androidboot.use_memfd=1 androidboot.redroid_gpu_mode=guest

run起来之后,adb连上,提示连接成功。哦豁,有搞头。

Step 4: 连接

装个scrcpy:

sudo apt install scrcpyadb connect localhost:5555scrcpy

在这里插入图片描述
Windows下scrcpy参考官方GitHub即可。

来源地址:https://blog.csdn.net/CNflysky/article/details/128751428

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

记一次在OrangePiZero2(香橙派zero 2)上部署Redroid(云手机)的过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

记一次在OrangePiZero2(香橙派zero 2)上部署Redroid(云手机)的过程

一句废话 这次换一种写作风格,尝试一下轻松的行文方式。 起因 很久以前看见有群友讨论关于docker部署Redroid,拿来挂机玩游戏一类的。当时听了感觉很有意思,后面粗浅地在zero2上部署了一下,容器虽然是跑起来了,但是scrcpy连接
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录