Pixel 커널 빌드

개요

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

GKI 지원 Pixel 커널 브랜치
기기 AOSP 트리의 바이너리 경로 저장소 브랜치 GKI 커널
Pixel 8(shiba)
Pixel 8 Pro(husky)
device/google/shusky-kernel android-gs-shusky-5.15-android14-d1 android14-5.15
Pixel Fold(felix) device/google/felix-kernel android-gs-felix-5.10-android14 android13-5.10
Pixel Tablet(tangorpro) device/google/tangorpro-kernel android-gs-tangorpro-5.10-android14 android13-5.10
Pixel 7a(lynx) device/google/lynx-kernel android-gs-lynx-5.10-android14 android13-5.10
Pixel 7(panther)
Pixel 7 Pro(cheetah)
device/google/pantah-kernel android-gs-pantah-5.10-android14 android13-5.10
Pixel 6a(bluejay) device/google/bluejay-kernel android-gs-bluejay-5.10-android14 android13-5.10
Pixel 6(oriole)
Pixel 6 Pro(raven)
device/google/raviole-kernel android-gs-raviole-5.10-android14 android13-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.7 tag) UP1A.231005.007.A1(10762838)
android14-gs-pixel-6.1 android14-6.1 UP1A.231005.007.A1(10762838)
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 파일을 업데이트하세요. 몇 가지 옵션이 있습니다.

옵션 1) Pixel 공장 출고 시 이미지에서 공급업체 램디스크 이미지를 추출합니다.
  1. 다음 주소에서 기기에 지원되는 공장 출고 시 이미지를 다운로드합니다. https://developers.google.com/android/images.

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

    • 다음 명령어에서는 Pixel 6 Pro UP1A.231005.007.a1을 예로 사용합니다. Zip 파일 이름을 다운로드한 공장 출고 시 이미지 파일 이름으로 바꿉니다.
      unzip raven-up1a.231005.007.a1-factory-5d927f3e.zip
    
      cd raven-up1a.231005.007.a1
    
      unzip image-raven-up1a.231005.007.a1.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. 추출된 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
    
옵션 2) 로컬에서 빌드된 Android 플랫폼 저장소에서 vendor_ramdisk를 복사합니다.
기기 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 ANDROID_ROOT/out/target/product/DEVICE/vendor_ramdisk-debug.img \
   KERNEL_REPO_ROOT/DEVICE_RAMDISK_PATH/vendor_ramdisk-DEVICE.img

커널 컴파일(Kleaf)

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

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

tools/bazel run --config=fast --config=stamp //private/google-modules/soc/gs:slider_dist

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 스크립트를 실행하세요. 예를 들어 android-gs-raviole-5.10-android14 브랜치에 Pixel 6의 커널을 빌드하려면 다음 명령어를 실행합니다.

build_slider.sh

기본적으로 build_DEVICE.sh 스크립트는 사전 빌드된 GKI 커널을 사용하여 빌드 프로세스의 속도를 높입니다. 코어 커널을 수정하려면 환경 변수 BUILD_AOSP_KERNEL=1을 설정하여 대신 로컬 소스에서 커널을 빌드합니다.

커널 빌드 시스템과 빌드 맞춤설정 방법에 관한 자세한 내용은 Kleaf 문서를 참고하세요.

커널 이미지 플래시

참고: 인증을 사용 중지하지 않았다면 맞춤 커널을 플래시하기 전에 중지해야 합니다. 중지하는 명령어는 다음과 같습니다.
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(동적 파티션)

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