本文档包含有关 Android 内核(也称为通用内核映像 (GKI) 内核)的常见问题解答。如果您不熟悉 GKI 和 GKI 内核术语,请参阅内核概述。
内核模块接口 (KMI) 符号列表可以在稳定内核中更改吗?
不影响现有 KMI 的更改可以添加到冻结的内核中。这些更改包括新的导出函数和符号列表条目。如需了解详情,请参阅管理符号列表。
我可以在稳定内核中更改供应商模块使用的结构吗?
作为 KMI 接口一部分的结构无法在具有冻结 KMI 的内核中更改。在 KMI 冻结之前,可以更改这些结构。
只要我不破坏二进制或源代码兼容性,我可以更改内核吗?
不影响 KMI 的更改可以按照Android 专用补丁中所述进行。
GKI 如何处理内核配置?
如需了解内核配置的相关信息,请参阅gki_defconfig 更改。
如何处理对现有 GKI 模块的覆盖的上游错误修复?
如果您基于 Android 通用内核 (ACK) 中的驱动程序创建供应商模块,则由您负责确保将来自上游和 ACK 的错误修复传播到您的模块。通常,最好使用未经修改的 GKI 内核和 GKI 模块,以便 Google 持续提供这些更新。
是否有 GKI 专用测试?
有 供应商测试套件 (VTS) 测试,用于验证是否安装了经过认证的 GKI 版本,并强制执行每个版本的 GKI 要求。例如,有适用于 Android 12 VTS 的测试,用于测试启动标头 v3 并验证运行 5.10 内核的设备中是否存在所需分区。
如何为设备版本创建项目 defconfig 片段文件?
许多 GKI 兼容设备使用配置片段来描述除 gki_defconfig
之外构建供应商模块所需的配置选项。作为 ACK 代码库一部分的示例包括 Cuttlefish 和 DB845c。无法避免对配置选项进行一些手动检查以优化片段,但内核源中的 scripts/diffconfig
对于比较 gki_defconfig
和 gki_defconfig+device.fragment
的结果非常有用。
modprobe 将 - 和 _ 视为等效项是否有解决方法?
modprobe
man page 包含以下描述:“modprobe
智能地从 Linux 内核添加或移除模块:请注意,为方便起见,模块名称中的 _ 和 - 没有区别(会自动执行下划线转换)。”GKI 团队坚持上游标准惯例,因此供应商工具或模块命名惯例必须考虑这种遵循。
如何为内部使用启用 debugfs?
有关启用 debugfs 的详情,请参阅侵入式下游调试功能。
如何解决启用特定模块配置的 GKI 内核之间的 ABI 不匹配问题?
GKI 内核和模块配置之间的 ABI 不匹配表示隐式的模块配置依赖项,其中启用模块会导致将二进制配置构建到生成的内核映像中。请联系 Android 内核团队 (kernel-team@android.com) 以确定前进方向。确定符号列表后,请在 Issue Tracker 中创建一个错误,并上传对符号列表的更改。
我有一些符合 GKI 1.0 标准的设备在现场运行 5.4 内核,这些内核随 Android 11 和 12 一起发布。有哪些内核升级选项可用?在升级到 Android 12 和 13 时,如何测试这些设备?
请参阅兼容性矩阵,获取启动版本和升级版本支持的内核版本列表。以下是两个升级示例
示例 1:用户拥有一款随附 android11-5.4
内核 (GKI 1.0) 的 Android 11 设备,在升级到 Android 12 时可以选择以下任一选项
升级到
android12-5.10
GKI 2.0 内核(强烈推荐)。保留
android11-5.4
内核。升级到
android12-5.4
内核。
示例 2:用户拥有一款随附 android12-5.4
或 android12-5.10
内核的 Android 12 设备,在升级到 Android 13 时可以选择以下任一选项
升级到
android13-5.10
或android13-5.15
GKI 2.0 内核(强烈推荐)。保留
android12-5.4
GKI 1.0 内核。保留
android12-5.10
GKI 2.0 内核。
特别是对于 Treble 合规性测试,我们建议您执行以下操作之一
将合作伙伴内核替换为经过认证的 GKI 1.0 内核(
android11-5.4
或android12-5.4
)。搭载经过认证的 GKI 2.0 内核(
android12-5.10
、android13-5.10
或android13-5.15
)发货,具体取决于您的选择。
您可以从通用内核映像 (GKI) 版本下载 GKI 2.0 版本。