从上图可以看出,一个完整的Android镜像参与方有多方,比如
- system.img 主要包括Android框架。
- boot.img (内核/ ramdisk)包含Linux内核+ Android补丁。
- vendor.img 包含SoC特定的代码和配置。
- odm.img 包含设备特定的代码和配置。
- oem.img 包含OEM /运营商相关配置和自定义。
- bootloader 启动内核(供应商专有)。
- radio 调制解调器(专有)。
在Android 8.0之前,供应商,odm和oem镜像是可选的;其实属于这些映像的文件被放置在boot.img或system.img中,并带有符号链接(如/vendor>/system /vendor)。
Android 8.0使vendor分区成为强制性的。目标是通过在Android平台(在system.img上)和供应商提供的代码之间定义标准接口来模块化Android分区。该标准接口使Android平台得到更新,而不会影响SoC和ODM分区。
8.0中最重要的更新之一是Project Treble。Treble是不仅仅是安全功能 - 它是一系列重要的体系结构变化,对安全性有着巨大的积极影响。
为了让设备运行Android,设备制造商可以定制该设备的软件与设备的硬件。在以前的Android版本中,这些自定义与一般的Android OS框架混合在一起。在Android 8.0中,谷歌与设备制造商和片上系统(SoC)供应商密切合作解决这个问题,从而对Android的底层级系统架构进行了最大的改变。 Treble将供应商实现(由SoC供应商编写的设备特定的较低级别软件)与Android框架分离开来。为了实现这一目标,Android 8.0在Android框架和SoC供应商实施之间包含一个新的供应商界面。新的供应商接口由供应商测试套件(VTS)验证,该套件验证供应商实施的向前兼容性。这种分离使得将设备更新为新版本的Android变得更加容易,因为它使供应商的实现保持不变。
从历史上看,更新对于设备制造商而言是具有挑战性的,代价高昂且耗时的,因为它们的定制化。 带有Treble的设备更容易更新,这应该意味着更快的安全补丁和整个Android版本的更新生态系统。更快更轻松的更新并不是Treble唯一的安全优势。Treble的模块化旨在通过提高隔离度来提高安全性和供应商提供的硬件抽象层(HAL)的取消特权。Android的早期版本中,HAL在进程中运行。该进程需要所有进程内HAL所需的所有权限,包括直接访问内核驱动程序。同样,进程中的所有HAL都可以访问与进程剩余部分相同的一组权限,包括其他进程内HAL所需的权限。这导致了过度权限的进程和HAL,它们有权访问他们不应该拥有的权限和硬件。
在Android 8.0中,将HAL移入它自己的进程中。孤立的HAL更好地遵守最小特权原则,并提供两个明显的优势:
- 每个HAL都在其自己的沙箱中运行,并且只能访问其控制的硬件驱动程序和执行其工作所需的权限。
- 进程失去对硬件驱动程序和HAL所需的其他权限和访问的能力。