Pixel 커널 빌드

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

GKI 지원 Pixel 커널 브랜치
기기 저장소 브랜치 GKI 커널
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android16-6.1
Pixel 9 Pro Fold (혜성) android-gs-comet-6.1-android16 android16-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
android-gs-caimito-6.1-android16 android16-6.1
Pixel 8a (akita) android-gs-akita-6.1-android16 android16-6.1
Pixel 8(shiba)
Pixel 8 Pro(husky)
android-gs-shusky-6.1-android16 android16-6.1
Pixel Fold(felix) android-gs-felix-6.1-android16 android16-6.1
Pixel Tablet(tangorpro) android-gs-tangorpro-6.1-android16 android16-6.1
Pixel 7a(lynx) android-gs-lynx-6.1-android16 android16-6.1
Pixel 7(panther)
Pixel 7 Pro(cheetah)
android-gs-pantah-6.1-android16 android16-6.1
Pixel 6a(bluejay) android-gs-bluejay-6.1-android16 android16-6.1
Pixel 6(oriole)
Pixel 6 Pro(raven)
android-gs-raviole-6.1-android16 android16-6.1

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

지원되는 Pixel 6/6 Pro Android 플랫폼 및 커널 조합
Pixel 커널 매니페스트 브랜치 GKI 브랜치 Android 플랫폼 빌드
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 스크립트를 실행하세요. 대부분의 경우 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_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