Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Android 일반 커널

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

  • Android 기능에 필요한 업스트림 기능의 백포트 및 선별
  • Android 기기에 사용할 수 있지만 여전히 개발 업스트림에 있는 기능(예: Energy Aware Scheduler 작업 배치 최적화)
  • 다른 생태계 파트너에게 유용한 공급업체/OEM 기능(예: sdcardfs)

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 4.19.64는 게시될 때 4.19 일반 커널(예: android-4.19-q)로 병합되었습니다. 파트너는 정기적으로 일반 커널에서 제품 커널로 병합하여 LTS 및 Android 관련 버그 수정을 최신 상태로 유지하는 것이 좋습니다.

약관

다음은 이 문서에서 Android 일반 커널 정책을 설명하는 데 사용되는 몇 가지 새로운 용어입니다.

기능 커널

최신 Android 플랫폼 출시의 기능으로 향상된 커널을 기능 커널이라고 합니다. Android 11의 경우 기능 커널은 커널 버전 4.14.y, 4.19.y 및 5.4.y를 기반으로 합니다. 이전 플랫폼 출시에서 기능 커널은 출시 커널과 동일했습니다. 하지만 Android 12에는 기능 커널 2개와 출시 커널 3개가 있습니다.

GKI(일반 커널 이미지)

Android 11부터 Android 일반 커널은 GKI(일반 커널 이미지)를 만드는 데 사용됩니다. GKI는 Aarch64 커널 이미지로, 공급업체 모듈에서 구현된 SoC 및 드라이버 지원이 있는 기기를 실행하는 데 사용할 수 있습니다. 자세한 내용은 GKI 개요를 참조하세요.

커널 모듈 인터페이스

GKI는 핵심 커널을 공급업체 모듈에서 비동기식으로 업데이트할 수 있는 안정적인 KMI(커널 모듈 인터페이스) 개념을 도입합니다. KMI가 고정되면 기존 공급업체 모듈과의 바이너리 호환성을 손상시키는 변경사항이 있을 수 없습니다. KMI에 관한 자세한 내용은 GKI 개요를 참조하세요.

출시 커널

지정된 출시 커널을 사용하여 특정 Android 플랫폼 출시로 기기를 시작할 수 있습니다. Android 11의 경우 커널 버전 4.14.y, 4.19.y 및 5.4.y를 기반으로 하는 커널로 기기를 시작할 수 있습니다.

일반 커널 분기 유형

KMI 커널 분기

KMI 커널에는 안정적인 커널 모듈 인터페이스가 있습니다. KMI는 커널 버전과 Android 플랫폼 출시로 고유하게 식별되므로 분기 이름은 <androidRelease>-<kernel version>입니다. 예를 들어 Android 11용 5.4 KMI 커널의 이름은 android11-5.4.입니다. Android 12의 경우 KMI 커널 두 개(android12-5.4, android12-5.10)가 더 있습니다.

레거시 디저트 커널 분기

레거시 디저트 커널은 새로운 기능 개발이 Android 일반 커널의 병합을 방해하지 않도록 보장하기 위해 생성되었습니다. 분기는 연결된 디저트 출시 전에 생성되었고 LTS에서 정기적으로 병합을 수신하지만 새로운 기능은 없습니다. 예를 들어 android-4.9-q는 LTS 4.9.y 분기에서 병합을 수신합니다.

커널 버전이 출시 커널이 아닌 경우 디저트 커널이 생성되지 않았지만 최신 플랫폼 출시와 연결된 커널은 향후 Android 플랫폼 출시로 업그레이드할 수 있습니다. 예를 들어 android-4.4-pandroid-4.4* 디저트 분기의 마지막이었으므로 원래 플랫폼 출시인 Android 9(Pie)에서 지원 및 테스트됩니다. 또한 4.4 커널인 Android 10 및 Android 11을 실행하는 기기의 업그레이드를 지원하는 플랫폼 출시에서 지원 및 테스트됩니다.

