Android 공통 커널

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

  • Android 기능에 필요한 업스트림 기능의 백포트 및 체리픽
  • Android 기기용으로 준비되었지만 아직 업스트림 개발 중인 기능(예: Energy Aware Scheduler 작업 배치 최적화).
  • 다른 에코시스템 파트너(예: sdcardfs)에 유용한 공급업체/OEM 기능.

android-mainline Android 기능의 기본 개발 브랜치입니다. Linux 메인라인은 Linus Torvalds가 릴리스 또는 릴리스 후보를 게시할 때마다 android-mainline 으로 병합됩니다. 2019년 이전에는 최근 선언된 LTS 커널을 복제하고 Android 전용 패치를 추가하여 Android 공통 커널을 구성했습니다. 이 프로세스는 android-mainline 에서 새로운 Android 공통 커널을 분기하도록 2019년에 변경되었습니다. 이 새로운 모델은 동일한 결과를 점진적으로 달성함으로써 포트를 전달하고 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 로 불렸습니다.

Dessert 커널은 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월

레거시 릴리스 커널 분기

릴리스 커널은 월간 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로 업그레이드한 후에도 기기에서 사용할 수 있습니다. 지원해야 하는 안정적인 KMI입니다.

안드로이드 플랫폼 출시 커널 실행 기능 커널
안드로이드 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
안드로이드 11(2020) android-4.14-stable
android-4.19-stable
android11-5.4
android-4.14-stable
android-4.19-stable
android11-5.4
안드로이드 12(2021) android-4.19-stable
android11-5.4 1
android12-5.4
android12-5.10
android12-5.4
android12-5.10
안드로이드 13(2022) android11-5.4 1
android12-5.4 1
android12-5.10 1
android13-5.10
android13-5.15
android13-5.10
android13-5.15

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에서 5.10이 새로운 업스트림 LTS 커널로 선언되었을 때 android12-5.10 생성되었습니다. 커널 버전에 대한 두 번째 ACK KMI 분기는 후속 릴리스의 개발을 허용하기 위해 이전에 생성될 수 있습니다. 그림 2에서 android13-5.10 android12-5.10 개발 단계에서 전환될 때 생성됩니다.

안정화 단계

ACK KMI 분기가 기능 완료로 선언되면 그림 2에서 stab 로 레이블이 지정된 안정화 단계 에 들어갑니다. 파트너 기능 및 버그 수정은 여전히 ​​허용되지만 인터페이스에 영향을 미치는 모든 변경 사항을 감지하기 위해 KMI 추적이 활성화됩니다. 이 단계에서는 KMI 주요 변경 사항이 허용되지만 필요에 따라 KMI 정의를 업데이트해야 합니다. KMI 모니터링에 대한 자세한 내용은 GKI 개요를 참조하세요.

KMI 동결 단계

새 플랫폼 릴리스가 AOSP로 푸시되기 전에 ACK KMI 분기가 정지되고 분기 수명 동안 정지된 상태로 유지됩니다. 이는 안정적인 KMI에 영향을 주지 않고는 완화할 수 없는 심각한 보안 문제가 식별되지 않는 한 KMI 주요 변경 사항이 허용되지 않음을 의미합니다. KMI 손상을 방지하기 위해 LTS에서 병합된 일부 패치는 수정이 Android 장치에 필요하지 않은 경우 수정되거나 삭제될 수 있습니다.

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.10 은 모든 모듈을 다시 빌드하지 않고 android13-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 플랫폼 릴리스에서 지원되고 테스트된 커널 버전을 보여줍니다.

안드로이드 플랫폼 출시 업그레이드를 지원하는 커널 시작을 위해 지원되는 커널
안드로이드 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
안드로이드 11(2020) android-4.4-o (단종)
android-4.4-p (단종)
android-4.9-o (단종)
android-4.9-p (단종)
안드로이드-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
안드로이드 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
안드로이드 13(2022) android-4.9-q
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
android13-5.10
android13-5.15
android11-5.4
android12-5.4
android12-5.10
android13-5.10
android13-5.15

수명 및 보안 패치 지원

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

파트너는 Android 일반 커널에서 정기적으로 병합하여 모든 커널 보안 패치를 받을 수 있다는 확신을 가질 수 있습니다.

일반적인 커널 테스트

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

Linaro 커널 기능 테스트

LKFT(Linaro Kernel Functional Testing) 테스트는 일련의 물리적 arm32 및 arm64 장치에서 kselftest, LTP, VTS 및 CTS를 포함한 다양한 테스트 스위트를 시작합니다. 최근 테스트 결과는 여기에서 확인할 수 있습니다.

커널CI 테스트

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

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

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

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

0일 테스트

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

테스트 매트릭스

안드로이드 공통 커널 Android 플랫폼 출시 테스트 스위트
주인 13 12 11 10 9 (파이) LKFT 커널CI 사전 제출 제출 후 0일
android-mainline
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
android-4.14-q
android-4.9-q

Android 공통 커널에 기여

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

Gerrit 에 패치를 제출하고 이러한 기여 지침을 준수하십시오.