内核概览

Android 内核基于上游 Linux 长期支持 (LTS) 内核。在 Google,LTS 内核会与 Android 专用补丁结合,形成所谓的“Android 通用内核 (ACK)”

ACK 基于 kernel/common 代码库构建。此代码库是上游 Linux 内核的超集,包含额外的 Android 专用补丁。

版本为 5.10 及更高的 ACK 也称为通用内核映像 (GKI) 内核。GKI 内核支持将与硬件无关的 通用 核心内核 代码和 GKI 模块 与硬件专用 供应商模块分离开来。

GKI 内核与供应商模块之间的交互通过内核模块接口 (KMI) 来实现,该接口由标识供应商模块所需的函数和全局数据的符号列表组成。图 1 显示了 GKI 内核和供应商模块架构:

GKI 内核和供应商模块架构。

图 1. GKI 内核和供应商模块架构。

内核术语表

以下是整个内核文档中使用的术语。

内核类型

Android 通用内核 (ACK)
ACK 是长期支持 (LTS) 内核的下游,包含对 Android 社区很重要的补丁。这些补丁尚未合并到 Linux Mainline 或长期 GKI 内核。

版本为 5.10 及更高的内核也称为 通用内核映像 (GKI) 内核。

Android 开源项目 (AOSP) 内核
请参阅 Android 通用内核

Android 12 的功能无法向后移植到 4.19 内核;特征集与发布时搭载 4.19 内核和 Android 11 且升级到 Android 12 的设备类似。

通用内核映像 (GKI) 内核

任何 5.10 及更高版本的 ACK 内核(仅限 aarch64)。GKI 内核包含以下两个部分:

  • 通用内核 - 在 所有设备上通用的 GKI 内核部分。

  • GKI 模块 - 由 Google 构建的可在设备上动态 加载的内核模块(若适用)。这些模块是作为 GKI 内核的工件构建的,并与 GKI 一起作为 system_dlkm_staging_archive.tar.gz 归档文件提供。GKI 模块由 Google 使用内核构建时密钥对进行签名,并且仅与其构建时使用的 GKI 内核兼容。

内核模块接口 (KMI) 内核

请参阅 GKI 内核

长期支持 (LTS) 内核

支持 2 到 6 年的 Linux 内核。LTS 内核每年发布一次,是 Google 的每个Android 通用内核的基础。

分支类型

ACK KMI 内核分支
构建 GKI 内核 的分支。分支名称与内核版本对应,例如 android15-6.6
Android-mainline
Android 功能的主要开发分支。当上游声明新的 LTS 内核时,相应的新 GKI 内核就会作为 android-mainline 分支。

Linux Mainline :上游 Linux 内核(包括 LTS 内核)的主要开发分支。

其他术语

经过认证的启动映像
以二进制形式 (boot.img) 提供并刷写到设备的内核。 此映像被认为是经过认证的,因为它包含嵌入式证书,因此 Google 可以验证确认设备搭载的内核经过 Google 认证。
可动态加载的内核模块 (DLKM)
可以在设备启动过程中根据设备需求动态加载的模块。GKI 和供应商模块都是 DLKM。DLKM 以 .ko 形式发布,可以是驱动程序,也可以提供其他内核功能。
GKI 项目
一个 Google 项目,通过将通用核心内核功能从供应商专用 SoC 和板级支持分离出来并使其成为可加载模块,解决了内核碎片化问题。

通用内核映像 (GKI) :经过 Google 认证的启动映像,包含基于 ACK 源代码树构建的 GKI 内核,适合刷写到 Android 设备启动分区。

内核模块接口 (KMI)
GKI 内核与供应商模块之间的接口,使供应商模块能够独立于 GKI 内核进行更新。此接口包括已根据合作伙伴符号列表标识为供应商/OEM 依赖项的内核函数和全局数据。
供应商模块
由合作伙伴开发的硬件专用模块,包含 SoC 和设备专用功能。供应商模块是一种可动态加载的内核模块。

后续步骤

如果您是 Android 内核开发新手,请先阅读以下内容:

如果您是 GKI 内核开发新手,请先阅读 GKI 开发