Android 플랫폼 출시의 디저트 이름 지정 체계는 Android 10에서 삭제되었으므로 android-4.14-randroid-4.19-r이라고 했던 마지막 디저트 출시를 대신 android-4.14-stableandroid-4.19-stable라고 했습니다.

Android 11부터 KMI 커널이 디저트 커널을 대체하므로 지원되는 디저트 커널의 전체 목록이 이 표에 나와 있습니다.

Android 플랫폼 출시 커널 지원 만료일
Android 8.1(Oreo) android-4.4-o
android-4.9-o
2021년 6월
Android 9(Pie) android-4.4-p
android-4.9-p
android-4.14-p
2022년 1월
Android 10 android-4.9-q
android-4.14-q
android-4.19-q
2023년 1월
Android 11 android-4.14-stable
android-4.19-stable
2024년 1월

레거시 출시 커널 분기

출시 커널은 월별 Android 보안 게시판에서 인용되는 패치의 백포트를 제공하도록 유지보수됩니다. 이 커널은 새로운 Android 플랫폼 출시가 있을 때 각 출시 커널용으로 생성되었습니다. 지원 전체 기간 및 보안 패치의 설명대로 연결된 커널 또는 플랫폼 출시가 지원 중단되면 이 출시 커널은 지원 중단됩니다.

매월 Android 보안 게시판이 게시될 때 이러한 커널은 업스트림 커널 및 Android 일반 커널과 관련된 게시판에 인용되는 패치의 백포트로 업데이트됩니다. 이러한 커널은 LTS 패치를 수신하지 않으므로 부 버전 번호는 변경되지 않습니다. 또한 공급업체별 패치의 백포트를 포함하지 않습니다.

Android 11 이상 플랫폼 출시에서 파트너는 디저트 또는 KMI 커널에서 병합하여 Android 보안 게시판에서 인용되는 패치를 적용해야 합니다. Android 11 이상 플랫폼 출시에 관한 출시 커널은 생성되지 않습니다.

따라서 이 표에 나와 있는 것이 14개 출시 커널의 전체 목록이며 어떤 항목도 더 이상 추가되지 않습니다.

Android 플랫폼 출시 커널 지원 만료일
Android 8.0(Oreo) android-3.18-o-release
android-4.4-o-release
android-4.9-o-release
2021년 1월
Android 8.1(Oreo MR1) android-3.18-o-mr1
android-4.4-o-mr1
android-4.9-o-mr1
2021년 6월
Android 9(Pie) android-4.4-p-release
android-4.9-p-release
android-4.14-p-release
2022년 1월
Android 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
2023년 1월

기능 및 출시 커널

각 Android 플랫폼 출시는 3개 Linux 커널 버전 중 하나를 기반으로 새 기기 시작을 지원합니다. 아래 표에서 보듯이 Android 11의 출시 커널은 android-4.14-stable, android-4.19-stableandroid11-5.4입니다.

플랫폼 출시를 업데이트할 때는 일반적으로 커널 업그레이드가 필요하지 않으므로 플랫폼 출시의 최신 기능이 누락된 커널은 기기를 시작하는 데 계속 사용될 수 있습니다. 따라서 android-4.19-q처럼 Android 10용으로 설계된 커널은 플랫폼 출시를 Android 11로 업그레이드한 후에도 기기에서 사용할 수 있습니다. Android 12부터는 지원해야 하는 안정적인 KMI 수를 제한하기 위해 기능 커널이 출시 커널보다 더 적습니다.

Android 플랫폼 출시 출시 커널 기능 커널
Android 9(2018) android-4.4-p
android-4.9-p
android-4.14-p
android-4.4-p
android-4.9-p
android-4.14-p

Android 10(2019) android-4.9-q
android-4.14-q
android-4.19-q

android-4.9-q
android-4.14-q
android-4.19-q
Android 11(2020) android-4.14-stable
android-4.19-stable
android11-5.4
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12(2021) android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android T(AOSP 실험용)(2022)1 android12-5.4
android12-5.10
android13-5.10
android13-5.x
android13-5.10
android13-5.x2

