Pixel 커널 빌드

이 가이드에서는 개발을 위해 맞춤 Pixel 커널을 다운로드, 컴파일, 플래시하는 방법에 관해 단계별로 안내합니다. GKI 덕분에 이제 커널을 Android 플랫폼 빌드와는 별개로 업데이트할 수 있습니다. 이러한 단계는 Pixel 6 이상 기기에만 적용됩니다. Pixel 5 이하 기기에서는 해당 기기의 Android 플랫폼 빌드에 따라 달라지는 vendor 파티션의 커널 모듈을 업데이트해야 하기 때문입니다. GKI 지원 Pixel 커널 브랜치 표에는 각 GKI 지원 Pixel 기기의 커널 저장소 매니페스트 브랜치가 포함되어 있습니다. Pixel 5 이하 커널 매니페스트 브랜치는 기존 Pixel 커널 섹션을 참고하세요.

GKI 지원 Pixel 커널 브랜치
기기 AOSP 트리의 바이너리 경로 저장소 브랜치 GKI 커널
Pixel 9 Pro Fold (혜성) device/google/comet-kernels/6.1 android-gs-comet-6.1-android15-qpr1 android15-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
device/google/caimito-kernels/6.1 android-gs-caimito-6.1-android15-qpr1 android15-6.1
Pixel 8a (akita) device/google/akita-kernels/5.15 android-gs-akita-5.15-android15-qpr1 android15-5.15
Pixel 8(shiba)
Pixel 8 Pro(husky)
device/google/shusky-kernels/5.15 android-gs-shusky-5.15-android15-qpr1 android15-5.15
Pixel Fold(felix) device/google/felix-kernels/5.10 android-gs-felix-5.10-android15-qpr1 android15-5.10
Pixel Tablet(tangorpro) device/google/tangorpro-kernels/5.10 android-gs-tangorpro-5.10-android15-qpr1 android15-5.10
Pixel 7a(lynx) device/google/lynx-kernels/5.10 android-gs-lynx-5.10-android15-qpr1 android15-5.10
Pixel 7(panther)
Pixel 7 Pro(cheetah)
device/google/pantah-kernels/5.10 android-gs-pantah-5.10-android15-qpr1 android15-5.10
Pixel 6a(bluejay) device/google/bluejay-kernels/5.10 android-gs-bluejay-5.10-android15-qpr1 android15-5.10
Pixel 6(oriole)
Pixel 6 Pro(raven)
device/google/raviole-kernels/5.10 android-gs-raviole-5.10-android15-qpr1 android15-5.10

팩토리 지원 커널 외에도 Pixel 6 및 6 Pro 기기는 지원되는 Pixel 6/6 Pro Android 플랫폼 및 커널 조합 표에 포함된 Android 일반 커널 브랜치에서만 GKI 개발 목적으로 지원됩니다. Android 플랫폼 HAL 및 Pixel 커널 드라이버 간 공급업체 UAPI 차이로 인해 표에서는 지원되는 빌드 조합을 제공합니다.

지원되는 Pixel 6/6 Pro Android 플랫폼 및 커널 조합
Pixel 커널 매니페스트 브랜치 GKI 브랜치 Android 플랫폼 빌드 aosp-main 지원 여부
gs-android-gs-raviole-mainline android-mainline (v6.12) BP11.241025.006 (12620009)
android-gs-raviole-6.1-android15-qpr2-beta android14-6.1 BP11.241025.006 (12620009)
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002(9471150) 아니요

Pixel 기기 준비

다음 플로 차트에서는 Pixel 6 이상 기기에서 커널을 업데이트하는 프로세스를 설명합니다.

**그림 1.** 커널 업데이트 플로 차트

flash.android.com을 사용하여 기기 플래시

  1. flash.android.com으로 이동합니다.
  2. 지원되는 Android 플랫폼 및 커널 조합에 따라 Android 빌드를 선택합니다.
  3. 다음 옵션을 선택합니다.
    • 기기 완전 삭제
    • 모든 파티션 강제 플래시
    • 인증 사용 안함
  4. 빌드 설치 버튼을 눌러 기기를 플래시합니다.

