Membangun kernel Pixel

Panduan ini memberikan petunjuk langkah demi langkah tentang cara mendownload, mengompilasi, dan mem-flash kernel Pixel kustom untuk pengembangan. Berkat GKI, kini Anda dapat mengupdate kernel secara terpisah dari build platform Android. Langkah-langkah ini hanya berlaku untuk perangkat Pixel 6 dan yang lebih baru. Hal ini karena Pixel 5 dan perangkat sebelumnya memerlukan update modul kernel di partisi vendor, yang bergantung pada build platform Android untuk perangkat tersebut. Tabel cabang kernel Pixel yang didukung GKI menyertakan cabang manifes repositori kernel untuk setiap perangkat Pixel yang didukung GKI. Lihat bagian Kernel Pixel Lama untuk cabang manifes kernel Pixel 5 dan sebelumnya.

Cabang kernel Pixel yang didukung GKI
Perangkat Jalur biner dalam hierarki AOSP Cabang repositori Kernel GKI
Pixel 9 Pro Fold (comet) 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

Selain kernel yang didukung pabrik, perangkat Pixel 6 dan 6 Pro hanya didukung untuk tujuan pengembangan GKI di cabang kernel Android Common yang disertakan dalam tabel Kombinasi Platform Android dan Kernel Pixel 6/6 Pro yang Didukung. Karena perbedaan UAPI vendor antara HAL platform Android dan driver kernel Pixel, tabel ini menyediakan kombinasi build yang didukung.

Kombinasi kernel dan platform Android Pixel 6/6 Pro yang didukung
Cabang Manifes Kernel Pixel Cabang GKI Build Platform Android Dukungan aosp-main?
gs-android-gs-raviole-mainline android-mainline (v6.8) AP1A.240505.004 (11583682) Ya
android14-gs-pixel-6.1 android14-6.1 AP1A.240505.004 (11583682) Ya
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150) Tidak

Siapkan perangkat Pixel Anda

Diagram alir berikut menjelaskan proses untuk mengupdate kernel di perangkat Pixel 6 dan yang lebih baru:

**Gambar 1.** Diagram Alur Update Kernel

Mem-flash perangkat menggunakan flash.android.com

  1. Buka flash.android.com
  2. Pilih build Android berdasarkan kombinasi Platform Android dan Kernel yang didukung.
  3. Pilih opsi berikut:
    • Hapus Total Perangkat
    • Mem-flash Semua Partisi secara Paksa
    • Menonaktifkan Verifikasi
  4. Tekan tombol Instal build untuk melakukan flash perangkat.

**Gambar 2.** Contoh Stasiun Flash

Mendownload dan mengompilasi kernel

Menyinkronkan repositori kernel

Jalankan perintah berikut untuk mendownload kode sumber kernel. Lihat tabel Kombinasi Platform Android dan Kernel Pixel 6/6 Pro yang Didukung untuk Pixel KERNEL_MANIFEST_BRANCH.

repo init -u https://android.googlesource.com/kernel/manifest -b KERNEL_MANIFEST_BRANCH
repo sync -c --no-tags

Memperbarui ramdisk vendor

Perbarui file vendor_ramdisk-DEVICE.img di repositori kernel agar cocok dengan build platform Android yang di-flash di perangkat. Ada beberapa opsi yang dapat Anda ikuti.

Opsi 1) Ekstrak image ramdisk vendor dari setelan pabrik Pixel.
  1. Download setelan pabrik yang didukung untuk perangkat Anda dari https://developers.google.com/android/images.

  2. Ekstrak vendor_boot.img:

    • Perintah berikut menggunakan Pixel 6 Pro AP1A.240505.004 sebagai contoh. Ganti nama file zip dengan nama file image factory yang Anda download.
      unzip raven-ap1a.240505.004-factory-9d783215.zip
    
      cd raven-ap1a.240505.004
    
      unzip image-raven-ap1a.240505.004.zip vendor_boot.img
    
  3. Ekstrak vendor_boot.img untuk mendapatkan ramdisk vendor.

      KERNEL_REPO_ROOT/tools/mkbootimg/unpack_bootimg.py --boot_img vendor_boot.img \
          --out vendor_boot_out
    
  4. Salin file vendor-ramdisk-by-name/ramdisk_ yang diekstrak ke repositori kernel Pixel.

    Perangkat 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
    
