Membangun kernel Pixel

Panduan ini menyediakan petunjuk langkah demi langkah tentang cara mendownload, mengompilasi, dan mem-flash kernel Pixel kustom untuk pengembangan. Karena 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 yang lebih lama memerlukan update modul kernel pada partisi vendor, yang bergantung pada build platform Android untuk perangkat tersebut. Tabel GKI Cabang Kernel Pixel yang didukung mencakup cabang manifes repositori kernel untuk setiap perangkat Pixel yang didukung GKI. Lihat bagian Kernel Pixel Lama untuk Pixel 5 dan cabang manifes kernel yang lebih lama.

Cabang kernel Pixel yang didukung GKI
Perangkat Jalur biner dalam hierarki AOSP Cabang repositori Kernel GKI
Pixel 8a (akita) perangkat/google/akita-kernel android-gs-akita-5.15-android14-qpr3 Android 14-5.15
Pixel 8 (shiba)
Pixel 8 Pro (husky)
perangkat/google/shusky-kernel android-gs-shusky-5.15-android14-qpr3 Android 14-5.15
Pixel Fold (felix) perangkat/google/felix-kernel android-gs-felix-5.10-android14-qpr3 Android 13-5.10
Pixel Tablet (tangorpro) perangkat/google/tangorpro-kernel android-gs-tangorpro-5.10-android14-qpr3 Android 13-5.10
Pixel 7a (lynx) perangkat/google/lynx-kernel android-gs-lynx-5.10-android14-qpr3 Android 13-5.10
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
perangkat/google/pantah-kernel android-gs-pantah-5.10-android14-qpr3 Android 13-5.10
Pixel 6a (bluejay) perangkat/google/bluejay-kernel android-gs-bluejay-5.10-android14-qpr3 Android 13-5.10
Pixel 6 (oriole)
Pixel 6 Pro (raven)
perangkat/google/raviole-kernel android-gs-raviole-5.10-android14-qpr3 Android 13-5.10

Selain kernel yang didukung pabrik, perangkat Pixel 6 dan 6 Pro didukung untuk tujuan pengembangan GKI hanya di cabang kernel Android Common yang disertakan dalam tabel Kombinasi Kernel dan Platform Android 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 alur berikut menjelaskan proses update kernel di perangkat Pixel 6 dan yang lebih baru:

**Gambar 1.** Diagram Alir Pembaruan 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
    • Paksa Flash semua Partisi
    • Nonaktifkan 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

Mengupdate ramdisk vendor

Update 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 contohnya. Ganti nama file zip dengan nama file setelan pabrik 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 dibuat 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 ada di KERNEL_REPO_ROOT. Misalnya, untuk mem-build kernel 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 membangun kernel dari sumber lokal.

Untuk detail selengkapnya tentang sistem build kernel dan cara menyesuaikan build, lihat Kleaf - Membangun Kernel Android dengan Bazel.

Melakukan flash image kernel

Catatan: Jika belum menonaktifkan verifikasi, Anda harus melakukannya sebelum melakukan 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 level patch keamanan (SPL) yang terkait dengan kernel baru. Proses ini akan menghapus semua data pribadi Anda. Pastikan untuk mencadangkan data Anda 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 flash.

Perangkat Partisi {i>Kernel<i}
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
booting
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)
booting
dtbo
vendor_kernel_boot
vendor_dlkm (partisi dinamis)
system_dlkm (partisi dinamis)

Berikut adalah perintah flash 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 menghubungkan dari host:
screen -fn /dev/ttyUSB* 3000000

Pulihkan setelan 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. Ini adalah perangkat yang didukung non-GKI.

Cabang kernel Pixel lama
Perangkat Jalur biner dalam hierarki AOSP Cabang repositori
Pixel 5a (barbet)
Pixel 4a (5G) (bramble)
Pixel 5 (redfin)
perangkat/google/redbull-kernel android-msm-redbull-4.19-android14-qpr3
Pixel 4a (ikan sunfish) perangkat/google/sunfish-kernel android-msm-sunfish-4.14-android13-qpr3
Pixel 4 (flame)
Pixel 4 XL (koral)
perangkat/google/coral-kernel android-msm-coral-4.14-android13
Pixel 3a (sargo)
Pixel 3a XL (bonito)
perangkat/google/bonito-kernel android-msm-bonito-4.9-android12L
Pixel 3 (blueline)
Pixel 3 XL (crosshatch)
perangkat/google/crosshatch-kernel android-msm-crosshatch-4.9-android12
Pixel 2 (walleye)
Pixel 2 XL (taimen)
perangkat/google/wahoo-kernel android-msm-wahoo-4.4-android10-qpr3
Pixel (ikan layar)
Pixel XL (marlin)
perangkat/google/marlin-kernel android-msm-marlin-3.18-pie-qpr2