Android 编译 product 分区

Android 编译 product 分区,第1张

概述https://source.android.google.cn/devices/bootloader/product-partitions 编译product分区Android9​支持使用Android编译系统构建/product分区。之前,Android8.x强制将系统芯片(SoC)专属组件从/system分区分隔到了/vendor分区,不会为从Android编译系统构

https://source.android.google.cn/devices/bootloader/product-partitions

 

编译 product 分区

AndroID 9​ 支持使用 AndroID 编译系统构建 /product 分区。之前,AndroID 8.x 强制将系统芯片 (SoC) 专属组件从 /system 分区分隔到了 /vendor 分区,不会为从 AndroID 编译系统构建的原始设备制造商 (OEM) 专属组件提供专用空间。

product 分区简介

许多原始设备制造商 (OEM) 会自定义 AOSP 系统映像,以实施自己的功能并满足运营商的要求。不过,如果进行这类自定义,则无法针对多个软件 SKU 使用单个系统映像,因为映像必须各不相同,才能支持不同的语言区域、运营商等;如果使用单独的 /product 分区来包含自定义项,则可以无法针对多个软件 SKU 使用单个系统映像(/system 分区会托管可在众多软件 SKU 之间共享的通用代码)。/vendor 分区会继续托管 SoC 专用板级 (BSP) 代码,这类代码可以基于指定 SoC 在多台设备之间共享。

使用单独的分区存在一些弊端,例如,难以管理磁盘空间(应该预留一定的空间满足未来增长的空间需求),以及难以在各分区之间维护稳定的应用二进制接口 (ABI)。在决定使用 /product 分区之前,请花些时间考虑一下您的 AOSP 实现的具体情况和可行的缓解策略(例如,在无线下载 (OTA) 更新期间对设备进行重新分区;此 *** 作不是由 Google 来完成,而是由某些 OEM 来完成)。

旧式 /oem 与 /product

/product 分区与旧式 /oem 分区不同:

分区属性
/oem不可更新;通常在出厂时刷写一次。根据品牌信息和颜色等细微差异进行构建。不同的 /oem 分区内容不会使其成为不同的产品软件。系统分区不依赖于 /oem(仅当在其中找到特定文件时才使用该分区)。切勿在系统上使用除公共 API 之外的 API。
/product可更新搭配系统图像(该分区与系统映像一起更新)按产品或产品系列构建。系统分区可以依赖于 /product 分区。可以使用非公共 API,因为它们同时更新。

出于这些原因,AndroID 9 支持新的 /product 分区,同时也针对依赖于旧式 /oem 分区的设备保留了对该分区的支持。

/product 组件

/product 分区包含以下组件:

产品专用的系统属性 (/product/build.prop)产品专用的 RRO (/product/overlay/*.apk)产品专用的应用 (/product/app/*.apk)产品专用的特权应用 (/product/priv-app/*.apk)产品专用的内容库 (/product/lib/*)产品专用的 Java 库 (/product/framework/*.jar)产品专用的 AndroID 框架系统配置(/product/etc/sysconfig/*/product/etc/permissions/*)产品专用的媒体文件 (/product/media/audio/*)产品专用的 bootanimation 文件不得使用 custom_images

您不能使用 custom_images,因为它们缺乏对以下各项的支持:

将模块安装到特定目标分区中。 custom_images 支持将软件工件复制到映像中,但无法将模块安装到特定分区中(通过将其目标分区指定为编译规则的一部分)。Soong 支持。无法使用 Soong 编译系统编译 custom_images。OTA 更新支持。custom_images 用作出厂 ROM 映像,无法执行 OTA 更新。维护分区之间的 ABI

AndroID 9 中的 /product 分区是 /system 分区的扩展。由于 /product/system 分区之间的 ABI 稳定性较弱,因此必须同时升级这两者,而且 ABI 应基于系统 SDK。如果系统 SDK 不涵盖 /product/system 之间的所有 API 表面,则 OEM 负责在这两个分区之间维护自己的 ABI。

/product 分区和 /system 分区可以相互依赖。不过,在没有 /product 分区的情况下,对通用系统映像 (GSI) 的测试必须能够正常运行。

/product 分区不能对 /vendor 分区有任何依赖,而且 /product 分区和 /vendor 分区之间不允许有任何直接交互(由 SEpolicy 强制执行)。

实现 product 分区

在实现新 product 分区之前,请先了解 AOSP 中的相关 product 分区变化。接下来,为了设置 /product,请添加以下开发板编译标记或 product 编译标记:

BOARD_USES_PRODUCtimageBOARD_PRODUCtimage_PARTITION_SIZEBOARD_PRODUCtimage_file_SYstem_TYPEPRODUCT_PRODUCT_PROPERTIES for /product/build.prop,应该在 $(call inherit-product path/to/device.mk) 内,例如 PRODUCT_PRODUCT_PROPERTIES += product.abc=ok。向 product 分区中安装模块

使用以下编译标记向 product 分区中安装模块。

AndroID.bp 中的 product_specific: trueAndroID.mk 中的 LOCAL_PRODUCT_MODulE := true启用启动时验证

为防止 /product 分区被恶意软件篡改,您应该为该分区启用 Android 启动时验证 (AVB)(就像为 /vendor/system 分区启用一样)。要启用 AVB,请添加以下编译标记:BOARD_AVB_PRODUCT_ADD_hashtree_FOOTER_ARGS

总结

以上是内存溢出为你收集整理的Android 编译 product 分区全部内容,希望文章能够帮你解决Android 编译 product 分区所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1103227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存