跳到主要内容

Redroid部署

本篇为 x86_64 架构的 Linux 系统部署 Redroid 的教程。 使用天钡 R7-8745HS 处理器的迷你主机测试通过。

安装 Debian 13

这只是我自己常用的代码片段
apt update && NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive apt full-upgrade -y -o Dpkg::Options::="--force-confold" -o Dpkg::Options::="--force-confdef" \
&& apt update && apt install -y git git-lfs nano screen screenfetch htop btop net-tools zip unzip fastfetch aria2 jq lsof python3-pip \
&& apt autoremove -y \
&& python3 -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

编译并安装内核模块

# 查看内核版本
uname -r # 6.12.41+deb13-amd64

# 安装必要的源码和头文件
apt install linux-source-6.12
apt install linux-headers-$(uname -r)

# 解压源码并进入目录
cd /usr/src
tar -xvf linux-source-6.12.tar.xz
cd linux-source-6.12/

# 配置编译环境,复制当前内核的配置和符号表
cp /usr/src/linux-headers-$(uname -r)/Module.symvers .
cp /boot/config-`uname -r` .config
nano .config

在 .config 文件添加以下内容,也可以找到这部分并修改

CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y # 主要是这一行
CONFIG_ANDROID_BINDER_DEVICES="binder"

准备并编译内核模块

make modules_prepare

应该会输出一段,直接回车即可。

Compile also drivers which will not load (COMPILE_TEST) [N/y/?] n

Compile the kernel with warnings as errors (WERROR) [N/y/?] n

Local version - append to kernel release (LOCALVERSION) []

Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?] n

Build ID Salt (BUILD_SALT) [] (NEW)

# 编译模块
make M=drivers/android modules

# 将编译好的 .ko 文件复制到系统模块目录,更新依赖
cp drivers/android/binder_linux.ko /lib/modules/$(uname -r)/kernel/drivers/android/
depmod -a

加载模块

modprobe binder_linux
# 查看设备
ls /dev/bin* # /dev/binder
lsmod | grep -e binder_linux # 不需要安装 ashmem_linux

生成 Binder 设备

mkdir -p /dev/binderfs
mount -t binder binder /dev/binderfs
信息

每次启动均需要执行:

modprobe binder_linux
mkdir -p /dev/binderfs
mount -t binder binder /dev/binderfs

可以添加为服务:

/etc/systemd/system/mount-binderfs.service
[Unit]
Description=Mount binderfs after loading binder_linux
After=systemd-modules-load.service
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/usr/local/bin/mount_binderfs.sh
RemainAfterExit=true

[Install]
WantedBy=multi-user.target
/usr/local/bin/mount_binderfs.sh
#!/bin/bash
modprobe binder_linux
mkdir -p /dev/binderfs
mount -t binder binder /dev/binderfs

安装显卡驱动

添加 non-free-firmware 源。

nano /etc/apt/sources.list.d/debian.sources

添加如下这段,主要是复制 debian 源,在 Components 的 main 后加一个 non-free-firmware 。

Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian.list
Suites: trixie trixie-updates trixie-backports
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

安装驱动,并重启。

apt install firmware-amd-graphics libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers
reboot

查看设备

ls /dev/dri
cat /sys/kernel/debug/dri/*/name

安装 btop GPU 支持(可选)

apt install rocm-smi

安装 Redroid

警告

你需要有 Docker !

安装 ADB

apt install adb  # from android-sdk-platform-tools
services:
redroid-arknights:
image: erstt/redroid:12.0.0_houdini_MUMU
container_name: redroid-arknights
privileged: true
ports:
- "5630:5555"
volumes:
- redroid-arknights-data:/data
command: [
"androidboot.redroid_width=1080",
"androidboot.redroid_height=1920",
"androidboot.redroid_dpi=320",
"androidboot.redroid_gpu_mode=host",
"androidboot.redroid_fps=60",
"ro.enable.native.bridge.exec64=1",
"ro.dalvik.vm.native.bridge=libhoudini.so",
"ro.product.brand=samsung",
"ro.product.manufacturer=samsung",
"ro.product.model=SM-G998B",
"ro.product.name=p3sxxx",
"ro.product.device=p3s",
"ro.product.locale=zh-CN",
"ro.build.display.id=p3sxxx-user 13 TQ2B.230505.005.A1 jenkins08312143 release-keys",
"ro.build.fingerprint=samsung/p3sxxx/p3s:13/TQ2B.230505.005.A1/jenkins08312143:user/release-keys",
#"ro.build.characteristics=",
"ro.serialno=c9bg5bec5b98",
#"ro.hardware=exynos2100",
"ro.secure=1",
"ro.build.type=user",
"ro.build.id=TQ2B.230505.005.A1",
"ro.board.platform=universal2100_r",
]
stdin_open: true
tty: false
restart: unless-stopped
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G

volumes:
redroid-arknights-data:
driver: local