内核概览

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 主线:上游 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 开发