**그림 2.** 플래시 스테이션 예

커널 다운로드 및 컴파일

커널 저장소 동기화

다음 명령어를 실행하여 커널 소스 코드를 다운로드합니다. Pixel KERNEL_MANIFEST_BRANCH지원되는 Pixel 6/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 램디스크 비트만 업데이트

    빠른 부팅 버전 35.0.2-12583183부터 vendor_boot 파티션에서 DTB 및 DLKM 램디스크를 직접 플래시할 수 있습니다. 사용하려면 v35.0.2-12583183 아티팩트에서 sdk-repo-HOST_OS-platform-tools-12583183.zip를 다운로드하여 호스트 머신의 환경으로 추출합니다.

    커널 이미지 플래시에서 안내에 따라 DTB 및 vendor_boot:dlkm를 플래시합니다.

  • 옵션 2) Pixel 공장 출고 시 이미지에서 공급업체 램디스크 이미지를 추출합니다.

    1. https://developers.google.com/android/images에서 기기에 지원되는 공장 출고 시 이미지를 다운로드합니다.

    2. vendor_boot.img를 추출합니다.

      다음 명령어에서는 Pixel 6 Pro AP1A.240505.004를 예로 사용합니다. Zip 파일 이름을 다운로드한 공장 출고 시 이미지 파일 이름으로 바꿉니다.

        unzip raven-ap1a.240505.004-factory-9d783215.zip
      
        cd raven-ap1a.240505.004
      
        unzip image-raven-ap1a.240505.004.zip vendor_boot.img
      
    3. vendor_boot.img를 압축해제하여 공급업체 램디스크를 가져옵니다.

        KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
            --out vendor_boot_out
      
    4. 추출된 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
      

커널 컴파일(Kleaf)

Android 13에서는 build.sh 스크립트가 새로운 커널 빌드 시스템 Kleaf로 대체되었습니다. android13-5.15 이상을 사용하는 기기의 경우에는 Kleaf를 사용하여 커널을 빌드해야 합니다.

android13-5.15 커널이 적용된 Pixel 6 및 6 Pro의 경우 다음과 같이 Kleaf 빌드 명령어를 실행하세요.

tools/bazel run --lto=thin //gs/google-modules/soc-modules:slider_dist

그 외 모든 Pixel 커널의 경우에는 KERNEL_REPO_ROOT에 있는 build_DEVICE.sh 스크립트를 실행하세요. 대부분의 경우 DEVICEGKI 지원 Pixel 커널 브랜치 표의 AOSP 트리의 바이너리 경로 열에 사용된 코드 이름과 일치하는 코드 이름이어야 합니다. 이는 '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_dlkm(동적 파티션)
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(동적 파티션)

Pixel 6/6 Pro/6a의 경우 공급업체 램디스크 업데이트 섹션에서 vendor_ramdisk 다운로드를 건너뛴 경우 다음 명령어를 사용하여 vendor_boot.img 이미지를 플래시하는 대신 DTB 및 DLKM 램디스크를 업데이트합니다.

fastboot flash  --dtb out/DEVICE/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img

android-mainline에서 Pixel 6의 플래시 명령어는 다음과 같습니다.

fastboot flash boot        out/slider/dist/boot.img
fastboot flash dtbo        out/slider/dist/dtbo.img
fastboot flash vendor_boot out/slider/dist/vendor_boot.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

커널 이미지는 DIST_DIR에서 찾을 수 있습니다.

커널 브랜치 DIST_DIR
v5.10 out/mixed/dist
v5.15 이상 out/DEVICE/dist
참고: 직렬 동글이 있고 직렬 로그를 사용 설정하려는 경우 명령어는 다음과 같습니다.
fastboot oem uart enable
fastboot oem uart config 3000000
호스트에서 연결하는 명령어 예시:
screen -fn /dev/ttyUSB* 3000000

공장 출고 시 이미지 복원

기기를 공장 출고 시 이미지로 다시 복원하려면 flash.android.com을 사용하면 됩니다.

기존 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