V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
andforce
V2EX  ›  Android

Android 12 分区签名如何搞?刷入 GSI 然后上锁 bootloader 无限重启

  •  
  •   andforce · 126 天前 · 3446 次点击
    这是一个创建于 126 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    公司之前采购了一批的设备,系统版本有 Android10 ,Android12 ,因为上游厂商倒闭,因此这批设备没有上游厂商支持了。(之前会让上游厂商在 ROM 中做一些简单的定制,比如去掉/隐藏某个设置入口之类的,总是很简单的修改)

    目前现状

    因为没有源码,所以我们要重新利用起来这批设备想到了 GSI 。

    因为有之前厂商提供的签名私钥,就是 xxx.pem ,用于解锁、加密 vbmeta 和 vbmeta_system,

    针对 Android10 ,我们目前已经完整实现了:

    1. 解锁
    2. 刷入从 aosp 源码编译得到的 system.img
    3. 使用私钥重新生成 vbmeta.img 和 vbmeta_system.img,并刷入
    4. 上锁

    这些都完美工作。

    遇到的问题

    但是在处理 Android 12 的时候,遇到了问题。

    1. 解锁 -正常
    2. 刷入从 aosp 源码编译得到的 system.img -正常
    3. 使用私钥重新生成 vbmeta.img 和 vbmeta_system.img,并刷入 -正常
    4. 上锁 --会导致无限重启,不上锁 bootloader 的话,系统一切都是正常的。

    从分区上来看,android12 比 android10 多了个 system_ext 分区,并且使用 lpunpack 解包 super.img 后,多了很多 ab

    -rw-r--r-- 1 ddd ddd    271257600 7 月  29 17:39 product_a.img
    -rw-r--r-- 1 ddd ddd            0 7 月  29 17:39 product_b.img
    -rw-r--r-- 1 ddd ddd    654548992 7 月  29 17:39 system_a.img
    -rw-r--r-- 1 ddd ddd            0 7 月  29 17:39 system_b.img
    -rw-r--r-- 1 ddd ddd    343097344 7 月  29 17:39 system_ext_a.img
    -rw-r--r-- 1 ddd ddd            0 7 月  29 17:39 system_ext_b.img
    -rw-r--r-- 1 ddd ddd    805707776 7 月  29 17:39 vendor_a.img
    -rw-r--r-- 1 ddd ddd            0 7 月  29 17:39 vendor_b.img
    -rw-r--r-- 1 ddd ddd     15613952 7 月  29 17:39 vendor_dlkm_a.img
    -rw-r--r-- 1 ddd ddd            0 7 月  29 17:39 vendor_dlkm_b.img 
    
    

    而 android10 的 super.img 中 只有 system.img product.img 和 vendor.img 这三个。

    我本身没有 bsp 或者 fwk 的开发经验,上面那些操作完全来自于网上搜索~

    目前针对 Android 12 基本上把网上能尝试的操作都试了,有点没有头绪了~

    6 条回复    2024-08-01 20:59:12 +08:00
    pagxir
        1
    pagxir  
       126 天前
    kernel 能加载么,不能就是签名不对。你可以试试不要解锁,然后生成 ota 包。进入 recovery 然后 sideload 生成的 ota 包
    andforce
        2
    andforce  
    OP
       126 天前
    @pagxir 现在用那个 xxx.pem 可以给 bootloader 解锁,签名方式与 android10 基本一致,感觉上应该是对的。

    现在情况是 android10 可以,android12 不行,不行指的是上锁后会无限重启,不上锁因为 vbmeta 不验证一切都正常。

    至于生成 OTA 包可能不行啊,因为我们没有源码。只有一个秘钥。

    还是说使用 AOSP 源码就能生成 OTA 包?
    andforce
        4
    andforce  
    OP
       125 天前
    @lx0758 感谢,看来 Android12 引入了新的启动引导机制,目前 Android10 成功的,我再试试 Android11 ,至于 Android12 目前没有太多思路,搞一下 Android11 试试~
    pagxir
        5
    pagxir  
       125 天前 via Android
    full OTA image 可以升级整个系统,即使原来的系统坏了,只要能进 recovery 就能刷进去。
    andforce
        6
    andforce  
    OP
       125 天前 via iPhone
    @pagxir 这应该得有之前系统的源码才行吧,单纯从 asop 的代码弄不出来 ota 的文件吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1111 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 18:56 · PVG 02:56 · LAX 10:56 · JFK 13:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.