内核概述

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

较新的 ACK(版本 5.4 及更高版本)也称为 GKI 内核。GKI 内核支持将与硬件无关的通用核心内核代码和GKI 模块与特定于硬件的供应商模块分离。

GKI 内核与包含片上系统 (SoC) 和主板专用代码的特定于硬件的供应商模块进行交互。GKI 内核与供应商模块之间的交互由内核模块接口 (KMI) 启用,该接口包含符号列表,用于识别供应商模块所需的功能和全局数据。图 1 显示了 GKI 内核和供应商模块架构

GKI architecture
图 1. GKI 架构

内核词汇表

本部分包含内核文档中使用的术语。

内核类型

Android 通用内核 (ACK)
一种内核,它位于 LTS 内核的下游,并包含 Android 社区感兴趣但尚未合并到 Linux 主线或长期支持 (LTS) 内核中的补丁。较新的 ACK(版本 5.4 及更高版本)也称为 GKI 内核,因为它们支持分离与硬件无关的通用内核代码和与硬件无关的 GKI 模块。
Android 开放源代码项目 (AOSP) 内核
请参阅Android 通用内核。
功能内核
一种内核,平台版本功能保证在此内核中实现。例如,在 Android 12 中,两个功能内核分别是 android12-5.4 和 android12-5.10。Android 12 功能无法向后移植到 4.19 内核;功能集类似于搭载 Android 11 上的 4.19 并升级到 Android 12 的设备。
通用核心内核
GKI 内核中所有设备通用的部分。
通用内核镜像 (GKI) 内核
任何较新的(5.4 及更高版本)ACK 内核(目前仅限 aarch64)。此内核包含两个部分:核心 GKI 内核(包含所有设备通用的代码)和 Google 开发的 GKI 模块(可在适用的设备上动态加载)。
内核模块接口 (KMI) 内核
请参阅GKI 内核
启动内核
一种内核,对于给定的 Android 平台版本,该内核可用于启动设备。例如,在 Android 12 中,有效的启动内核为 4.19、5.4 和 5.10。
长期支持 (LTS) 内核
一种支持 2 到 6 年的 Linux 内核。LTS 内核每年发布一次,是 Google 每个 ACK 的基础。

分支类型

ACK KMI 内核分支
用于构建 GKI 内核的分支。例如,android12-5.10 和 android13-5.15。
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 依赖项。
GKI 模块
由 Google 构建的内核模块,可在适用的设备上动态加载。这些模块是作为 GKI 内核的工件构建的,并与 GKI 一起作为 system_dlkm_staging_archive.tar.gz 归档文件交付。GKI 模块由 Google 使用内核构建时密钥对进行签名,并且仅与构建它们的 GKI 内核兼容。
供应商模块
由合作伙伴开发的特定于硬件的模块,其中包含 SoC 和设备专用功能。供应商模块是一种动态可加载内核模块。

后续步骤?

  • 如果您不熟悉 Android 内核开发,不妨先阅读以下内容
  • 如果您不熟悉 GKI 内核开发,请先阅读GKI 开发