Android官方正在着手解决碎片化问题

2021-09-27    阅读次数:10    Android

一年一度的 Linux Plumbers 大会是从事 Linux 系统底层开发的工程师的聚会。考虑到 Android 作为全球规模最大的 Linux 内核发行版之一,谷歌软件工程师 Todd Kjos 今年也参与了大会并做了分享。

他表示,即将正式亮相的 Android 12 承诺向最终用户提供谷歌打造的“通用内核镜像(Generic Kernel Image,简称 GKI)”,以确保新一代 Android 能无限拉近与主流 Linux 的距离。

在传统上,Linux 内核在入驻 Android 手机之前会经历多次分叉,而且 Android 设备供应流程中的每个利益相关方都会进行自己的分叉。简单来说,就是谷歌先将 Linux LTS 内核分叉为 Android Comon Kernel,之后再由 SoC 供应商针对每款芯片进行分叉,最后由设备制造商进行再次分叉。

首先,谷歌会将 Linux 内核分叉为“Android Common”——即 Linux 内核加上一系列手机与 Android 特定调整。之后以高通、三星或联发科为代表的 SoC 供应商又会对 Android Common 进行分叉,为各个主要芯片版本开发一套 SoC 专用内核。最后,每台设备都要对应 SoC 内核的一个特定分叉,用于实现对特定设备的硬件支持。

可以看到,Android 内核的这种严重碎片化必然引发巨大混乱,我们不难想象从分支树顶端到最终用户推动 bug 修复会是一项多么漫长而艰难的旅程。Android.com 官方文档提到,“内核修改范围极为广泛,因此在最终设备上运行的代码中有多达 50% 的代码属于树外代码(并非来自上游 Linux 或 AOSP 通用内核)。”此外,这样的方式还带来严重的时间浪费,即使是谷歌自家的官方品牌手机也得提前两年就开始供应内核。

谷歌一直希望通过 GKI 拉近 Android 与 Linux 之间的距离。谷歌的目标是只为 Android 对 Linux 内核进行一次分叉(而不是三次),再通过插件模块为 SoC 及设备制造商提供定制化空间。

演示文稿中的幻灯片,其中详细介绍了新的内核策略时间表

Kjos 解释道,“最大的驱动力是将所有特定于硬件的代码从通用内核中迁移至供应商模块处。要达成这个目标,我们必须在各供应商模块与通用内核之间建立起稳定的接口。只有这样,才能让异步发布成为现实。”该接口被称为“KMI”,即“内核模块接口”。Kjos 指出,目前 Android GKI 与主线 Liux 之间的“主要区别”就是各供应商模块间使用的 hook 有所不同。

Kjos 提到,谷歌更倾向于在供应商模块中使用短小的 hook(而非主干代码),只有这样“才能尽可能靠近上游”。虽然一直在努力将供应商代码推向上游,但谷歌也承认“这是一项需要耗时多年的庞大计划,我们觉得恐怕很难真正实现。”

Kjos 还为未来几年的内核工作制定了时间表,其中 2020 年至 2022 年期间的主要任务是将现有功能推向上游、并隔离供应商的变更模块;从 2023 年开始,正式采用“上游优先”新功能开发模型。“考虑到树外模式对我们的用例非常重要,我们希望能在上游之外也始终保持一定程度的外部开发空间。但必须承认,这项将耗时多年的整体计划是要尽可能消除树外补丁,让下游产出尽可能与上游保持一致。”

谷歌的通用内核镜像工作与 Treble 项目非常相似,后者的目标在于建立起 GSI(即「通用系统镜像」),允许以硬件中立的方式更新 Android 版本。如今,我们可以将通用版本的 Android 下载到手机并获得不错的运行体验。但 GKI 的意义有所不同,谷歌希望通过它直接将通用内核交付至最终用户手中。

虽然演讲中并没有明确提及,但谷歌确实在努力将 GKI 作为“项目主线”模块进行发布。在它的帮助下,内核更新将能够通过 Play 应用商店发布,整个更新过程与移动应用基本一致。我们已经多次就 GKI 采访了 Android 团队的成员,他们的最终计划不仅是通过 Play 应用商店更新 LTS 内核版本,更是要实现对主要新版本的升级能力。如今,TLS 内核更新偶尔会通过 OTA 的形式送达,但新的主要内核版本更新对大多数移动设备仍是个老大难问题。

GKI 计划在“Android 12”版本中与广大消费者正式见面。因为这次内核升级调整只适用于新设备,所以全世界的目光都集中在了 Pixel 6 身上。我们也期待着雄心勃勃的谷歌能借此机会一展自己的强大实力。

Pixel 6 将是第一款配备内部“Google Tensor”SoC 的移动设备;如果关于谷歌延长技术支持时间线的理论准确无误,那么这种内核大版本升级能力将使该设备的生命周期超过五年。而且如果 Pixel 6 中使用的是发布于 2020 年 12 月的 Linux 5.10 内核,则代表着谷歌已经在以往平均滞后两年的内核版本基础之上迈出了重要的一步。

  028-8453-1500