Android 11 动态扩展分区

Android R

Posted by LXG on October 15, 2020

动态分区-AOSP

Android 10 动态分区

动态分区

动态分区是 Android 的用户空间分区系统。使用此分区系统,您可以在无线下载 (OTA) 更新期间创建、销毁分区或者调整分区大小。借助动态分区,供应商无需担心各个分区(例如 system、vendor 和 product)的大小。取而代之的是,设备分配一个 super 分区,其中的子分区可动态地调整大小。单个分区映像不再需要为将来的 OTA 预留空间。相反,super 中剩余的可用空间还可用于所有动态分区。

dynamic_partitions_table

模拟器分区


bengal:/ # df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.7G  1.1M  1.7G   1% /dev
tmpfs                 1.7G     0  1.7G   0% /mnt
/dev/block/mmcblk0p45  11M  172K   11M   2% /metadata
/dev/block/dm-0       873M  871M  2.6M 100% /
/dev/block/dm-4       1.9G  237M  1.7G  12% /mnt/scratch
overlay               1.9G  237M  1.7G  12% /system
overlay               1.9G  237M  1.7G  12% /system_ext
overlay               1.9G  237M  1.7G  12% /vendor
overlay               1.9G  237M  1.7G  12% /product
tmpfs                 1.7G     0  1.7G   0% /apex
tmpfs                 1.7G  264K  1.7G   1% /linkerconfig
/dev/block/mmcblk0p44  27M  1.0M   26M   4% /mnt/vendor/persist
/dev/block/mmcblk0p28 180M   53M  127M  30% /vendor/firmware_mnt
/dev/block/mmcblk0p30  27M   14M   14M  51% /vendor/dsp
/dev/block/mmcblk0p35  64M  880K   63M   2% /vendor/bt_firmware
/dev/block/dm-5       3.9G  2.3G  1.6G  60% /data
tmpfs                 1.7G     0  1.7G   0% /data_mirror
/data/media           3.9G  2.3G  1.6G  60% /mnt/runtime/default/emulated
/dev/fuse             3.9G  2.3G  1.6G  60% /mnt/user/0/emulated

配置

  1. 要支持动态分区,请在 device.mk 中添加以下标记:PRODUCT_USE_DYNAMIC_PARTITIONS := true
  2. 您需要设置 super 分区的大小:BOARD_SUPER_PARTITION_SIZE := size-in-bytes

QSSI-Qualcomm Single System Image

QSSI 编译步骤


// 编译system.img
source build/envsetup.sh
lunch qssi
make <system related images>

// 编译其他 img
source build/envsetup.sh
lunch <target>
make <non-system images>

make superiamge


// android R 之前单独编译framework和service命令为:
make -j8 framework
make -j8 services

// android R 命令为:
make -j8 framework-minus-apex
make -j8 services
push framework 并删除设备中oat arm arm64 目录

通用内核镜像

generic-kernel-image

Android通用内核(ACK)是所有Android产品内核的基础。供应商和设备内核位于ACK的下游。供应商通过修改内核源代码和添加设备驱动程序来增加对SoC和外围设备的支持。这些修改可能很广泛,以至于设备上运行的代码中有多达50%是树外代码(不是来自上游Linux或AOSP通用内核)。

内核碎片形成

generic-kernel-image-overview

解决方案架构

GKI是一项复杂的更改,将从Android 11平台版本中的v5.4内核开始分几个阶段进行

generic-kernel-image-architecture