Android内核常见问题

本文档包含有关 Android 内核(也称为通用内核映像 (GKI) 内核)的常见问题。如果您不熟悉 GKI 和 GKI 内核术语,请参阅内核概述

可以在稳定的内核中更改内核模块接口 (KMI) 符号列表吗?

不影响现有 KMI 的更改可以添加到冻结的内核中。这些更改包括新的导出函数和符号列表条目。有关详细信息,请参阅管理符号列表

我可以更改稳定内核中供应商模块使用的结构吗?

不能在 KMI 冻结的内核中更改属于 KMI 接口的结构。在 KMI 冻结之前,可以更改这些结构。

只要不破坏二进制/源代码兼容性,我可以更改内核吗?

可以按照Android 特定补丁 中的说明进行不影响 KMI 的更改。

GKI 如何处理内核配置?

有关内核配置的信息,请参阅对 gki_defconfig 的更改

如何处理上游错误修复以覆盖现有 GKI 模块?

如果您基于Android Common Kernel (ACK)中的驱动程序创建供应商模块,则由您负责确保将来自上游的错误修复和 ACK 传播到您的模块。通常,不加修改地使用 GKI 内核和 GKI 模块符合您的最大利益,因此这些更新由 Google 一致提供。

是否有 GKI 特定测试?

供应商测试套件 (VTS)测试可验证是否安装了经过认证的 GKI 版本,并强制执行每个版本的 GKI 要求。例如,有针对引导标头 v3 的 Android 12 VTS 测试,用于验证运行 5.10 内核的设备中是否存在所需的分区。

如何为设备构建创建项目 defconfig 片段文件?

除了gki_defconfig之外,许多 GKI 兼容设备使用配置片段来描述构建供应商模块所需的配置选项。 ACK 代码库的示例包括 Cuttlefish 和 DB845c。无法避免手动检查配置选项以优化片段,但内核源代码中的scripts/diffconfig对于比较gki_defconfiggki_defconfig+device.fragment的结果很有用。

是否有 modprobe 将 - 和 _ 视为等效的解决方法?

modprobe 手册页包含这样的描述:“ modprobe从 Linux 内核智能地添加或删除模块:注意,为方便起见,模块名称中的 _ 和 - 没有区别(执行自动下划线转换)。” GKI 团队遵守标准的上游约定,因此供应商工具或模块命名约定必须考虑到这种遵守。

如何启用 debugfs 以供内部使用?

有关启用 debugfs 的详细信息,请参阅侵入性下游调试功能

如何解决启用特定模块配置的 GKI 内核之间不匹配的 ABI?

GKI 内核和模块配置之间不匹配的 ABI 表示隐式模块配置依赖关系,其中启用模块会导致二进制配置构建到生成的内核映像中。联系 Android 内核团队 ( kernel-team@android.com ) 以确定前进的道路。确定符号列表后,在问题跟踪器中创建一个错误并将更改上传到符号列表。