이 가이드에서는 개발을 위해 맞춤 Pixel 커널을 다운로드, 컴파일, 플래시하는 방법에 관해 단계별로 안내합니다. GKI 덕분에 이제 커널을 Android 플랫폼 빌드와는 별개로 업데이트할 수 있습니다. 이러한 단계는 Pixel 6 이상 기기에만 적용됩니다. Pixel 5 이하 기기에서는 해당 기기의 Android 플랫폼 빌드에 따라 달라지는 vendor 파티션의 커널 모듈을 업데이트해야 하기 때문입니다. GKI 지원 Pixel 커널 브랜치 표에는 각 GKI 지원 Pixel 기기의 커널 저장소 매니페스트 브랜치가 포함되어 있습니다. Pixel 5 이하 커널 매니페스트 브랜치는 기존 Pixel 커널을 참고하세요.
Pixel 6 및 Pixel 6 Pro는 업스트림 Linux 커널에서도 지원되며 업스트림 드라이버만으로 기기 셸 프롬프트로 부팅할 수 있습니다. 자세한 내용은 업스트림 Pixel 커널 빌드 및 플래시를 참고하세요.
GKI Pixel 커널 빌드 및 플래시
이 섹션에서는 GKI 지원 커널 브랜치를 동기화하고 빌드하고 플래시하는 단계를 제공합니다. 다음 표에는 지원되는 Pixel 기기와 각 기기의 프로덕션 커널 저장소 브랜치가 매핑되어 있습니다.
GKI 지원 Pixel 커널 브랜치
| 기기 | 저장소 브랜치 | GKI 커널 |
|---|---|---|
| Pixel 9a (tegu) | android-gs-tegu-6.1-android16 | android14-6.1 |
| Pixel 9 Pro Fold (comet) | android-gs-comet-6.1-android16 | android14-6.1 |
| Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) |
android-gs-caimito-6.1-android16 | android14-6.1 |
| Pixel 8a (akita) | android-gs-akita-6.1-android16 | android14-6.1 |
| Pixel 8(shiba) Pixel 8 Pro(husky) |
android-gs-shusky-6.1-android16 | android14-6.1 |
| Pixel Fold(felix) | android-gs-felix-6.1-android16 | android14-6.1 |
| Pixel Tablet(tangorpro) | android-gs-tangorpro-6.1-android16 | android14-6.1 |
| Pixel 7a(lynx) | android-gs-lynx-6.1-android16 | android14-6.1 |
| Pixel 7(panther) Pixel 7 Pro(cheetah) |
android-gs-pantah-6.1-android16 | android14-6.1 |
| Pixel 6a(bluejay) | android-gs-bluejay-6.1-android16 | android14-6.1 |
| Pixel 6(oriole) Pixel 6 Pro(raven) |
android-gs-raviole-6.1-android16 | android14-6.1 |
팩토리 지원 커널 외에도 Pixel 6 및 6 Pro 기기는 지원되는 Pixel 6 및 Pixel 6 Pro Android 플랫폼 및 커널 조합 표에 포함된 Android 일반 커널 브랜치에서만 GKI 개발 목적으로 지원됩니다. Android 플랫폼 HAL과 Pixel 커널 드라이버 간 공급업체 UAPI 차이로 인해 표에서는 지원되는 빌드 조합을 제공합니다.
지원되는 Pixel 6 및 Pixel 6 Pro Android 플랫폼 및 커널 조합
| Pixel 커널 매니페스트 브랜치 | GKI 브랜치 | Android 플랫폼 빌드 |
|---|---|---|
| gs-android-gs-raviole-mainline | android-mainline | android-latest-release |
| gs-android16-6.12-gs101 | android16-6.12 | android-latest-release |
| gs-android13-gs-raviole-5.15 | android13-5.15 | TQ1A.230205.002(9471150) |
Pixel 기기 준비
다음 플로 차트에서는 Pixel 6 이상 기기에서 커널을 업데이트하는 프로세스를 설명합니다.
flash.android.com을 사용하여 기기 플래시
- flash.android.com으로 이동합니다.
- 지원되는 Android 플랫폼 및 커널 조합에 따라 Android 빌드를 선택합니다.
android-latest-release의 경우 '공개로 돌아가기', 카나리아 또는 베타를 선택합니다.
- 다음 옵션을 선택합니다.
- 기기 완전 삭제
- 모든 파티션 강제 플래시
- 인증 사용 안함
- 빌드 설치 버튼을 눌러 기기를 플래시합니다.
커널 저장소 동기화
다음 명령어를 실행하여 커널 소스 코드를 다운로드합니다. Pixel KERNEL_MANIFEST_BRANCH는 지원되는 Pixel 6 및 Pixel 6 Pro Android 플랫폼 및 커널 조합 표를 참고하세요.
repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags
공급업체 램디스크 업데이트
기기에 플래시된 Android 플랫폼 빌드와 일치하도록 커널 저장소의 vendor_ramdisk-DEVICE.img 파일을 업데이트하세요. vendor_ramdisk-DEVICE.img 파일을 업데이트하는 방법에는 몇 가지가 있습니다. Android 15 QPR2 (BP11.241025.006) 이상을 사용하는 경우 옵션 (1)을 사용하세요. 그렇지 않은 경우 옵션 (2)를 사용합니다.
옵션 1) vendor_boot 파티션의 DTB 및 DLKM 램디스크 비트만 업데이트
fastboot 버전 35.0.2-12583183부터는
vendor_boot파티션에 DTB와 DLKM 램디스크를 직접 플래시할 수 있습니다. 이 옵션을 사용하려면 Android 플랫폼 도구를 v36.0.0 이상으로 업그레이드하세요. 다음 명령어를 실행하여 수행합니다.$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "platform-tools"커널 이미지 플래시의 안내에 따라 DTB와
vendor_boot:dlkm를 플래시합니다.옵션 2) Pixel 공장 출고 시 이미지에서 공급업체 램디스크 이미지를 추출합니다.
https://developers.google.com/android/images에서 기기에 지원되는 공장 출고 시 이미지를 다운로드합니다.
vendor_boot.img를 추출합니다.다음 명령어에서는 Pixel 6 Pro AP1A.240505.004를 예로 사용합니다. Zip 파일 이름을 다운로드한 공장 출고 시 이미지 파일 이름으로 바꿉니다.
unzip raven-ap1a.240505.004-factory-9d783215.zipcd raven-ap1a.240505.004unzip image-raven-ap1a.240505.004.zip vendor_boot.imgvendor_boot.img를 압축해제하여 공급업체 램디스크를 가져옵니다.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_out추출된
vendor-ramdisk-by-name/ramdisk_파일을 Pixel 커널 저장소에 복사합니다.기기 DEVICE_RAMDISK_PATH Pixel 6(oriole)
Pixel 6 Pro(raven)prebuilts/boot-artifacts/ramdisks/vendor_ramdisk-oriole.img Pixel 6a(bluejay) private/devices/google/bluejay/vendor_ramdisk-bluejay.img cp vendor_boot_out/vendor-ramdisk-by-name/ramdisk_ \ KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH
커널 컴파일
Android 13에서는 build.sh 스크립트가 새로운 커널 빌드 시스템 Kleaf로 대체되었습니다. android13-5.15 이상을 사용하는 기기의 경우에는 Kleaf를 사용하여 커널을 빌드해야 합니다.
편의상 KERNEL_REPO_ROOT에서 찾을 수 있는 build_DEVICE.sh 스크립트를 실행하면 됩니다. 대부분의 경우 DEVICE는 코드 이름이어야 합니다. 코드 이름은 'akita'(Pixel 8a)와 같은 하나의 기기의 코드 이름일 수도 있고, 커널을 공유하는 관련 기기 그룹을 나타내는 코드 이름일 수도 있습니다(예: Pixel 9(tokay), Pixel 9 Pro(caiman), Pixel 9 Pro XL(komodo)을 의미하는 'caimito'). android14 이하 버전의 경우 Pixel 6 및 Pixel 6 Pro에는 build_slider.sh을, Pixel 7 및 Pixel 7 Pro에는 build_cloudripper.sh를 사용합니다.
예를 들어 android-gs-raviole-5.10-android14 브랜치에 Pixel 6의 커널을 빌드하려면 다음 명령어를 실행합니다.
build_slider.sh
프로덕션 커널 브랜치에서 기본적으로 build_DEVICE.sh 스크립트는 사전 빌드된 GKI 커널을 사용하여 빌드 프로세스의 속도를 높입니다. 코어 커널을 수정하려면 환경 변수 BUILD_AOSP_KERNEL=1을 설정하여 대신 로컬 소스에서 커널을 빌드합니다. 개발 커널 브랜치는 기본적으로 커널 소스를 직접 빌드합니다.
커널 빌드 시스템과 빌드 맞춤설정 방법에 관한 자세한 내용은 Kleaf - Bazel을 사용하여 Android 커널 빌드를 참고하세요.
커널 이미지 플래시
참고: 인증을 사용 중지하지 않았다면 맞춤 커널을 플래시하기 전에 중지해야 합니다. 다음은 이를 위한 명령어입니다.fastboot oem disable-verification
경고: 플랫폼 빌드 위에 맞춤 커널을 플래시하는 경우 새 커널과 연결된 보안 패치 수준 (SPL) 다운그레이드가 있으면 기기를 완전 삭제해야 할 수 있습니다. 이 프로세스는 개인 정보를 모두 삭제합니다. 완전 삭제하기 전에 데이터를 백업하세요.fastboot -w
커널 이미지를 플래시하려면 기기에 나열된 각 커널 파티션에서 fastboot flash 명령어를 실행합니다. 동적 파티션의 경우 플래시하기 전에 fastbootd 모드로 재부팅해야 합니다.
| 기기 | 커널 파티션 |
|---|---|
| Pixel 6 (oriole) Pixel 6 Pro (raven) Pixel 6a (bluejay) |
boot dtbo vendor_boot 또는 vendor_boot:dlkm vendor_dlkm(동적 파티션) |
| Pixel 9 (tegu) Pixel 9 Pro Fold (comet) Pixel 9 (tokay) Pixel 9 Pro (caiman) Pixel 9 Pro XL (komodo) Pixel 8 (shiba) Pixel 8 Pro (husky) Pixel Fold (felix) Pixel Tablet (tangorpro) Pixel 7a (lynx) Pixel 7 (panther) Pixel 7 Pro (cheetah) |
boot dtbo vendor_kernel_boot vendor_dlkm (동적 파티션) system_dlkm (동적 파티션) |
android-mainline에서 Pixel 6의 플래시 명령어는 다음과 같습니다.
fastboot flash boot out/slider/dist/boot.img
fastboot flash dtbo out/slider/dist/dtbo.img
fastboot flash --dtb out/slider/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img
Pixel 6, Pixel 6 Pro, Pixel 6a의 경우 공급업체 램디스크 업데이트에서 vendor_ramdisk를 업데이트했다면 다음 명령어를 대신 사용하여 vendor_boot 파티션을 업데이트하세요.
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
커널 이미지는 DIST_DIR에서 찾을 수 있습니다.
| 커널 브랜치 | DIST_DIR |
|---|---|
| v5.10 | out/mixed/dist |
| v5.15 이상 | out/DEVICE/dist |
참고: 직렬 동글이 있고 직렬 로그를 사용 설정하려는 경우 명령어는 다음과 같습니다.호스트에서 연결하는 명령어의 예: fastboot oem uart enablefastboot oem uart config 3000000screen -fn /dev/ttyUSB* 3000000
공장 출고 시 이미지 복원
기기를 공장 출고 시 이미지로 복원하려면 flash.android.com을 사용하면 됩니다.
업스트림 Pixel 커널 빌드 및 플래시
Pixel 6 및 Pixel 6 Pro는 업스트림 Linux 커널에서 지원되므로 업스트림 드라이버만 사용하여 커널 개발을 위해 기기 셸 프롬프트로 부팅하는 android-mainline를 사용할 수 있습니다. 이 섹션에서는 android-mainline에서 Pixel 6 및 Pixel 6 Pro 커널을 동기화, 빌드, 플래시하는 단계를 설명합니다.
다음 단계에 따라 시작하세요.
- Pixel 기기 준비하기의 단계에 따라 기기를 준비합니다.
- 커널 저장소 동기화의 단계에 따라
common-android-mainline커널 매니페스트 브랜치를 동기화합니다. Kleaf 빌드 타겟 구성은
KERNEL_REPO_ROOT/devices/google/raviole경로 아래에 정의되어 있습니다.raviole_upstream빌드 타겟을 컴파일하려면 Kleaf 명령어를 실행합니다.tools/bazel run //devices/google/raviole:raviole_upstream_dist프로덕션 커널과 마찬가지로 Android 팩토리 이미지 위에 맞춤 커널을 플래시할 때 확인을 사용 중지하고 기기를 초기화합니다. 자세한 내용은 커널 이미지 플래시의 참고사항을 참고하세요.
fastboot 모드에서 다음 명령어를 실행하여 커널 이미지를 플래시합니다.
fastboot flash boot out/raviole_upstream/dist/boot.img fastboot flash dtbo out/raviole_upstream/dist/dtbo.img fastboot flash --dtb out/raviole_upstream/dist/dtb.img \ vendor_boot:dlkm out/raviole_upstream/dist/initramfs.img기기 셸 프롬프트에 액세스하려면 다음 명령어를 실행하여 복구 모드로 재부팅하면 됩니다.
fastboot reboot recoveryadb shell명령어를 실행하여 기기 셸을 엽니다.adb root명령어를 실행하여 루트 액세스를 사용할 수도 있습니다.
기존 Pixel 커널
참고용으로 기존 Pixel 커널 브랜치 표에서는 Pixel 5 이하 기기의 커널 저장소 브랜치를 제공합니다. 이는 GKI가 지원되지 않는 기기입니다.
기존 Pixel 커널 브랜치
| 기기 | AOSP 트리의 바이너리 경로 | 저장소 브랜치 |
|---|---|---|
| Pixel 5a(barbet) Pixel 4a(5G)(bramble) Pixel 5(redfin) |
device/google/redbull-kernel | android-msm-redbull-4.19-android14-qpr3 |
| Pixel 4a(sunfish) | device/google/sunfish-kernel | android-msm-sunfish-4.14-android13-qpr3 |
| Pixel 4(flame) Pixel 4 XL(coral) |
device/google/coral-kernel | android-msm-coral-4.14-android13 |
| Pixel 3a(sargo) Pixel 3a XL(bonito) |
device/google/bonito-kernel | android-msm-bonito-4.9-android12L |
| Pixel 3(blueline) Pixel 3 XL(crosshatch) |
device/google/crosshatch-kernel | android-msm-crosshatch-4.9-android12 |
| Pixel 2(walleye) Pixel 2 XL(taimen) |
device/google/wahoo-kernel | android-msm-wahoo-4.4-android10-qpr3 |
| Pixel(sailfish) Pixel XL(marlin) |
device/google/marlin-kernel | android-msm-marlin-3.18-pie-qpr2 |