0
点赞
收藏
分享

微信扫一扫

lpmake工具详解

在这里插入图片描述

lpmake 是 Android 动态分区(Dynamic Partitions)工具链中的一个关键组件,用于创建 超级分区(super partition)镜像,该镜像可以包含多个逻辑分区(如 systemvendorproduct 等),并支持动态调整分区大小(无需重新刷写整个分区表)。

基本功能

  • 将多个分区镜像(如 system.imgvendor.img)打包成一个 **超级分区(super.img)**。
  • 支持 动态分区(Dynamic Partitions)(Android 10+ 引入)。
  • 允许定义分区大小、属性(只读/可写)、组(group)等。
  • 生成可用于 fastboot 或 OTA 更新的 super.img

基本语法

lpmake --device-size=<super分区大小> \
       --metadata-size=<元数据大小> \
       --metadata-slots=<元数据槽数> \
       --group=<组名>:<组大小> \
       --partition=<分区名>:<大小>:<组名>[:<属性>] \
       --image=<分区名>=<分区镜像路径> \
       --output=<super.img路径>

关键参数

参数 说明
--device-size 超级分区(super.img)的总大小(如 4G)。
--metadata-size 元数据区域大小(默认 65536,通常无需修改)。
--metadata-slots 元数据槽数(A/B 设备用 2,否则 1)。
--group 定义分区组(如 --group=google_dynamic_partitions:3G)。
--partition 定义分区(名称、大小、所属组、属性)。
--image 指定分区镜像文件(如 --image=system=system.img)。
--output 输出 super.img 路径(如 --output=super.img)。
--sparse 生成稀疏格式的 super.img(节省空间)。
--readonly 设置分区为只读(默认 systemvendor 为只读)。

使用示例

1. 打包 systemvendorsuper.img

lpmake --device-size=4G \
       --metadata-size=65536 \
       --metadata-slots=2 \
       --group=google_dynamic_partitions:3G \
       --partition=system:2G:google_dynamic_partitions:readonly \
       --partition=vendor:1G:google_dynamic_partitions:readonly \
       --image=system=system.img \
       --image=vendor=vendor.img \
       --output=super.img
  • super.img 总大小 4G--device-size=4G)。
  • system 分区占 2Gvendor1G,剩余空间可用于动态调整。
  • metadata-slots=2 表示支持 A/B 无缝更新(如 Pixel 设备)。
  • readonly 表示分区为只读(Android 要求 systemvendor 只读)。

2. 生成稀疏 super.img(节省空间)

lpmake ... [其他参数] ... --sparse --output=super_sparse.img
  • --sparse 选项生成稀疏镜像(适用于 fastboot flash)。

3. 动态分区(调整 product 大小)

lpmake --device-size=5G \
       --group=main:4G \
       --partition=system:2.5G:main:readonly \
       --partition=vendor:1G:main:readonly \
       --partition=product:500M:main:readonly \
       --image=system=system.img \
       --image=vendor=vendor.img \
       --image=product=product.img \
       --output=super.img
  • product 分区大小可动态调整(只要 main 组剩余空间足够)。

make_ext4fs / mkuserimg_mke2fs 的关系

工具 用途
make_ext4fs 生成单个 ext4 分区镜像(如 system.img)。
mkuserimg_mke2fs 更灵活的 ext4 镜像生成工具(支持 SELinux)。
lpmake 将多个分区镜像打包成 super.img(动态分区)。

典型流程:

  1. mkuserimg_mke2fs 生成 system.imgvendor.img
  2. lpmake 打包成 super.img
  3. fastboot flash super super.img 刷入设备。

适用场景

  • Android 10+ 动态分区systemvendorproduct 等)。
  • A/B 无缝更新metadata-slots=2)。
  • 设备厂商自定义分区布局(如调整 odmsystem_ext 大小)。

注意事项

  1. super.img 大小必须足够容纳所有分区,否则会失败。
  2. 动态分区的调整需在 lpdumpadb shell lpdump 查看
    adb shell lpdump
    
  3. 刷写 super.img 会覆盖所有动态分区
    fastboot flash super super.img
    
  4. systemvendor 必须设为 readonly(否则 Android 无法启动)。

总结

lpmake 是 Android 动态分区的核心工具,用于构建 super.img,支持灵活的分区管理和 A/B 更新。相较于传统的 make_ext4fs,它更适合现代 Android 系统(尤其是 Android 10+)。

结束语 Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

举报

相关推荐

0 条评论