在 AVD 模拟器上安装 Magisk (Android 11)
2021-06-16 / 猫村 あおい 🍭

折腾一下喵。
本文基于 Magisk 版本 v23.0

打开模拟器镜像目录找到 ramdisk.img 这就是要 patch 的东西,一看是个 gzip ,解压后是个 cpio archive

按照刷机的记忆,定位 patch ramdisk 的脚本位置。

https://github.com/topjohnwu/Magisk/blob/66cc9bc545585c5d6e5833fdb55964c9b0385f43/scripts/boot_patch.sh#L142

那就按照脚本来干喵~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
./magiskboot compress=xz magisk32 magisk32.xz
./magiskboot compress=xz magisk64 magisk64.xz

KEEPVERITY=false
RECOVERYMODE=false
KEEPFORCEENCRYPT=true
export KEEPVERITY
export KEEPFORCEENCRYPT

echo "KEEPVERITY=$KEEPVERITY" > config
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
echo "RECOVERYMODE=$RECOVERYMODE" >> config

./magiskboot cpio ramdisk.cpio \
"add 0750 init magiskinit" \
"mkdir 0750 overlay.d" \
"mkdir 0750 overlay.d/sbin" \
"add 0644 overlay.d/sbin/magisk32.xz magisk32.xz" \
"add 0644 overlay.d/sbin/magisk64.xz magisk64.xz" \
"patch" \
"backup ramdisk.cpio.orig" \
"mkdir 000 .backup" \
"add 000 .backup/.magisk config"

./libbusybox.so gzip ramdisk.cpio
mv ramdisk.cpio.gz ramdisk.img

大功告成?我记得在 Android 11 以前这样干没问题。

然而到了 Android 11 就不能启动了,赶紧抓个 log

喵喵喵怎么 ramdisk 少了一堆玩意,,,

手动解包才发现这个 cpio 是两个 cpio 文件合并的。 屑 Google 又在搞什么喵喵?

magiskboot 不支持完整读取,而且又不报错,坏喵。

不关事的链接喵

修复 cpio 文件

思路是分别解包再打包。

cpio 文件的结尾为固定 magic TRAILER!!!

所以用二进制编辑器搜索,发现两个 magic ,说明这个文件为两个 cpio 连接而成。

记录下第二个 cpio 的偏移,如 2159360

分离

1
2
3
4
5
mkdir patch-cpio
cd patch-cpio

dd if=ramdisk.cpio of=ramdisk.1 bs=1 count=2159360
dd if=ramdisk.cpio of=ramdisk.2 bs=1 skip=2159360

解包,打包(涉及到文件权限这段要用 root 运行喵)

1
2
3
4
5
6
7
mkdir unpack
cd unpack

../../libbusybox.so cpio -i < ../ramdisk.1
../../libbusybox.so cpio -i < ../ramdisk.2

find . | ../../libbusybox.so cpio -H newc -o > ../ramdisk.cpio.fixed

修复 backup init

于是拿这个 .fixed 去 magiskboot patch 就好了?然而还是开不了机。。。

看 log 发现是缺少 /.backup/init

这个文件就是原来 init 的备份,一般 magiskboot patch 都会自动备份但是这次没有。

那就手动加上喵。

1
2
加上这句:
"add 0750 .backup/init init" \

然后就能开机了喵。

提示

  1. 抓 kernel log
1
2
cd sdk/emulator
LD_LIBRARY_PATH=$PWD/lib64:$PWD/lib64/qt/lib ./qemu/linux-x86_64/qemu-system-x86_64 -avd 喵 -show-kernel
  1. 不要使用 GNU 的 cpio gzip 等工具,必须用 magisk 带的 busybox 才能保证格式正确。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 许可协议。
本文链接:
https://nekoquq.github.io/posts/0007.html