谷歌概述了在Android中支持主流Linux内核的计划

导读 似乎谷歌正在努力更新和上游位于每部 Android 手机核心的 Linux 内核。该公司是今年Linux Plumbers Conference的重要参与者,这 是

似乎谷歌正在努力更新和上游位于每部 Android 手机核心的 Linux 内核。该公司是今年Linux Plumbers Conference的重要参与者,这 是一次顶级 Linux 开发人员的年度会议,Google花了很多时间讨论让 Android 使用通用 Linux 内核,而不是它现在使用的高度定制的版本。它甚至展示了运行主线 Linux 内核的 Android 手机。

但首先,关于 Android 当前内核混乱的一些背景。目前,在“主线”Linux 内核和出货的 Android 设备之间发生了三个主要的分支(注意这里的“主线”与谷歌自己的“项目主线”没有关系”。首先,Google 将 LTS(长期支持)Linux 内核变成了“Android 通用内核”——应用了所有 Android 操作系统特定补丁的 Linux 内核。Android 通用被运送给 SoC 供应商(通常是Qualcomm)在那里它获得了第一轮特定于硬件的添加,首先专注于特定型号的 SoC。然后将这个“SoC 内核”发送给设备制造商,以获得支持所有其他硬件的更多硬件特定代码,像显示器、摄像头、扬声器、USB 端口和任何额外的硬件。这就是“设备内核”,它是设备上实际附带的东西。

这是一个非常漫长的旅程,导致每台设备都运送数百万行的树外内核代码。每个运输设备内核都是不同的,并且是特定于设备的——基本上没有一部手机的设备内核可以在另一部手机上运行。设备的主线内核版本在 SoC 的初始开发之初就已锁定,因此全新设备通常会附带两年前的 Linux 内核。即使是谷歌最新的,呃,最棒的设备Pixel 4 于 2019 年 10 月随 Linux 内核 4.14 一起发布,这是 2017 年 11 月的 LTS 版本。它也将永远停留在内核 4.14 上。Android 设备通常不会获得内核更新,这可能要归功于仅生成单个设备内核所需的大量工作以及需要合作完成此操作的公司链。由于从未发生过内核更新,这意味着 Android 的每个新版本通常都必须支持过去三年的 LTS 内核版本(Android 10 的最低版本为 4.9,即 2016 年版本)。谷歌承诺通过安全补丁支持旧版本的 Android,这意味着该公司仍在支持内核 3.18,该内核现在已有五年历史。谷歌'六年的支持。

去年,在 2018 年 Linux Plumbers Conference 上,谷歌宣布了其初步调查,旨在让 Android 内核更接近主流 Linux。今年,它分享了迄今为止进展的更多细节,但它绝对仍在进行中。“今天,我们不知道将什么添加到内核才能在 [特定] Android 设备上运行,”Android 内核团队负责人 Sandeep Patil 在 LPC 2019 上告诉该小组。“我们知道运行Android需要什么但不一定在任何给定的硬件上。所以我们的目标是基本上找到所有这些,然后将其上游并尝试尽可能接近主线。”

虽然要获得更广泛的 Android 生态系统和无数的设备配置,仍有工作要做,但对于特定型号的设备,事情似乎进展顺利。Linaro Consumer Group 的主管 Tom Gall 展示了一款小米 Poco F1,它实际上 在通常的 Android 操作系统下运行了主线 Linux 内核。加尔告诉听众,“谷歌内核团队有很多重要的支持,特别是让他们的代码上游,这样我们就可以用主线内核启动设备。”

除了尽可能多地上游内核代码的计划外,谷歌还旨在复制其早期在模块化 Android 方面的工作,即Project Treble。正如 Treble 在 Android 操作系统和设备 HAL(硬件抽象层)之间创建了一个稳定的接口一样,Google 提出的让 Android 更接近主流 Linux 的提议(怎么没有一个愚蠢的“项目”名称呢?) -kernel ABI 并有一个稳定的接口供 Linux 内核和硬件供应商写入。谷歌希望将 Linux 内核与其硬件支持分离。

一段时间以来,Linux 社区一直反对稳定接口的想法,并建议如果您想要快速更新内核的能力,请开源您的驱动程序并将它们放入主内核树中,在那里进行任何更改照顾你。然而,开源驱动程序对于许多硬件公司来说绝对是一个交易破坏者,并且任何宣传或产品降级都不会改变这一点。谷歌坚持支持已有五年历史的 Linux 版本这一事实表明这种模式行不通。

谷歌的高级软件工程师马蒂亚斯·曼尼奇展示了一张标有“下一代安卓”的图表,展示了这个提议的内核架构的样子。Google 将发布一个“通用内核映像 (GKI)”以及几个“GKI 模块”,这些模块将在内核中公开这个稳定的 API/ABI。特定于硬件的驱动程序(可能是闭源驱动程序)将作为内核模块加载。因此,所有东西都被模块化为附加包,而不是在叉子上的叉子。

目前,Google 仅建议内核内 ABI 对单个 LTS 版本保持稳定。因此,这不允许设备从 Linux 内核的一个版本升级到另一个版本——它只允许单个通用内核映像跨多个设备工作,而不是我们今天拥有的特定于设备的内核分支。它肯定会允许更容易的安全更新,并希望它能更快地将新的 LTS 版本推向市场。

如果我们说这是Android 和 Linux 内核肯定会发生的变化,那我们还为时过早 。还有很多问题需要解决(我想是技术上和政治上的),其中一些演讲更像是谷歌演示者和观众中的 Linux 工程师(其中许多也是谷歌员工!)之间的公开头脑风暴会议. 这是谷歌连续第二年出现在 LPC 并提出在 Android 中使用主线 Linux 内核的想法,尽管 Android 是地球上最大的 Linux 类发行版之一,这对大家一起努力吧?

“我们还有很长的路要走,我们知道这一点,但我们是从起点开始的,”帕蒂尔告诉人群。“去年,我谈成了。这一次,我们实际上有问题要讨论。”

版权声明:本文由用户上传,如有侵权请联系删除!