首页
社区
课程
招聘
[原创] 在 ROCK 5B 开发板上使用 Docker 运行 Android
2023-12-14 17:37 7959

[原创] 在 ROCK 5B 开发板上使用 Docker 运行 Android

2023-12-14 17:37
7959

在 ROCK 5B 开发板上使用 Docker 运行 Android

年初时购入了一个 ROCK 5B,折腾 Android 逆向分析,有了一些成果后,自己 DIY 了更好的逆向分析平台(ROCK 5B 已经卖掉了)。

整理文档时,翻出来当时的记录文档,论坛里也没有看到有相关的帖子,现在发出来希望对大家有帮助。

目录

环境:官方 Ubuntu 20.04 镜像

在 ROCK 5B 构建适用 Android 的 Linux 内核

懒得弄得话,可以直接用我以前构建的
https://bbs.kanxue.com/thread-277387.htm

参照 https://wiki.radxa.com/Rock5/guide/build-kernel-on-5b
完成:

  • Install essential pacakges
    1
    2
    $ sudo apt-get update
    $ sudo apt-get install -y git  device-tree-compiler libncurses5 libncurses5-dev build-essential libssl-dev mtools bc python dosfstools bison flex rsync u-boot-tools make
  • Get the source code
    1
    2
    3
    4
    $ mkdir ~/rk3588-sdk && cd ~/rk3588-sdk
    $ git clone -b linux-5.10-gen-rkr3.4 https://github.com/radxa/kernel.git
    $ git clone -b master https://github.com/radxa/rkbin.git
    $ git clone -b debian https://github.com/radxa/build.git

检出 rock5b 的内核配置

1
2
3
cd ~/rk3588-sdk
cd kernel
make rockchip_linux_defconfig


进入配置 GUI

1
make menuconfig

检查以下配置选项,没有勾选的就勾上。配置 menuconfig 中,按 '/' 键可以搜索。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
 
CONFIG_STAGING=y
CONFIG_ASHMEM=y
 
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
 
CONFIG_PSI=y
 
CONFIG_FUSE_FS=y
 
CONFIG_ROCKCHIP_EFUSE=y
 
CONFIG_COMPAT=y
CONFIG_COMPAT_32BIT_TIME=y
 
CONFIG_ARM64_4K_PAGES=y

懒得搞的话,可以打开 kernel 目录中的 .config 文件,将上面的配置粘贴进去。

保存配置退出配置界面后,设置为默认编译配置。

1
2
make savedefconfig
cp defconfig arch/arm64/configs/rockchip_linux_defconfig

开始编译

1
2
cd ~/rk3588-sdk
./build/pack-kernel.sh -d rockchip_linux_defconfig -r 99

构建完成后(rock5b 上约 20分钟),在 目录 ~/rk3588-sdk/out/packages 中会存在 内核 deb 包。

如果在构建过程自动重启,一般是电源功率过低,换个 45W 以上电源就好。

安装内核

安装内核 deb 包

安装在上一步中生成的 deb 包

1
2
sudo dpkg -i out/packages/linux-headers-5.10.110-99-rockchip-g9fd61a9a9912_5.10.110-99-rockchip_arm64.deb
sudo dpkg -i out/packages/linux-image-5.10.110-99-rockchip-g9fd61a9a9912_5.10.110-99-rockchip_arm64.deb

激活新内核

编辑文件 /boot/extlinux/extlinux.conf

设置默认启动内核

1
2
3
4
5
6
7
8
9
10
11
12
13
timeout 10
menu title select kernel
 
# 添加和设置默认启动内核
default kernel-5.10.110-99-rockchip-g9fd61a9a9912
 
# 这个是新安装的内核
label kernel-5.10.110-99-rockchip-g9fd61a9a9912
# ...
 
# 旧内核
label kernel-5.10.110-34-rockchip-gca15bbe36e6c
# ...

重启系统

启动 Android 镜像

安装 docker

1
sudo apt install docker.io

启动 Android 容器

三种镜像

  • firefly
    需要单独导入,略麻烦,文档 容器虚拟安卓
  • redroid
    没驱动,还需要折腾
  • myt
    开箱即用

用 myt 的镜像进行测试

1
2
3
4
5
6
7
8
9
sudo docker run -itd --rm --privileged \
  --pull always \
  -v ~/android_data:/data \
  -v /dev/net/tun:/dev/tun \
  -v /dev/mali0:/dev/mali0 \
  -p 5501:5555 \
  --name dobox \
  registry.cn-hangzhou.aliyuncs.com/whsyf/dobox:rk3588-202303011
  

其中 ~/android_data 目录如果不存在的话,需要自己手动创建,或者换到一个已存在的目录
-p 5501:5555 是在主机上映射 5501 为容器的 ADB 端口

连接 Android

Windows 可以使用 QtScrcpy 进行连接
https://github.com/barry-ran/QtScrcpy

假设 ROCK 5B 的局域网地址是 192.168.1.13,ADB 命令窗口输入 connect 192.168.1.13:5501,执行。再双击连接即可。

其他

理论上 RK3588 和 RK3588S 都适用,自己搞定内核就行。

由于容器是使用 privileged 特权模式启动的,就不要手贱在 adb shell 里面输入 reboot ,这会让主机也重启。

如果有坛友知道如何在非特权模式下启动,麻烦告知,谢谢。


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞4
打赏
分享
最新回复 (9)
雪    币: 227
活跃值: (464)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_Deity 2023-12-14 17:56
2
0
感谢分享
雪    币: 1446
活跃值: (1847)
能力值: ( LV5,RANK:61 )
在线值:
发帖
回帖
粉丝
陈可牛 1 2023-12-14 18:59
3
0
正准备捣鼓,感谢分享
雪    币: 218
活跃值: (277)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
`铭浅. 2023-12-28 19:23
4
0
大佬,我创建了redroid虚拟机,然后adb连接一直offline是怎么回事,设置虚拟机的哪个可以不用adb tcpip 5555呢。感谢回答
雪    币: 1112
活跃值: (2634)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Amun 2023-12-31 13:48
5
0
`铭浅. 大佬,我创建了redroid虚拟机,然后adb连接一直offline是怎么回事,设置虚拟机的哪个可以不用adb tcpip 5555呢。感谢回答
1. 可以检查一下是哪个端口映射到了 5555 端口
2. 用 docker exec 进入容器里,检查是否已经正常启动
雪    币: 218
活跃值: (277)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
`铭浅. 2024-1-2 10:08
6
0
谢谢,找到原因了,是因为没有执行modprobe ashmem_linux,导致的问题
雪    币: 366
活跃值: (1080)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
woaiziyou 2024-1-2 10:31
7
0
这板子可以开多少台安卓环境
雪    币: 1414
活跃值: (4168)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2024-1-2 10:41
8
0
woaiziyou 这板子可以开多少台安卓环境
同问。16G内存可以开多少个android。
雪    币: 1112
活跃值: (2634)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Amun 2024-1-3 15:33
9
0
IamHuskar 同问。16G内存可以开多少个android。
空载 500~700 MB 一个 Android 系统,具体看业务负载了。如果是运行游戏,CPU 才是瓶颈。
雪    币: 1414
活跃值: (4168)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2024-1-3 16:20
10
0
Amun 空载 500~700 MB 一个 Android 系统,具体看业务负载了。如果是运行游戏,CPU 才是瓶颈。
游戏如果走mali gpu 可能还好。cpu确实稍微差点。不过已经是不错的旗舰款芯片了
游客
登录 | 注册 方可回帖
返回