1 Android T(AOSP 실험용)(2022)는 커밋되지 않았으며 기능 커널 2개와 출시 커널 3개로 향후 새로운 분기 모델이 어떻게 진행될 것인지 보여 주기 위해서만 표시됩니다.

2 여기서 5.x는 2021년 말에 LTS로 선택되는 커널 버전입니다.

일반 커널 계층 구조

android-mainline에서 분기

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

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

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

2020년에 새로운 Android 일반 커널 android12-5.10android-mainline에서 분기되었습니다. 2021년에 다음 LTS가 선언되면 android13-5.x(여기서 5.x.y는 LTS로 선택된 커널 버전)가 android-mainline에서 분기됩니다.

그림 1에 표시된 대로 각 커널 버전은 KMI 커널 2개의 기초가 됩니다. 예를 들어 v5.4 커널 2개는 android11-5.4android12-5.4이며 둘 다 각 플랫폼 출시를 위한 기능 커널입니다. 이는 5.10의 경우도 마찬가지입니다. android12-5.10은 LTS가 선언되었을 때 생성됐고 android13-5.10은 Android T(AOSP 실험용)용 기능 개발을 허용하는 2021년 봄의 커널 기능 완료 주요 일정에 따라 android12-5.10에서 분기될 예정입니다.

KMI 분기 수명 주기

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

5.10 KMI 분기 수명 주기

그림 2. 5.10 KMI 분기 수명 주기

개발 프로세스 및 분기 수명 주기를 명확히 하기 위해 그림 2는 5.10의 KMI 분기에 초점을 맞춥니다.

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

개발 단계

KMI 분기가 생성되면 개발 단계(그림 2의 dev)가 시작되며 다음 Android 플랫폼 출시의 기능 참여를 위해 작동합니다. 그림 2에서 보면 5.10이 새 업스트림 LTS 커널로 선언되었을 때 android12-5.10이 생성되었습니다. 커널 버전의 두 번째 KMI 분기는 후속 출시를 개발할 수 있도록 초기에 생성됩니다. 그림 2에서 android12-5.10가 개발 단계에서 전환되면 android13-5.10가 생성됩니다.

안정화 단계

KMI 분기가 기능이 완전한 것으로 선언되면 그림 2에서 stab이라는 라벨이 지정된 안정화 단계가 시작됩니다. 파트너 기능과 버그 수정도 계속 허용되지만 KMI 추적을 통해 인터페이스에 영향을 주는 변경사항을 감지할 수 있습니다. 이 단계에서는 KMI 브레이킹 체인지가 허용되지만 필요에 따라 KMI 정의를 업데이트해야 합니다. KMI 모니터링에 관한 자세한 내용은 GKI 개요를 참조하세요.

KMI 고정 단계

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

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);

KMI 커널의 전체 기간에 사용자 공간에서 이전 버전과의 호환성이 유지되므로 커널을 기기가 출시된 Android 플랫폼 출시에서 안전하게 사용할 수 있습니다. 이전 출시를 사용한 지속적인 테스트를 통해 호환성이 유지됩니다. 따라서, 그림 2의 android12-5.10 커널은 Android 12 기기와 Android T(AOSP 실험용) 기기에 사용할 수 있습니다. Android 플랫폼 출시는 이전 버전과도 호환되므로 출시 또는 업그레이드를 위해 Android T(AOSP 실험용) 기기에 android12-5.4 커널을 사용할 수 있습니다.

고정 단계에 들어가면 분기는 KMI 세대 번호가 포함된 KMI 버전 문자열로 git 태그됩니다. 예를 들어 고정된 android11-5.4는 KMI 버전 문자열 5.4-android11-0으로 태그되었습니다. 여기서 후행 0은 KMI 세대 번호입니다. KMI 변경 패치를 허용해야 하는 보안 문제나 기타 이벤트가 있으면 KMI 세대 번호가 증가하고 분기가 다시 태그됩니다. 예를 들어 변경이 android11-5.4에 허용되면 분기는 새로운 KMI 버전인 5.4-android11-1로 태그됩니다. 현재 KMI 세대는 uname 명령어를 사용하여 찾을 수 있습니다.

