Android 일반 커널

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

  • Android 기능에 필요한 업스트림 기능의 백포트 및 선별
  • Android 장치에 사용할 준비가 되었지만 아직 업스트림 개발 단계에 있는 기능입니다(예: Energy Aware Scheduler 작업 배치 최적화).
  • 다른 생태계 파트너(예: sdcardfs)에 유용한 공급업체/OEM 기능입니다.

android-mainline Android 기능의 기본 개발 브랜치입니다. Linus Torvalds가 릴리스 또는 릴리스 후보를 게시할 때마다 Linux 메인라인은 android-mainline 으로 병합됩니다. 2019년 이전에는 최근 선언된 LTS 커널을 복제하고 안드로이드 전용 패치를 추가하여 안드로이드 공통 커널을 구성했습니다. 이 프로세스는 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 관련 버그 수정을 최신 상태로 유지하는 것이 좋습니다.

ACK KMI 커널 분기

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

레거시 디저트 커널 브랜치

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

커널 버전이 출시 커널이 아닌 경우 디저트 커널이 생성되지 않았지만 최신 플랫폼 릴리스와 관련된 커널은 향후 Android 플랫폼 릴리스로 업그레이드하는 데 유효합니다. 예를 들어 android-4.9-q android-4.9* 디저트 브랜치의 마지막 버전이므로 원래 플랫폼 릴리스인 Android 10에서 지원 및 테스트되었습니다. 또한 4.9를 실행하는 기기의 업그레이드를 지원하는 플랫폼 릴리스에서도 지원 및 테스트되었습니다. 커널: Android 11 및 Android 12.

Android 플랫폼 릴리스의 디저트 이름 지정 체계가 Android 10에서 삭제되었기 때문에 android-4.14-randroid-4.19-r 이라고 불렸던 마지막 디저트 릴리스는 대신 android-4.14-stableandroid-4.19-stable 로 불렸습니다.

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

안드로이드 플랫폼 출시 핵심 지원 기간:
안드로이드 10 android-4.9-q
android-4.14-q
android-4.19-q
2023년 1월
안드로이드 11 android-4.14-stable
android-4.19-stable
2024년 1월
2024년 12월

레거시 릴리스 커널 분기

릴리스 커널은 월간 Android 보안 게시판 에 인용된 패치의 백포트를 제공하기 위해 유지관리됩니다. 새로운 Android 플랫폼이 출시될 때 각 출시 커널에 대해 생성되었습니다. 지원 수명 및 보안 패치 에 설명된 대로 관련 커널 또는 플랫폼 릴리스가 더 이상 사용되지 않으면 더 이상 사용되지 않습니다.

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

Android 11 이상의 플랫폼 릴리스에서는 파트너가 디저트 또는 GKI 커널에서 병합하여 Android 보안 게시판에 언급된 패치를 적용해야 합니다. Android 11 이상 플랫폼 릴리스에서는 릴리스 커널이 생성되지 않습니다.

따라서 이 표에는 14개 릴리스 커널의 전체 목록이 표시되며 아무 것도 추가되지 않습니다.

안드로이드 플랫폼 출시 핵심 지원 기간:
안드로이드 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
2023년 1월

기능 및 출시 커널

각 Android 플랫폼 릴리스는 세 가지 Linux 커널 버전 중 하나를 기반으로 새 장치 출시를 지원합니다. 아래 표에 표시된 것처럼 Android 11의 출시 커널은 android-4.14-stable , android-4.19-stableandroid11-5.4 입니다.

플랫폼 릴리스를 업데이트할 때 일반적으로 커널 업그레이드가 필요하지 않으므로 플랫폼 릴리스의 최신 기능이 누락된 커널을 사용하여 장치를 실행할 수 있습니다. 따라서 android-4.19-q 와 같이 Android 10용으로 설계된 커널은 플랫폼 릴리스를 Android 11로 업그레이드한 후에도 기기에서 사용할 수 있습니다. Android 12부터는 출시 커널보다 기능 커널 수가 적어서 커널 수를 제한합니다. 지원되어야 하는 안정적인 KMI.

