Android 일반 커널

AOSP 일반 커널(Android 일반 커널 또는 ACK라고도 함)은 kernel.org 커널의 다운스트림이며 메인라인 또는 LTS(장기적 지원) 커널로 병합되지 않은 Android 커뮤니티의 관심 패치를 포함합니다. 이러한 패치에는 다음이 포함될 수 있습니다.

  • Android 기능에 필요한 업스트림 기능의 백포트 및 선별
  • Android 기기에 사용할 준비가 되었지만 아직 개발 업스트림에 있는 기능
  • 다른 생태계 파트너에게 유용한 공급업체/OEM 기능

android-mainline은 Android 기능의 기본 개발 브랜치입니다. Linux 메인라인은 Linus Torvalds가 출시 또는 출시 후보를 게시할 때마다 android-mainline에 병합됩니다. 2019년 이전에는 최근 선언된 LTS 커널을 클론하고 Android 관련 패치를 추가하여 Android 일반 커널을 생성했습니다. 2019년에 이 프로세스는 android-mainline에서 새로운 Android 일반 커널을 브랜칭하도록 변경되었습니다. 이 새로운 모델은 동일한 결과를 증분 방식으로 달성하여 포트를 전달하고 Android 패치를 테스트하는 데 따른 수고를 덜어줍니다. android-mainline은 중요한 지속적 테스트를 거치며 이 모델은 게시된 날부터 고품질 커널을 보장합니다.

새 LTS가 업스트림으로 선언되면 해당하는 일반 커널이 android-mainline에서 브랜칭됩니다. 이를 통해 파트너는 android-mainline에서 병합하는 방식으로 LTS 버전을 선언하기 전에 프로젝트를 시작할 수 있습니다. 새로운 일반 커널 브랜치가 생성된 후 파트너는 병합 소스를 새 브랜치로 원활하게 변경할 수 있습니다.

다른 일반 커널 브랜치는 연결된 LTS 커널에서 정기적인 병합을 수신합니다. 이러한 병합은 일반적으로 LTS 버전이 게시된 직후에 진행됩니다. 대상 예를 들어 Linux 6.1.75가 게시되었을 때 6.1 공통 커널 (android14-6.1) 파트너는 커널을 업데이트하여 LTS 및 Android 관련 버그 수정을 최신 상태로 유지하세요.

ACK KMI 커널 브랜치

GKI 커널에는 안정적인 커널 모듈 인터페이스가 있습니다. KMI는 식별되기 때문에 브랜치의 이름은 ANDROID_RELEASE~KERNEL_VERSION 예를 들어 6.1 GKI는 Android 14용 커널의 이름은 android14-6.1입니다. 대상 Android 15 (AOSP 실험용)의 경우 GKI 커널 android15-6.6는 다음과 같았습니다. 을 도입하였습니다.

기능 및 출시 커널

Android 15 (AOSP 실험용) 이전에는 최신 커널 3개 중 하나 기기 실행에 사용될 수 있습니다. 시작 Android 15 (AOSP 실험용)에서는 두 가지 최신 커널 버전이 기기 실행에 사용될 수 있습니다. 출시 커널은 Android 15 (AOSP 실험용)는 android15-6.6android14-6.1입니다.

플랫폼을 업데이트할 때 커널 업그레이드가 필요하지 않기 때문입니다. 플랫폼 릴리스의 최신 기능이 없는 커널은 계속해서 사용됩니다. 따라서 Android 14(예: android14-6.1)는 다음에서 사용할 수 있습니다. 최신 버전으로 업그레이드한 후에도 Android 15 (AOSP 실험용)

