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 플랫폼 출시로 고유하게 식별되므로 브랜치 이름은 ANDROID_RELEASE
-KERNEL_VERSION
입니다. 예를 들어 Android 14용 6.1 GKI 커널의 이름은 android14-6.1
입니다. Android 15의 경우 GKI 커널 android15-6.6
가 도입되었습니다.
기능 및 출시 커널
Android 15 이전에는 기기 출시에 세 가지 최신 커널 중 하나를 사용할 수 있었습니다. Android 15부터 기기 출시에 최신 커널 버전 두 개를 사용할 수 있습니다. Android 15의 출시 커널은 android15-6.6
및 android14-6.1
입니다.
플랫폼 출시를 업데이트할 때는 커널 업그레이드가 필요하지 않으므로 플랫폼 출시의 최신 기능이 없는 커널은 기기를 실행하는 데 계속 사용할 수 있습니다. 따라서 android14-6.1
와 같이 Android 14용으로 설계된 커널은 플랫폼 출시를 Android 15로 업그레이드한 후에도 기기에서 사용할 수 있습니다.
Android 플랫폼 버전 | 출시 커널 | 기능 커널 |
---|---|---|
Android 15 (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.10
|
android14-6.1
android14-5.15
|
Android 13(2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
android13-5.15
android13-5.10
|
Android 12(2021) |
android12-5.10
android12-5.4
android11-5.4
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에 나와 있습니다.
그림 1. android-mainline 커널에서 일반 커널 만들기
2022년에 새로운 Android 일반 커널 android14-6.1
가 android-mainline
에서 브랜칭되었습니다. 2023년에 다음 LTS가 선언되었을 때 android15-6.6
가 android-mainline
에서 브랜칭되었습니다.
그림 1에 표시된 대로 각 커널 버전은 GKI 커널 2개의 기초가 될 수 있습니다.
예를 들어 v5.15 커널 2개는 android13-5.15
및 android14-5.15
이며 둘 다 각 플랫폼 버전을 위한 기능 커널입니다. 이는 5.10의 경우도 마찬가지입니다. android12-5.10
는 Android 13용 기능을 개발할 수 있도록 2021년 봄의 커널 기능 완료 주요 시점에 LTS가 선언되고 android12-5.10
에서 android13-5.10
가 브랜칭될 때 생성되었습니다. Android 15 (2024)부터 커널 버전당 하나의 새 GKI 커널만 있습니다 (android15-6.1
커널 없음).
ACK KMI 브랜치 수명 주기
ACK KMI 브랜치의 수명 주기는 아래 그림 2에 나와 있습니다.
그림 2. 6.6 ACK KMI 브랜치 수명 주기
개발 프로세스 및 브랜치 수명 주기를 명확히 하기 위해 그림 2는 6.6의 ACK KMI 브랜치에 중점을 둡니다.
각 ACK KMI 브랜치는 각 브랜치에서 서로 다른 색으로 그림 2에 표시된 3개 단계를 순환합니다. 표시된 대로 LTS는 단계에 상관없이 정기적으로 병합됩니다.
개발 단계
ACK KMI 브랜치가 생성되면 개발 단계 (그림 2에 dev로 표시)가 시작되고 다음 Android 플랫폼 출시의 기능 기여를 위해 열립니다. 그림 2에서 보면 6.6이 새 업스트림 LTS 커널로 선언되었을 때 android15-6.6
이 생성되었습니다.
안정화 단계
ACK KMI 브랜치가 기능이 완전한 것으로 선언되면 그림 2에서 stable이라는 라벨이 지정된 안정화 단계가 시작됩니다. 파트너 기능과 버그 수정도 계속 허용되지만 KMI 추적을 통해 인터페이스에 영향을 주는 변경사항도 감지할 수 있습니다. 이 단계에서는 KMI 브레이킹 체인지가 허용되며 사전 정의된 주기 (일반적으로 2주마다)에 따라 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 이상 기기에 사용할 수 있습니다. Android 플랫폼 출시는 이전 버전과도 호환되므로 출시 또는 업그레이드를 위해 Android 15 기기에 android14-6.1
커널을 사용할 수 있습니다.
KMI 세대 번호
안정화 단계 중에 LTS 병합이 있거나 그 이후에 KMI 변경 패치를 허용해야 하는 보안 문제나 기타 이벤트가 있으면 build.config.common
에 기록된 KMI 세대 번호가 증가합니다. 현재 KMI 세대는 uname
명령어를 사용하여 찾을 수 있습니다.
$ uname -r
6.6.30-android15-6-g86d10b30f51f
플랫폼 출시 뒤의 번호는 KMI 세대입니다 (이 경우 6
).
KMI 세대가 변경되면 커널이 이전 KMI 세대와 일치하는 공급업체 모듈과 호환되지 않으므로 모듈을 다시 빌드하고 커널로 동기식으로 업데이트해야 합니다. KMI 고정 후에는 KMI 세대 변경이 거의 발생하지 않습니다.
커널 간 호환성
동일한 LTS 패밀리의 커널 간 호환성 요구사항은 새로운 GKI 커널부터 변경됩니다.
GKI 커널
GKI 커널은 커널 버전을 지원한 모든 Android 플랫폼 출시와 하위 호환성을 유지합니다. 또한 Android 플랫폼 출시는 이전 출시의 GKI 커널과 호환됩니다. 따라서 Android 15 (2024)를 실행하는 기기에서 Android 14 (2023)용으로 개발된 android14-6.1
커널을 안전하게 사용할 수 있습니다. 호환성은 지원되는 모든 출시에서 GKI 커널의 지속적인 VTS 및 CTS 테스트를 통해 확인됩니다.
KMI는 안정적이므로 공급업체 이미지에서 커널 모듈을 다시 빌드하지 않고도 커널을 업데이트할 수 있습니다.
KMI 호환성은 다른 GKI 커널 간에 유지되지 않습니다. 예를 들어 android14-6.1
커널은 모든 모듈을 다시 빌드하지 않고는 android15-6.6
커널로 바꿀 수 없습니다.
GKI 커널은 초기 및 후속 출시에서만 지원됩니다.
이전 출시에서는 지원되지 않습니다. 따라서 android15-6.6
커널은 Android 14 (2023)를 실행하는 기기에서는 지원되지 않습니다.
호환성 매트릭스
이 표는 각 Android 플랫폼 출시에서 지원되고 테스트된 커널 버전을 보여 줍니다.
Android 플랫폼 버전 | 업그레이드가 지원되는 커널 | 출시가 지원되는 커널 |
---|---|---|
Android 15 (2024) |
android15-6.6
|
android15-6.6
|
Android 14(2023) |
android14-6.1
|
android14-6.1
|
Android 13(2022) |
android13-5.15
|
android13-5.15
|
Android 12(2021) |
android12-5.10
|
android-4.19-stable
|
Android 11(2020) |
android11-5.4
|
android11-5.4
|
지원 전체 기간 및 보안 패치
ACK는 업스트림에서 LTS 병합을 수신하고 Android 관련 코드의 버그 수정을 수신합니다. 이러한 수정에는 ACK와 관련된 월별 Android 보안 게시판에 인용되는 모든 커널 보안 패치가 포함됩니다.
ACK는 kernel.org의 상응하는 업스트림 안정화 버전 커널보다 오래 지원될 수 있습니다. 이 경우 Google은 이 섹션에 표시된 지원 종료 (EOL) 날짜까지 연장된 지원을 제공합니다. 커널이 지원 종료되면 더 이상 Google에서 지원하지 않으며 이를 실행하는 기기는 취약한 것으로 간주됩니다.
커널 6.6부터 안정적인 커널의 지원 수명은 4년입니다.
다음 표에는 지원되는 ACK의 전체 기간이 나와 있습니다.
ACK 브랜치 | 출시 날짜 |
지원 전체 기간 (년) |
지원 종료 |
---|---|---|---|
android-4.19-stable | 2018-10-22 | 6 | 2025-01-01 |
Android 11~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 |
android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
일반 커널 테스트
일반 커널은 공급업체의 다운스트림 테스트 외에도 여러 CI 시스템에서 테스트됩니다.
Linux 커널 기능 테스트
LKFT (Linux 커널 기능 테스트) 테스트는 일련의 물리적 arm32 및 arm64 기기에서 kselftest, LTP, VTS, CTS를 비롯한 다양한 테스트 모음을 시작합니다. 최근 테스트 결과는 여기에서 확인할 수 있습니다.
KernelCI 테스트
새 패치가 일반 커널 분기에 커밋될 때마다 KernelCI 빌드 및 부팅 테스트가 시작됩니다. 수백 가지 빌드 구성이 다양한 보드에서 테스트 및 부팅됩니다. Android 커널의 최근 결과는 여기에서 확인할 수 있습니다.
Android 사전 제출 및 사후 제출 테스트
사전 제출 테스트는 Android 일반 커널에 장애가 도입되는 것을 방지하는 데 사용됩니다. 테스트 결과 요약은 Android 일반 커널 gerrit의 코드 변경사항 '확인' 탭에서 확인할 수 있습니다.
Android 사후 제출 테스트는 새 패치가 ci.android.com의 Android 일반 커널 브랜치에 커밋될 때 Android 일반 커널 브랜치에 새로 출시된 빌드에서 실행됩니다. aosp_kernel
을 ci.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
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-stable
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Android 일반 커널에 참여
일반적으로 기능 개발은 Android 일반 커널이 아닌 메인라인 Linux에서 진행해야 합니다. 업스트림 개발이 적극 권장되며 개발이 허용된 후에는 필요에 따라 특정 ACK 분기로 쉽게 백포팅할 수 있습니다. Android 커널 팀이 Android 생태계의 이점을 활용할 수 있는 업스트림 작업을 지원해 드립니다.
Gerrit에 패치를 제출하고 이러한 참여 가이드라인에 따릅니다.