안드로이드 플랫폼 출시 커널 실행 기능 커널
안드로이드 14(2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10 1
android14-6.1
android14-5.15
안드로이드 13(2022) android13-5.15
android13-5.10
android12-5.10 1
android12-5.4 1
android11-5.4 1
android13-5.15
android13-5.10
안드로이드 12(2021) android12-5.10
android12-5.4
android11-5.4 1
android-4.19-stable
android12-5.10
android12-5.4
안드로이드 11(2020) android11-5.4
android-4.19-stable
android-4.14-stable
android11-5.4
android-4.19-stable
android-4.14-stable
안드로이드 10(2019) android-4.19-q
android-4.14-q
android-4.9-q

android-4.19-q
android-4.14-q
android-4.9-q

1 관련 BSP가 플랫폼 릴리스에 대해 업데이트된 경우 추가 제한 사항이 적용될 수 있습니다. 보다 일반적인 용어로 말하면 커널의 Android 릴리스 번호는 대상 FCM 버전 보다 높거나 같아야 합니다. 자세한 내용은 공급업체 인터페이스 개체 - 커널 분기 일치를 참조하세요.

공통 커널 계층 구조

android-mainline에서 분기

공통 커널 계층 구조의 최상위 수준이 그림 1에 나와 있습니다.

android-mainline 커널에서 공통 커널 만들기

그림 1. android-mainline 커널에서 공통 커널 만들기

새로운 Android 공통 커널 android12-5.10 은 2020년에 android-mainline 에서 분기되었습니다. 2021년에 다음 LTS가 선언되었을 때 android13-5.15android-mainline 에서 분기되었습니다.

그림 1에 표시된 것처럼 각 커널 버전은 두 개의 GKI 커널의 기반입니다. 예를 들어 두 개의 v5.4 커널은 android11-5.4android12-5.4 이며, 둘 다 해당 플랫폼 릴리스의 기능 커널입니다. 이는 5.10에서도 마찬가지입니다. android12-5.10 LTS가 선언될 때 생성되었으며 android13-5.10 Android 13용 기능 개발을 허용하기 위해 2021년 봄의 커널 기능 완료 마일스톤에서 android12-5.10 에서 분기됩니다.

ACK KMI 분기 수명 주기

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

5.10 ACK KMI 분기 수명주기

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

개발 프로세스와 분기 수명 주기를 명확히 하기 위해 그림 2에서는 5.10의 ACK KMI 분기에 중점을 둡니다.

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

개발 단계

ACK KMI 분기가 생성되면 개발 단계 (그림 2의 dev )에 들어가고 다음 Android 플랫폼 릴리스에 대한 기능 기여를 위해 열려 있습니다. 그림 2에서 android12-5.10 5.10이 새로운 업스트림 LTS 커널로 선언되었을 때 생성되었습니다. 커널 버전에 대한 두 번째 ACK KMI 분기는 후속 릴리스의 개발을 허용하기 위해 더 일찍 생성될 수 있습니다. 그림 2에서는 android12-5.10 개발 단계에서 전환될 때 android13-5.10 생성됩니다.

안정화 단계

ACK KMI 분기가 기능 완료로 선언되면 그림 2에서 Stab 이라고 표시된 안정화 단계 로 들어갑니다. 파트너 기능 및 버그 수정은 계속 허용되지만 인터페이스에 영향을 미치는 모든 변경 사항을 감지하기 위해 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에서 android12-5.10 커널은 Android 12 기기와 Android 13 기기에 사용할 수 있습니다. Android 플랫폼 릴리스는 이전 버전과도 호환되므로 android12-5.4 커널은 Android 13 기기에서 실행 또는 업그레이드에 사용될 수 있습니다.

고정 단계에 들어가면 분기에는 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 제품군에 있는 커널 간의 호환성 요구사항은 새로운 GKI 커널부터 변경됩니다.

GKI 커널

GKI 커널은 커널 버전을 지원하는 모든 Android 플랫폼 릴리스와 이전 버전과의 호환성을 유지합니다. 또한 Android 플랫폼 릴리스는 이전 릴리스의 GKI 커널과 호환됩니다. 따라서 Android 13을 실행하는 기기에서 Android 12용으로 개발된 android12-5.4 커널을 안전하게 사용할 수 있습니다. 호환성은 지원되는 모든 릴리스에서 GKI 커널의 지속적인 VTS 및 CTS 테스트를 통해 검증됩니다.

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

KMI 호환성은 서로 다른 GKI 커널 간에 유지되지 않습니다. 따라서 예를 들어 모든 모듈을 다시 빌드하지 않으면 android12-5.10android13-5.10 커널로 교체할 수 없습니다.

GKI 커널은 초기 및 후속 릴리스에서만 지원됩니다. 이전 릴리스에서는 지원되지 않습니다. 따라서 android13-5.10 커널은 Android 12 기기에서 지원되지 않습니다.

레거시 커널

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

호환성 매트릭스

이 표에는 각 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
android-4.14-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
안드로이드 13(2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
안드로이드 12(2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
안드로이드 11(2020) android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android11-5.4
android-4.19-stable
android-4.14-stable
안드로이드 10(2019) android-4.14-stable
android-4.14-p (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android-3.18 (EOL)
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)

지원 수명 및 보안 패치

Android 일반 커널은 관련 LTS 커널 또는 Android 플랫폼 릴리스가 더 이상 지원되지 않을 때까지 지원됩니다. 커널이 지원되는 동안 업스트림에서 LTS 병합을 계속 수신하고 Android 관련 코드에 대한 버그 수정을 받습니다. 이러한 수정 사항에는 Android 일반 커널과 관련된 월간 Android 보안 게시판 에 인용된 모든 커널 보안 패치가 포함됩니다.

파트너는 Android 일반 커널에서 정기적으로 병합함으로써 가능한 모든 커널 보안 패치를 얻을 수 있다고 확신할 수 있습니다.

일반적인 커널 테스트

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

Linux 커널 기능 테스트

LKFT(Linux 커널 기능 테스트) 테스트는 물리적 arm32 및 arm64 장치 세트에서 kselftest, LTP, VTS 및 CTS를 포함한 다양한 테스트 제품군을 시작합니다. 최근 테스트 결과는 여기에서 확인할 수 있습니다.

커널CI 테스트

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

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

사전 제출 테스트는 Android 일반 커널에 오류가 발생하는 것을 방지하는 데 사용됩니다. 테스트 결과 요약은 Android 공통 커널 gerrit의 코드 변경 내 'Checks' 탭에서 확인할 수 있습니다.

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

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

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

제로데이 테스트

제로데이 테스트는 새 패치가 커밋될 때 모든 Android 공통 커널 분기에서 패치별 테스트를 수행합니다. 다양한 부팅, 기능 및 성능 테스트가 실행됩니다. 공개 그룹 cros-kernel-buildreports 에 가입하세요.

테스트 매트릭스

안드로이드 공통 커널 Android 플랫폼 릴리스 테스트 스위트
기본 14 13 12 11 10 LKFT 커널CI 사전 제출 게시물 제출 0일
android-mainline
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-4.19-stable
android-4.14-stable

Android 일반 커널에 기여

일반적으로 기능 개발은 Android 일반 커널이 아닌 메인라인 Linux에서 수행되어야 합니다. 업스트림 개발이 적극 권장되며, 개발이 승인된 후 필요에 따라 특정 ACK 분기로 쉽게 백포트될 수 있습니다. Android 커널 팀은 Android 생태계의 이익을 위한 업스트리밍 노력을 기꺼이 지원합니다.

Gerrit 에 패치를 제출하고 이 기여 지침을 따르세요.