Android 플랫폼 버전 출시 커널 기능 커널
Android 15 (AOSP 실험용) (2024) android15-6.6
android14-6.1
android15-6.6
Android 14(2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android14-6.1
android14-5.15
Android 13(2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12(2021) android12-5.10
android12-5.4
android11-5.41
android-4.19-stable
android12-5.10
android12-5.4
Android 11(2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 연결된 BSP가 플랫폼 출시에 맞게 업데이트되었습니다. 더 일반적인 측면에서 커널의 Android 출시 번호타겟 FCM 버전 이상이어야 합니다. 자세한 내용은 공급업체 인터페이스 객체: 커널 브랜치 매칭을 참고하세요.

일반 커널 계층 구조

Android-mainline에서 브랜치

일반 커널 계층 구조의 최상위 수준은 그림 1에 나와 있습니다.

android-mainline 커널에서 일반 커널 만들기

그림 1. android-mainline 커널에서 일반 커널 만들기

새로운 Android 공통 커널 android14-6.1가 2022년에는 android-mainline입니다. 2023년, 다음 LTS가 선언되었을 때 android15-6.6android-mainline에서 브랜칭되었습니다.

그림 1과 같이 각 커널 버전은 GKI 커널 2개의 기반이 될 수 있습니다. 예를 들어 두 개의 v5.15 커널은 android13-5.15android14-5.15입니다. 둘 다 각 플랫폼 릴리스를 위한 기능 커널입니다. 이 5.10도 마찬가지였습니다. android12-5.10는 LTS가 생성될 때 생성됨 선언되고 커널의 android12-5.10에서 분기된 android13-5.10 Google Workspace for Education Plus의 Android 13 Android 시작하기 15 (AOSP 실험용) (2024), 커널 버전당 새로운 GKI 커널 1개 (android15-6.1 커널 없음)

ACK KMI 브랜치 수명 주기

ACK KMI 브랜치의 수명 주기는 아래 그림 2에 나와 있습니다.

6.6 ACK KMI 브랜치 수명 주기

그림 2. 6.6 ACK KMI 브랜치 수명 주기

개발 프로세스와 브랜치 수명 주기를 명확히 하기 위해 그림 2에서는 6.6의 ACK KMI 브랜치

각 ACK KMI 브랜치는 각 브랜치에서 서로 다른 색으로 그림 2에 표시된 3개 단계를 순환합니다. 표시된 대로 LTS는 단계에 상관없이 정기적으로 병합됩니다.

개발 단계

ACK KMI 브랜치가 생성되면 ACK KMI 브랜치가 개발 단계( dev)을 포함하고 있으며 다음 Android의 기능 기여를 위해 열려 있습니다. 있습니다. 그림 2에서 android15-6.6는 6.6이 생성될 때 생성되었습니다. 새 업스트림 LTS 커널로 선언되었습니다.

안정화 단계

ACK KMI 브랜치가 기능이 완료되었다고 선언하면 안정화 단계 (그림 2에 안정화로 표시됨). 파트너 기능 및 버그 수정은 계속 허용되지만 KMI 추적을 사용하여 변경사항을 감지할 수 있습니다. 인터페이스에 영향을 줍니다. 이 단계에서는 KMI 브레이킹 체인지가 허용됩니다. KMI 정의는 사전 정의된 주기 (일반적으로 두 개마다 있습니다. KMI 모니터링에 관한 자세한 내용은 GKI 개요를 참고하세요.

KMI 고정 단계

새로운 플랫폼 출시가 AOSP에 푸시되기 전에 ACK KMI 브랜치는 고정되며 브랜치의 전체 기간 동안 고정 상태로 유지됩니다. 즉, 안정적인 KMI에 영향을 주지 않고는 해결할 수 없는 심각한 보안 문제가 확인되지 않는 한 KMI 브레이킹 체인지가 허용되지 않습니다. KMI 중단을 방지하기 위해 Android 기기에 수정이 필요하지 않은 경우에는 LTS에서 병합되는 일부 패치를 수정하거나 삭제할 수 있습니다.

ACK KMI 브랜치가 고정되면 기존 KMI 일반 커널이 손상되지 않는 한 버그 수정 및 파트너 기능이 허용될 수 있습니다. 현재 KMI를 구성하는 인터페이스가 영향을 받지 않는 한 KMI는 새로 내보낸 기호로 확장될 수 있습니다. 새 인터페이스는 KMI에 추가되면 즉시 안정화되며 향후 변경으로 인해 손상되지 않습니다.

예를 들어 다음과 같이 KMI 인터페이스 일반 커널에서 사용하는 구조에 필드를 추가하는 것은 인터페이스 정의를 변경하기 때문에 허용되지 않습니다.

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

그러나 다음과 같이 새 함수를 추가하는 것은 괜찮습니다.

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

GKI 커널의 전체 기간에 사용자 공간에서 이전 버전과의 호환성이 유지되므로 기기가 출시된 Android 플랫폼 출시에서 커널을 안전하게 사용할 수 있습니다. 이전 출시를 사용한 지속적인 테스트를 통해 호환성이 유지됩니다. 따라서 그림 2에서 android15-6.6는 커널은 Android 15 (AOSP 실험용) 기기 이상 기기에서 사용할 수 있습니다. 기기에서 사용할 수 있습니다. Android 플랫폼 릴리스는 이전 버전과도 호환되므로 android14-6.1 커널을 사용할 수 있음 Android 15 (AOSP 실험용) 기기의 경우

KMI 세대 번호

안정화 단계 또는 보안 문제 중에 LTS 병합이 발생한 경우 이후에 KMI 변경 패치를 수락해야 하는 다른 이벤트에는 build.config.common에 기록된 KMI 세대 번호가 증가합니다. 이 현재 KMI 세대는 uname 명령어를 사용하여 찾을 수 있습니다.

$ uname -r
6.6.30-android15-6-g86d10b30f51f

플랫폼 출시 이후의 번호는 KMI 세대입니다 (이 경우 6).

KMI 세대가 변경되면 커널이 이전 KMI 세대와 일치하는 공급업체 모듈과 호환되지 않으므로 모듈을 다시 빌드하고 커널로 동기식으로 업데이트해야 합니다. KMI Freeze 후 KMI 생성 변경 매우 드물 것으로 예상됩니다

커널 간 호환성

동일한 LTS 패밀리의 커널 간 호환성 요구사항은 새로운 GKI 커널부터 변경됩니다.

GKI 커널

GKI 커널은 커널 버전을 지원한 모든 Android 플랫폼 출시와 하위 호환성을 유지합니다. 또한 Android 플랫폼 출시는 이전 출시의 GKI 커널과 호환됩니다. 그래서 android14-6.1 커널을 안전하게 사용할 수 있으며 다음을 실행하는 기기의 Android 14 (2023) Android 15 (AOSP 실험용) (2024). 호환성은 지원되는 모든 출시에서 GKI 커널의 지속적인 VTS 및 CTS 테스트

KMI는 안정적이므로 공급업체 이미지에서 커널 모듈을 다시 빌드하지 않고도 커널을 업데이트할 수 있습니다.

KMI 호환성은 다른 GKI 커널 간에 유지되지 않습니다. 따라서 예를 들어 android14-6.1 커널은 android15-6.6로 대체할 수 없습니다. 커널을 다시 빌드해 줍니다.

GKI 커널은 초기 및 후속 출시에서만 지원됩니다. 이전 출시에서는 지원되지 않습니다. 따라서 android15-6.6 커널은 실행 중인 Devics에서 지원되지 않습니다. Android 14 (2023).

호환성 매트릭스

이 표는 각 Android 플랫폼 출시에서 지원되고 테스트된 커널 버전을 보여 줍니다.

Android 플랫폼 버전 업그레이드가 지원되는 커널 출시가 지원되는 커널
Android 15 (AOSP 실험용) (2024) 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
android15-6.6
android14-6.1
Android 14(2023) 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
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13(2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12(2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11(2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

지원 전체 기간 및 보안 패치

ACK는 업스트림에서 LTS 병합을 수신하고 Android 관련 코드의 버그 수정을 수신합니다. 이러한 수정사항에는 월간 Android ACK와 관련된 보안 게시판

ACK는 상응하는 업스트림 안정화 커널보다 더 오래 지원될 수 있음 kernel.org에서 확인할 수 있습니다. 이 경우 Google은 이 문서에 표시된 지원 종료 (EOL)일까지 연장된 지원을 제공합니다. 섹션으로 이동합니다. EOL된 커널은 더 이상 이를 실행하는 기기는 취약한 것으로 간주됩니다.

커널 6.6부터 안정적 커널의 지원 수명은 다음과 같습니다. 4년

다음 표는 지원되는 ACK의 전체 기간을 보여줍니다.

ACK 브랜치 출시
날짜
지원
전체 기간
(년)
지원 종료
android-4.19-stable 2018-10-22 6 2025-01-01
Android11~5.4 2019-11-24 6 2026-01-01
android12-5.4 2019-11-24 6 2026-01-01
Android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
Android13~5.15 2021-10-31 6 2028-07-01
android14-5.15 2021-10-31 6 2028-07-01
Android 14~6.1 2022-12-11 6 2029-07-01
Android15~6.6 2023-10-29 4 2028-07-01

일반 커널 테스트

일반 커널은 공급업체의 다운스트림 테스트 외에도 여러 CI 시스템에서 테스트됩니다.

Linux 커널 기능 테스트

Linux 커널 기능 테스트 (LKFT) 테스트는 자체 테스트 컨트롤러의 kselftest, LTP, VTS, CTS를 비롯한 다양한 테스트 모음을 실제 arm32 및 arm64 기기 세트 최근 테스트 결과는 여기에서 확인할 수 있습니다.

KernelCI 테스트

새 패치가 일반 커널 분기에 커밋될 때마다 KernelCI 빌드 및 부팅 테스트가 시작됩니다. 수백 가지 빌드 구성이 다양한 보드에서 테스트 및 부팅됩니다. Android 커널의 최근 결과는 여기에서 확인할 수 있습니다.

Android 사전 제출 및 사후 제출 테스트

사전 제출 테스트는 Android 일반 커널에 장애가 도입되는 것을 방지하는 데 사용됩니다. 테스트 결과 요약은 Android 일반 커널 gerrit의 코드 변경사항 '확인' 탭에서 확인할 수 있습니다.

Android 사후 제출 테스트는 새 패치가 ci.android.com의 Android 일반 커널 브랜치에 커밋될 때 Android 일반 커널 브랜치에 새로 출시된 빌드에서 실행됩니다. aosp_kernelci.android.com에 부분 브랜치 이름으로 입력하면 사용 가능한 결과와 함께 커널 브랜치 목록이 표시됩니다. 예를 들어 android-mainline의 결과는 여기에서 확인할 수 있습니다. 특정 빌드를 클릭하면 Test Results 탭에서 테스트 상태를 확인할 수 있습니다.

Android 플랫폼 소스 트리에서 테스트 그룹 kernel-presubmit을 사용한 테스트 매핑으로 정의된 테스트는 Android 커널 브랜치의 사전 제출로 실행됩니다. 예를 들어 test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING의 다음 구성은 vts_kernel_proc_file_api_test를 Android 일반 커널 코드 체크인 시 사전 제출 테스트로 사용 설정합니다.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

0일 테스트

0일 테스트는 새 패치가 커밋될 때 모든 Android 일반 커널 분기에서 패치별 테스트를 실행합니다. 다양한 부팅, 기능, 성능 테스트가 실행됩니다. 공개 그룹 cros-kernel-buildreports에 참여합니다.

테스트 매트릭스

Android 일반 커널 Android 플랫폼 출시 테스트 모음
기본 15 14 13 12 11 10 LKFT KernelCI 사전 제출 사후 제출 0일
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

Android 일반 커널에 참여

일반적으로 기능 개발은 Android 일반 커널이 아닌 메인라인 Linux에서 진행해야 합니다. 업스트림 개발이 적극 권장되며 개발이 허용된 후에는 필요에 따라 특정 ACK 분기로 쉽게 백포팅할 수 있습니다. Android 커널 팀이 Android 생태계의 이점을 활용할 수 있는 업스트림 작업을 지원해 드립니다.

Gerrit에 패치를 제출하고 이러한 참여 가이드라인에 따릅니다.