安卓的分区一点有用知识:super、lpunpack、lpdump

简介: 安卓的分区一点有用知识:super、lpunpack、lpdump

我们知道这个安卓的镜像分区有很多个。

那么这个文章要介绍什么呢?

三个点:

一是现在的android支持动态分区,很多的东西都被放到super分区里面了,这个应该是可以配置的。然后super里面有比如system、vendor这种比较大的分区。那么就有对应的vbmeta_system、vbmeta_vendor分区去验证。

现在只有两个知识点了

1、怎么看AVB镜像的签名是否成功

看vbmeta和对应的分区。

然后对比两个的digest和salt值。

怎么看?

(注意使用你的路径)

./android/external/avb/avbtool.py info_image --image android/out/target/product/xxx/vbmeta.img

2、super镜像

这个镜像是谷歌 新推出的。

super分区也叫做dynamic动态分区,动态分区是Android的用户空间分区系统,在Android R版本开始引入,目的是为了解决system和vender等分区size不能动态调整的问题。例如物理分区表配置固定size后,如果软件版本对system,verdor分区size需要频繁调整时,需要修改物理分区表和重新编译gpt表,使用起来不是很便利。

引入super动态分区之后,将system,vendor等分区一起“打包”在super分区中,物理分区表只有super,不再单独配置system,vendor等分区的配置,其中的子分区可以动态的调整大小。编译的时候,会将system,vendor等分区的信息以metadata形式记录下来,生成super.img时会根据matadata信息进行处理

  另外super分区中的子分区,也可以通过fastbootd以fastboot的方式刷入,或者使用lpunpack解压开

super分区工作原理

动态分区时使用Linux内核中的dm-linear device-mapper模块实现的,Linear是指将device,mapper设备的线性范围映射到另一个设备的线性范围
属于LVM逻辑卷管理。
  **Super分区包含列出了每个子分区的名称和块范围的metadata元数据.**
在开机init的first stage第一阶段运行期间,会解析并验证metadata元数据并创建虚拟block设备来表示每个子分区,创建logical逻辑分区出来。在init启动的第一阶段会去加载和处理,采用和以前类似的AVB校验流程,验证通过后,super包含的几个分区全部采用hashtree类型做dm-verity验证。在运行过程中对访问的block数据进行dm-verity安全校验。校验通过过,分别挂载这几个逻辑子分区。(校验通过才挂载)

3、怎么查看super镜像

当你直接使用avbtool去查看super镜像的时候,它会打印说这个不是个vbmeta镜像。

这是因为super确实不是,哈哈,他是多个的组合。怎么查看呢?先解压就可以看到super包含了哪些镜像,然后生成几个镜像,分别查看。

下面开始看这个super怎么解压:

需要两个东西: simg2img 和 lpunpack

  • 安装:
    安装simg2img
sudo apt-get install super.img
  • 安装lpunpack
lpunpack 需要自己下载源码进行编译。lpunpack 生成后是通用的,所以下载别人编译好的 lpunpack 也是可以的,但    是需要添加依赖的相关 so 库。注意工具和 so 库是配套的,请一起使用。不要自己混搭工具和 so 库。下载好的 so 库文件放入 usr/lib/ 目录下即可也可以编辑 .bashrc 文件将 so 库所在目录路径加入到 LD_LIBRARY_PATH 中,命令如下
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库所在目录路径
  • 或者你下载源码的话就需要:
source build/envsetup.sh
make lpunpack
  • 生成文件所在目录:out/host/linux-x86/bin
  • 使用:
    1、 super.img 从 Android sparse image 转换为 raw image(因为super是稀疏格式)
simg2img super.img super.img_ext4
  • 2、从 raw image 解包出分区镜像文件
./lpunpack -p system super.img_ext4  system (这里 sytem 是目标目录,可以自己创建)

然后你就可以进入这个system的文件夹下看看生成了什么镜像,然后使用前面的avbtool看一下这个内容,验证一下。

然后你会怀疑这个解压的对不对啊?

于是你可以使用 lpdump 查看镜像的一些信息,信息里就包括了分区名称

./lpdump super.img_raw(这里是用 simg2img 转换后的文件)

应该还是有点用撒哈哈哈 周末愉快


目录
相关文章
|
7月前
|
安全 Android开发
Android 预置可卸载分区接收不到任何广播问题分析和解决
Android 预置可卸载分区接收不到任何广播问题分析和解决
224 0
|
7月前
|
存储 缓存 Android开发
android分区概述
android分区概述
274 0
|
4月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
353 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
7月前
|
Shell Android开发
MT8385 Android AB分区系统升级(命令模式)
MT8385 Android AB分区系统升级(命令模式)
82 0
|
7月前
|
存储 缓存 Android开发
Android系统分区与升级
Android系统分区与升级
125 4
|
7月前
|
存储 缓存 Linux
Android 系统的分区
Android 系统的分区
72 1
|
7月前
|
Java API Android开发
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
160 0
|
7月前
|
存储 Linux Android开发
Android存储分区与Rockchip平台的分区命名及U-Boot配置
Android存储分区与Rockchip平台的分区命名及U-Boot配置
228 0
|
7月前
|
存储 缓存 安全
Rockchip系列之RK3568 Android设备固件和分区信息
Rockchip系列之RK3568 Android设备固件和分区信息
523 0
|
7月前
|
Java Shell Android开发
安卓逆向 -- 常用命令与分区目录
安卓逆向 -- 常用命令与分区目录
57 1