接上文,在此之后研究起了如何大改文石系统,在咸鱼上挂了个刷机服务。
而文石的系统及Recovery均有反回滚设计,就算你拿到了上几个版本的upx,解密为update.zip也并没有用。
什么是防回滚保护?
防回滚保护是 Android 8.0 新增的一项功能,目的是为防止将系统回退到有安全漏洞的版本。
当升级有防回滚保护的系统版本,如果之后降级到未被允许的旧版本,手机将无法启动系统,并且不能通过常规刷机方式恢复。
按照 Android 设备完整性要求,运行 Android 9.0 及以上版本的手机都应加入防回滚保护。
^ 注:文石并没有严格执行以上策略:所有qcom均未熔丝/BL并未上锁,只是Fastboot被阉割了几项功能,且recovery做了反回滚限制。
(那GMS就约等于Play Integrity一项也没过,何意之有)
因此研究起如何编译第三方的Recovery。
鉴于没有内核源码树及设备树,从Poke5S中用Twrpdtgen提取出了设备树。
注:twrpdtgen需要clone整个AIK,网络不佳情况下会AIK Extraction Failed,解决方案是整个Github Actions等overseas env。
于是借鉴了一点Google出来的资料开始编译。
- 装依赖(Ubuntu-Based)
mkdir ~/workdir
cd ~/workdir
sudo apt install git aria2 -y
git clone https://gitlab.com/OrangeFox/misc/scripts
cd scripts
sudo bash setup/android_build_env.sh
sudo bash setup/install_android_sdk.sh
- 同步Twrp/OrangeFox源码树
mkdir -p ~/workdir/OrangeFox_sync
cd ~/workdir/OrangeFox_sync
git clone https://gitlab.com/OrangeFox/sync.git
cd sync/
./orangefox_sync.sh --branch 12.1 --path ~/workdir/fox_12.1
- 默认源码树开编
cd ~/workdir/fox_12.1
git clone https://github.com/nekohashizuku2333333333/twrp_device_onyx_poke5s device/onyx/Poke5S
cd device/onyx/Poke5S/
source build/envsetup.sh
export LC_ALL="C"
lunch
mka adbd recoveryimage
以上仅为测试 编译多数不会通过
- 因为不通过编译所以第一次修改
修改设备树:
device/onyx/Poke5S/omni_Poke5S.mk:
将 "vendor/aosp/config/common.mk"改成"vendor/twrp/config/common.mk"
因为在Android 11+中PRODUCT_STATIC_BOOT_CONTROL_HAL被移除;
device/onyx/Poke5S/device.mk:
"PRODUCT_STATIC_BOOT_CONTROL_HAL := \
bootctrl.bengal \
libgptutils \
libz \
libcutils" 改成
"PRODUCT_PACKAGES += \
bootctrl.bengal \
libgptutils \
libz \
libcutils"
device/onyx/Poke5S/BoardConfig.mk:
"BOARD_USES_RECOVERY_AS_BOOT := false"改为true(否则不生成Recovery.img)
在其下加入:
"TW_BRIGHTNESS_PATH := "/sys/class/backlight/panel0-backlight/brightness"
TW_MAX_BRIGHTNESS := 255
TW_DEFAULT_BRIGHTNESS := 102
TW_INCLUDE_NTFS_3G := true
TW_HAS_EDL_MODE := true"
- 修改后编译可以通过。
但是很明显,问题很大:不显示,任何方式均无响应。
经查看recovery log得知:已经可以进入recovery,但是分区一个也没有挂载;同时图形完全无法初始化。
那么下一篇我们就来折腾一下其他的东西。
(未完结)