$ uname -r
5.4.61-android11-0-00153-ga972f59040e4

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

KMI 세대가 변경되면 커널이 이전 KMI 세대와 일치하는 공급업체 모듈과 호환되지 않으므로 모듈을 다시 빌드하고 커널로 동기식으로 업데이트해야 합니다. KMI 세대 변경은 거의 발생하지 않습니다.

커널 간 호환성

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

KMI 커널

새로운 KMI 커널은 커널 버전을 지원한 모든 Android 플랫폼 출시와 하위 호환성을 유지합니다. 따라서 Android 12용으로 개발된 android12-5.4 커널은 Android 11을 실행하는 기기에서 안전하게 사용할 수 있습니다. 이전 출시에서 안정적인 커널의 지속적인 VTS 및 CTS 테스트를 통해 호환성 유지가 보장됩니다.

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

레거시 커널

레거시 디저트 커널(*-o, *-p, *-q, *-stable)은 Android 플랫폼 출시와 호환되지 않지만, 이전 Android 플랫폼 출시 2개의 커널은 업그레이드가 지원됩니다. 따라서 android-4.19-q 기반 커널을 사용하여 Android 10으로 출시된 기기는 Android 2020으로 업그레이드할 때 android-4.19-q 커널을 계속 사용하거나 android-4.19-stable을 지원하도록 공급업체별 코드를 업데이트할 수 있습니다.

호환성 매트릭스

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

Android 플랫폼 출시 업그레이드가 지원되는 커널 출시가 지원되는 커널
Android 9(2018) android-3.10
android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
Android 10(2019) android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
android-4.9-q
android-4.14-q
android-4.19-q
Android 11(2020) android-4.4-o
android-4.4-p
android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12(2021) android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10

지원 전체 기간 및 보안 패치

Android 일반 커널은 연결된 LTS 커널 또는 Android 플랫폼 출시가 더 이상 지원되지 않을 때까지 지원됩니다. 커널이 지원되는 동안에는 업스트림의 LTS 병합 및 Android 관련 코드의 버그 수정을 계속 수신합니다. 이러한 수정에는 Android 일반 커널과 관련된 월별 Android 보안 게시판에 인용되는 모든 커널 보안 패치가 포함됩니다.

파트너는 Android 일반 커널에서 정기적으로 병합하여 가능한 모든 커널 보안 패치를 가져올 것이라고 확신할 수 있습니다.

일반 커널 테스트

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

Linaro 커널 기능 테스트

LKFT(Linaro 커널 기능 테스트) 테스트는 일련의 물리적 arm32 및 arm64 기기에서 kselftest, LTP, VTS, CTS를 비롯한 다양한 테스트 도구 모음을 시작합니다. 최근 테스트 결과는 여기에서 확인할 수 있습니다.

KernelCI 테스트

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

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

사전 제출 테스트는 일반 커널에 장애가 도입되는 것을 방지하는 데 사용됩니다. 현재 이 결과는 공개적으로 제공되지 않습니다.

새 패치가 일반 커널 분기에 커밋되면 Android 사후 제출 테스트가 실행됩니다. 부분 분기 이름으로 aosp_kernel을 입력하면 사용 가능한 결과가 있는 커널 분기 목록이 표시됩니다. 예를 들어 android-mainline의 결과는 여기에서 확인할 수 있습니다.

0일 테스트

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

테스트 매트릭스

Android 일반 커널 Android 플랫폼 출시 테스트 도구 모음
마스터 11 10 9(Pie) 8(Oreo) LKFT KernelCI 사전 제출 사후 제출 0일
android-mainline
android12-5.4
android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q
android-4.14-q
android-4.9-q
android-4.14-p
android-4.9-p
android-4.4-p
android-4.9-o
android-4.4-o
android-3.18

Android 일반 커널에 참여

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

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