AOSP通用内核(也称为Android通用内核或ACK)是kernelorg内核的下游,包含与Android社区相关但尚未合并到主干内核或长期支持(LTS)内核的补丁。这些补丁可能包括:

- Android功能所需的向后移植和精选的上游功能

- 可供Android设备使用但仍处于上游开发阶段的功能

- 对其他生态合作伙伴有用的供应商/原始设备制造商(OEM)功能

通用内核层次结构从android-mainline分支开始,如图1所示。基于android-mainline内核创建通用内核时,可以使用以下版本:

- android14-6.1

- android-mainline

- android15-6.6

- android-mainline

此外,还有其他版本可用,如:

- android14-6.1

- android14-6.1

- android15-6.6

- android14-6.1

- android15-6.6

- android14-6.1

- android14-5.15

- android13-5.15

- android13-5.10

- android12-5.10

- android12-5.4

- android11-5.4

- android-4.19-stable

- android12-5.10

- android12-5.4

- android11-5.4

- android-4.19-stable

- android11-5.4

- android-4.19-stable

这些版本中的一些可能已经过时或不再维护。在选择通用内核版本时,请确保了解其稳定性和兼容性。

ACK KMI分支生命周期包括以下阶段:

1. 开发阶段:在这个阶段,ACK KMI分支会定期合并LTS。例如,android15-6.6和android12-5.10。这个阶段接受合作伙伴功能和bug修复。

2. 稳定阶段:当ACK KMI分支被声明为功能完善后,它会进入稳定阶段。在这个阶段,仍然接受合作伙伴功能和bug修复,但会启用KMI跟踪,以检测任何会影响接口的更改。此外,还会接收KMI破坏性更改,并且KMI定义按照预定义的频率进行更新,通常每两周更新一次。

3. KMI冻结阶段:在将新平台版本推送到AOSP之前,ACK KMI分支会被冻结,并在分支的整个生命周期内保持该状态。这意味着,除非发现严重的安全问题,并且在不影响稳定版KMI的情况下无法解决该问题,否则不会接受任何KMI破坏性更改。为了避免KMI遭到破坏,在没有必要对Android设备进行修复时,可能会修改或丢弃从LTS合并的某些补丁。

在稳定阶段和KMI冻结阶段,可以接受bug修复和合作伙伴功能,但前提是不会破坏现有KMI通用内核。可以使用新的导出符号扩展KMI,但前提是不会影响构成当前KMI的接口。当新接口添加到KMI后,它们会立即变为稳定状态,并且不会被将来的更改所破坏。

以下是重构后的内容:

在 Android 系统构建过程中,如果需要添加新的功能或修改现有功能,可以通过添加新函数来实现。例如,我们可以创建一个名为 `foo2` 的结构体,其中包含一个名为 `orig_foo` 的 `foo` 类型结构体成员和一个名为 `new_field` 的整型成员。然后,我们可以在 `do_foo2` 函数中调用 `do_stuff2` 函数,并将 `myarg` 参数传递给它。最后,我们需要使用 `EXPORT_SYMBOL_GPL` 宏将 `do_foo2` 函数导出,以便其他模块可以使用它。

```c

struct foo2 {

struct foo orig_foo;

int new_field;

};

int do_foo2(struct foo2 &myarg) {

do_stuff2(myarg);

}

EXPORT_SYMBOL_GPL(do_foo2);

```

当 KMI(Key Mobile Interface)代系发生变化时,内核可能与符合先前 KMI 代系的供应商模块不兼容。因此,需要重建这些模块并使其与内核同步更新。然而,在 KMI 冻结后,KMI 代系通常很少发生变化。

此外,从新的 GKI(Google Linux Integration)内核开始,同一 LTS(Long Term Support)系列的内核之间的兼容性要求可能会不断变化。为了确保系统的稳定性和安全性,建议在升级内核时仔细检查兼容性列表。

以下是一个兼容性列表示例:

| Android 平台版本 | 支持和测试的内核版本 |

|-----------|---------------------|

| android14-6.1 | android15-6.6 |

| android15-6.6 | android15-6.6 |

以下是重构后的段落结构:

- 生命周期

- Android 15-6.6,Android 14-6.1,Android 14-5.15,Android 13-5.15,Android 13-5.10,Android 12-5.10,Android 12-5.4,Android 11-5.4,Android 9-stable, Android 15-6.6, Android 14-6.1, Android 14-6.1, Android 14-5.15, Android 13-5.15, Android 13-5.10, Android 12-5.10, Android 12-5.4, Android 11-5.4, Android 9-stable, Android 14-6.1, Android 14-5.15, Android 13-5.15, Android 13-5.10, Android 12-5.10, Android 13-5.15, Android 13-5.10, Android 12-5.10, Android 12-5.4, Android 11-5.4, Android 9-stable, Android 9-stable, Android 11-5.4, Android 12-5.4, Android 12-5.10, Android 11-5.4, Android 9-stable, Android 9-stable

- 安全补丁程序

- 每个月的 Android Security Bulletin (ASB) 中都会包含与当前版本相关的所有内核安全补丁。这些补丁旨在修复与 ASB(或特定代码)相关的问题。

- 如果上游稳定内核的支持期间比 kernel.org上的相应稳定内核更长,则 Google 可以延长支持期。在这种情况下,Google 将支持直到服务终止 (EOL)日期为止。一旦内核服务终止,它们将不再受 Google 支持并且运行这些内核的设备将被视为易受攻击。

- 从内核6.6开始,稳定内核的支持周期为4年。

您好,以下是我找到的关于 Android 内核测试结果的信息:

- Android 供应商测试套件 (VTS) 提供了大量用于进行 Android 测试的功能,能够促进由测试驱动的开发流程,并自动执行 HAL 和 OS 内核测试。

- Linux 内核功能测试 (LKFT) 会在一组 arm32 和 arm64 物理设备上启动各种测试套件,包括 kselftest、LTP、VTS 和 CTS。您可以在这里找到最新的测试结果。

- 每次向通用内核分支提交新的补丁程序时,都会启动 KernelCI build-and-boot 测试。会在各种板卡上测试并启动数百种 build 配置。您可以在这里找到 Android 内核的最新结果。

在提交新补丁程序后,0 天测试会在所有 Android 通用内核分支上针对每个补丁程序进行测试。这些测试涵盖了启动、功能和性能等方面,以确保补丁程序的稳定性和兼容性。为了更好地为改进 Android 通用内核贡献力量,您可以加入公共组 `cros-kernel-buildreports` 并查看测试列表,其中包括以下内容:

- android-mainline

- android15-6.6

- android14-6.1

- android14-5.15

- android13-5.15

- android13-5.10

- android12-5.10

- android12-5.4

- android11-5.4

- android-4.19-stable

通常情况下,功能开发应该在 Linux Mainline 内核而非 Android 通用内核上完成。我们非常鼓励您进行上游开发,一旦上游接受您的开发成果,您可以根据需要轻松将其向后移植到特定的 ACK(Android Kernel)分支。为了促进 Android 生态系统的发展,Android 内核团队很乐意为您的上游开发工作提供支持。

要提交补丁程序到 Gerrit 并遵循这些贡献准则,请按照相应的流程操作。