Opsi 2) Salin vendor_ramdisk dari repositori platform Android yang di-build secara lokal.
Perangkat 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

Mengompilasi kernel (Kleaf)

Di Android 13, skrip build.sh diganti dengan sistem build kernel baru yang disebut Kleaf. Untuk perangkat yang menggunakan android13-5.15 dan yang lebih baru, kernel harus di-build menggunakan Kleaf.

Untuk Pixel 6 dan 6 Pro dengan kernel android14 dan yang lebih baru, jalankan perintah build Kleaf:

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

Untuk Pixel 6 dan 6 Pro dengan kernel android13-5.15, jalankan perintah build Kleaf:

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

Untuk semua kernel Pixel lainnya, jalankan skrip build_DEVICE.sh yang ditemukan di KERNEL_REPO_ROOT. Pada umumnya, DEVICE harus berupa nama kode yang cocok dengan nama kode yang digunakan di kolom Binary path in AOSP tree pada tabel GKI supported Pixel kernel branches. Ini dapat berupa nama kode satu perangkat, seperti "akita" (Pixel 8a), atau nama kode yang mewakili sekelompok perangkat terkait yang menggunakan kernel yang sama, seperti "caimito" yang berarti Pixel 9 (tokay), Pixel 9 Pro (caiman), dan Pixel 9 Pro XL (komodo). Untuk rilis android14 dan yang lebih lama, gunakan build_slider.sh untuk Pixel 6 dan Pixel 6 Pro, serta build_cloudripper.sh untuk Pixel 7 dan Pixel 7 Pro.

Misalnya, untuk mem-build kernel untuk Pixel 6 di cabang android-gs-raviole-5.10-android14, Anda akan menjalankan perintah:

build_slider.sh

Secara default, skrip build_DEVICE.sh menggunakan kernel GKI bawaan untuk mempercepat proses build. Jika Anda ingin mengubah kernel inti, tetapkan variabel lingkungan BUILD_AOSP_KERNEL=1 untuk mem-build kernel dari sumber lokal.

Untuk mengetahui detail selengkapnya tentang sistem build kernel dan cara menyesuaikan build, lihat Kleaf - Building Android Kernels with Bazel.

Mem-flash image kernel

Catatan: Jika belum menonaktifkan verifikasi, Anda harus melakukannya sebelum mem-flash kernel kustom. Berikut adalah perintah untuk melakukannya:
fastboot oem disable-verification
PERINGATAN: Jika Anda mem-flash kernel kustom di atas build platform, Anda mungkin perlu menghapus total perangkat jika ada downgrade tingkat patch keamanan (SPL) yang terkait dengan kernel baru. Proses ini akan menghapus semua data pribadi Anda. Pastikan Anda mencadangkan data sebelum menghapus total.
fastboot -w

Untuk mem-flash image kernel, jalankan perintah fastboot flash untuk setiap partisi kernel yang tercantum untuk perangkat Anda. Untuk partisi dinamis, Anda harus memulai ulang ke mode fastbootd sebelum melakukan flashing.

Perangkat Partisi Kernel
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot
vendor_dlkm (partisi dinamis)
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 (partisi dinamis)
system_dlkm (partisi dinamis)

Berikut adalah perintah flashing untuk Pixel 6 di android-mainline:

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

Image kernel dapat ditemukan di DIST_DIR.

Cabang kernel DIST_DIR
v5.10 out/mixed/dist
v5.15 dan yang lebih baru out/DEVICE/dist
Catatan: Jika Anda memiliki dongle serial dan ingin mengaktifkan log serial, perintahnya adalah:
fastboot oem uart enable
fastboot oem uart config 3000000
Contoh perintah untuk terhubung dari host:
screen -fn /dev/ttyUSB* 3000000

Memulihkan image pabrik

Untuk memulihkan perangkat kembali ke setelan pabrik, Anda dapat menggunakan flash.android.com.

Kernel Pixel lama

Sebagai referensi, tabel cabang kernel Pixel lama menyediakan cabang repositori kernel untuk perangkat Pixel 5 dan yang lebih lama. Perangkat ini tidak didukung GKI.

Cabang kernel Pixel lama
Perangkat Jalur biner dalam hierarki AOSP Cabang repositori
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 (garis biru)
Pixel 3 XL (garis silang)
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