개요
이 가이드에서는 개발을 위해 맞춤 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 이상 기기에서 커널을 업데이트하는 프로세스를 설명합니다.
flash.android.com을 사용하여 기기 플래시
- flash.android.com으로 이동합니다.
- 지원되는 Android 플랫폼 및 커널 조합에 따라 Android 빌드를 선택합니다.
- 다음 옵션을 선택합니다.
- 기기 완전 삭제
- 모든 파티션 강제 플래시
- 인증 사용 안함
- 빌드 설치 버튼을 눌러 기기를 플래시합니다.
커널 다운로드 및 컴파일
커널 저장소 동기화
다음 명령어를 실행하여 커널 소스 코드를 다운로드합니다. 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 공장 출고 시 이미지에서 공급업체 램디스크 이미지를 추출합니다.
다음 주소에서 기기에 지원되는 공장 출고 시 이미지를 다운로드합니다. https://developers.google.com/android/images.
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
vendor_boot.img
를 압축해제하여 공급업체 램디스크를 가져옵니다.KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \ --out vendor_boot_out
추출된
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 |