Android对Linux内核采取上游优先的开发模式
Linux Plumbers Conference 将于本周举行,由于 Android 是世界上最大的 Linux 内核分销商之一,因此 Google 软件工程师 Todd Kjos停下来听取了 Android 团队的进度报告。Android 12——现在随时都会发布——承诺通过向最终用户提供谷歌的“通用内核映像”(GKI),使 Android 比以往任何时候都更接近主流 Linux。
传统上,Linux 内核在进入 Android 手机之前会被多次分叉,通常由 Android 设备中的每个利益相关者分叉。首先,谷歌将 Linux 内核分叉为“Android 通用”——Linux 内核加上一系列电话和 Android 特定的更改。然后像高通、三星或联发科这样的 SoC 供应商分叉 Android Common,为每个主要芯片版本制作一个特定于 SoC 的内核。然后,每个设备都会获得 SoC 内核的一个分支,以提供特定于设备的硬件支持。
Android 的内核碎片化是一个巨大的混乱,您可以想象从分支树顶部的错误修复到达最终用户居住的底部的道路是多么漫长和艰难。Android.com 官方文档指出“这些修改可能非常广泛,以至于在设备上运行的代码中有多达 50% 是树外代码(不是来自上游 Linux 或来自 AOSP 通用内核)。 ” 这也是一个很大的时间槽,即使是谷歌手机通常也会从两年前开始提供内核。
Google 一直致力于通过 GKI 缩短 Android 和 Linux 之间的距离。谷歌的目标是为 Android 将 Linux 内核分叉一次,而不是三次,并为 SoC 和设备制造商通过插件模块进行定制提供空间。
Kjos 解释说:“最大的推动力是将所有特定于硬件的代码从通用内核中提取到供应商模块中。这项工作的重要部分之一是我们必须在这些供应商模块和供应商模块之间建立稳定的接口。通用内核,以便它们可以异步发布。” 该接口称为“KMI”或“内核模块接口”。Kjos 现在说 Android GKI 和主流 Linux 之间的“主要区别”是所有这些供应商模块的钩子。
Kjos 说谷歌更喜欢为这些供应商模块使用短钩子而不是树外代码,因为“我们希望尽可能靠近上游。” 谷歌也在努力将供应商代码推向上游,但承认,“这是一个多年的项目,我们不希望我们能做到这一点。” Kjos 为未来几年的内核工作制定了时间表,其中 2020-2022 年作为上游现有功能和隔离供应商更改模块的工作,并从 2023 年开始,采用“上游优先”的新功能开发模型。“由于树外模块对我们的用例非常重要,我们希望我们总是有一组导出和一些不同的东西,或者除了上游的东西,
Google 的通用内核映像工作与 Project Treble 非常相似,后者构建了 GSI(或“通用系统映像”),允许独立于硬件支持更新 Android 版本。今天,您可以将通用版本的 Android闪存到手机并使其大部分工作,但与 OEM 定制相关的通常政治意味着通用系统映像不会在消费设备上提供。不过 GKI 是不同的,谷歌实际上计划向最终用户提供通用内核。
虽然在演讲中没有提到,但谷歌正在努力将 GKI 作为“项目主线”模块分发,这将允许通过 Play 商店提供内核更新,在那里内核可以像应用程序一样轻松更新。我们已经多次就 GKI采访了 Android 团队的成员,最终的计划是不仅能够通过 Play 商店更新 LTS 内核版本,还能够升级到主要的新版本。今天,LTS 内核更新偶尔会通过 OTA 更新到达,但设备通常不会跳转到主要的新内核版本。
将 GKI 交付给消费者的时间框架是“Android 12”,而且由于这个核心内核工作只发生在新设备上,所有的目光都集中在 Pixel 6 上,看看谷歌在这方面的首次尝试会有多么雄心勃勃。Pixel 6 是第一款配备内部“Google Tensor” SoC 的设备,如果关于更长的 Google 支持时间表的理论是正确的,那么能够跳过主要内核版本将对支持生命周期超过5年。假设 Pixel 6 随附 Linux 内核 5.10(在本次演讲中多次提到),这将比通常的两年延迟有很大改进——5.10 于 2020 年 12 月发布。