动态分区
动态分区是 Android 的用户空间分区系统。使用此分区系统,您可以在无线下载 (OTA) 更新期间创建、销毁分区或者调整分区大小。借助动态分区,供应商无需担心各个分区(例如 system、vendor 和 product)的大小。取而代之的是,设备分配一个 super 分区,其中的子分区可动态地调整大小。单个分区映像不再需要为将来的 OTA 预留空间。相反,super 中剩余的可用空间还可用于所有动态分区。
模拟器分区
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
配置
- 要支持动态分区,请在 device.mk 中添加以下标记:PRODUCT_USE_DYNAMIC_PARTITIONS := true
- 您需要设置 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 目录
通用内核镜像
Android通用内核(ACK)是所有Android产品内核的基础。供应商和设备内核位于ACK的下游。供应商通过修改内核源代码和添加设备驱动程序来增加对SoC和外围设备的支持。这些修改可能很广泛,以至于设备上运行的代码中有多达50%是树外代码(不是来自上游Linux或AOSP通用内核)。
内核碎片形成
解决方案架构
GKI是一项复杂的更改,将从Android 11平台版本中的v5.4内核开始分几个阶段进行