Android 新手机解锁 BootLoader 后没有刷机包可玩? 试试 GSI 和 GKI 吧! 知识回顾Android 分区架构还记得 Android 7 及以前, Android 系统的分区还很少, 如 system,cache,boot,recovery.
而随着 Android 架构的不断演进, Android 系统的分区不断细分.
system分区,因Treble项目解决Android大版本碎片化问题,拆分出vendor,并为定制化拆分出 product,system_ext等.
boot分区,因GKI项目解决内核碎片化问题,拆分ko等硬件文件到vendor_boot,拆分ramdisk到init_boot. GSIGoogle 为解决设备厂商 Android 大版本升级慢导致的碎片化等问题, 从 Android 8 开始 启用 Treble 架构, 将 vendor 与 system 解耦, 新增 vendor 分区 存放 HAL 等设备硬件相关文件, system(含 system_ext/product ) 存放Android系统通用的文件.
vendor 只 依赖 system 中对应版本的 vndk 库(Vendor Native Development Kit), 所以system 可实现独立升级. GKI类似 GSI, Google 为解决 Android 设备 Linux 内核的碎片化导致安全漏洞得不到及时修复等问题.
从 Android 11 + 5.4 版本 Linux 内核 开始 GKI 1.0, 确立基本架构, 新增 vendor_boot 分区存放 ko 等设备硬件相关文件, boot 分区仅存放通用内核(GKI), GKI 1.0设备只需要通过GKI测试.
从 Android 12 + 5.10 版本Linux 内核 开始 GKI 2.0, 出厂搭载 GKI.
从 Android 13 开始, boot 中的 ramdisk 进一步被拆分, 存放到新增的 init_boot 分区. 如何玩 GSI上面已经介绍过, system 可独立升级. 那我们下载一个可以用的 system.img, 刷进system, 不就…
是的,就是这么简单.当然前提是设备解锁 BootLoader. DSU(Dynamic System Update)Android 提供了 DSU(Dynamic System Update)功能,
进入开发者选项,点击DSU Loader,然后点希望使用的版本,系统自动下载,
下载\安装完成之后,下拉通知栏点击重启,即可. 刷机不过瘾?那就直接刷(刷机注意备份数据不用我多说吧): 下载 system.img
从地址下载到包(可能需要解压)得到system.img. 重启到刷机模式
非super分区的设备重启到bootloader模式:
adb reboot bootloader
super分区的设备重启的fastbootd模式:
adb reboot fastboot 开刷:
fastboot flash system system.img 恢复出厂:
fastboot -w
部分设备可能异常,可以尝试进入 recovery 执行恢复出厂设置. 重启, 理论上就能开机咯.
fastboot reboot
Android 官方GSI三方 GSIGSI 移植移植注意事项- 分区:
如果把product\system_ext都打包到system.img,则需要新增文件[color=var(--link-color)]etc/init/config/skip_mount.cfg跳过挂载设备上的product\system_ext分区. - apex:
ro.apex.updatable属性控制挂载apex文件(true)还是直接使用apex解压的目录(false).
GKI既然 boot 分区可以独立升级,那我们有很多玩法:
比如可以升级 Google 新版 GKI, 修改并编译内核,加入新功能… 查找设备对应的内核版本刷入方法:- 重启到fastboot模式:
adb reboot bootloader - 直接开刷:
fastboot flash boot boot-xxx.img - 重启啦:
fastboot reboot
GKI 下载地址Google 官方GKI注意事项注意区分压缩格式,我手上的设备使用的是gz压缩. http://wuxianlin.com/2023/02/10/android-gsi-and-gki/ |