最近做项目手里有点闲钱,想着整一个性能更好的设备玩,看了 https://hqshi.cn/info/ops/orange-pi-5-plus 之后买了 OrangePi 5 Plus ,最开始我想要折腾一下 Redroid
出现问题
有两种内核,Linux5.10 和 Linux6.1 ,前者根据文章应该是直接可以使用 Redroid 的,但是我喜欢新的内核,直接尝试启动不行,logcat简单看看,我要尝试适配一下。
解决问题
解决问题的过程复杂又曲折,时间跨度也长,记不起来之前怎么样了,干脆直接写下记录过的过程。
肯定是要重新编译内核的,binder_linux 、ashmem_linux 这两个模块是必要的,我们可以参考 OrangePi 给出的文档,通过下载 OrangePi build Tools 来进行编译。你也可以通过使用我修改的版本:https://github.com/SnowSwordScholar/orangepi-build ,在这个版本中,我添加了给内核命名添加后缀的办法,并且已经配置好了Kernel。你也可以直接安装我编译好的内核
如果你希望使用官方的工具,可以通过以下方法来自行配置Kernel.通过修改 external/config/kernel/linux-rockchip-rk3588-current.config ,加上对应配置:
添加以下内容:
CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_BINDERFS=y CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" CONFIG_KPROBES=y # Kernel 6.1 并无 CONFIG_ASHMEM 选项 CONFIG_PSI=y #解决 lowmemorykiller: Kernel does not support memory pressure events or in-kernel low memory killer CONFIG_NETLINK_DIAG=y # 网络问题 CONFIG_INET_DIAG=y CONFIG_TCP_CONG_ADVANCED=y CONFIG_NFT_REJECT_NETDEV=y
请注意,这些模块建议直接编译进内核(选择 y 而不是 m ),这样避免每次启动都需要加载一遍或者需要写入开机加载模块的名单。(在容器里加载模块总是报错)(我印象里还有几个选项需要由原来的 m 修改为 y ,但是想不起来是哪些了,你可以看我上面那个项目的提交记录)
按照香橙派的文档只对 Kernel 进行编译,安装编译后的文件之后,因为 6.1 内核中没有 ashmem_linux 选项,我决定通过安装此 https://github.com/choff/anbox-modules 模块来进行实现(据说有一个代替的模块,并且 Redroid 有对应的参数,可惜我没找到此参数)

之后继续启动,logcat,我发现总是出现 Iptables 错误,查找 Issue 之后,我发现还是有(中间得到一个注意事项:不要尝试 Host 模式,否则宿主机网络会混乱),我发现是模块的问题,在修改了网络的内核选项后(已经加到上面那里了),依然有模块缺失,是 xt_quota2 ,内核中没有相关配置,我找到 xtables-addons ,经过 AI 修改不适用的代码之后,编译进内核中
# 从我修改的分支 clone git clone https://github.com/SnowSwordScholar/xtables-addons # 或者从原分支 clone 之后对代码进行修改 git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons sudo apt-get install libtool pkg-config libxtables-dev autoconf automake cd xtables-addons ./autogen.sh ./configure make sudo make install sudo depmod
你还需要手动加载或者写入 sudo nano /etc/modules-load.d/iptables.conf 以下模块名称
iptable_nat xt_owner xt_quota2 xt_TCPMSS xt_NFLOG xt_u32 xt_bpf xt_mark xt_connmark xt_policy xt_state xt_conntrack fuse mali
之后便可以正常启动 redroid:12.0.0-latest
附一份可以启动的 Docker-compose ,一部分配置来自 空桑
services: redroid: image: redroid/redroid:12.0.0-latest container_name: redroid privileged: true #network_mode: host #restart: always #tty: true #stdin_open: true volumes: - ./data:/data - /dev/mali0:/dev/mali0 #- /lib/modules:/lib/modules:ro - /lib/modules/6.1.43-rockchip-rk3588-uulin:/lib/modules/6.1.43-rockchip-rk3588-uulin:ro ports: - 15555:5555 command: #- androidboot.redroid_gpu_mode=mali - androidboot.redroid_height=720 - androidboot.redroid_width=1280 - androidboot.redroid_dpi=240 - androidboot.redroid_net_ndns=1 - androidboot.redroid_net_dns1=119.29.29.29


如果遇到不能上网的情况,那就
docker exec -it redroid sh ip route add default via 172.18.0.1 dev eth0
目前我的 GPU 驱动并不能正常使用,等我琢磨透了再进行更新
Comments NOTHING