Mem-build kernel Pixel

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

Cabang kernel Pixel yang didukung GKI
Perangkat Cabang repositori Kernel GKI
Pixel 9a (tegu) android-gs-tegu-6.1-android16 android14-6.1
Pixel 9 Pro Fold (komet) android-gs-comet-6.1-android16 android14-6.1
Pixel 9 (tokay)
Pixel 9 Pro (caiman)
Pixel 9 Pro XL (komodo)
android-gs-caimito-6.1-android16 android14-6.1
Pixel 8a (akita) android-gs-akita-6.1-android16 android14-6.1
Pixel 8 (shiba)
Pixel 8 Pro (husky)
android-gs-shusky-6.1-android16 android14-6.1
Pixel Fold (felix) android-gs-felix-6.1-android16 android14-6.1
Pixel Tablet (tangorpro) android-gs-tangorpro-6.1-android16 android14-6.1
Pixel 7a (lynx) android-gs-lynx-6.1-android16 android14-6.1
Pixel 7 (panther)
Pixel 7 Pro (cheetah)
android-gs-pantah-6.1-android16 android14-6.1
Pixel 6a (bluejay) android-gs-bluejay-6.1-android16 android14-6.1
Pixel 6 (oriole)
Pixel 6 Pro (raven)
android-gs-raviole-6.1-android16 android14-6.1

Selain kernel yang didukung pabrikan, perangkat Pixel 6 dan 6 Pro hanya didukung untuk tujuan pengembangan GKI di cabang kernel Umum Android 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 memberikan kombinasi build yang didukung.

Kombinasi kernel dan platform Android Pixel 6/6 Pro yang didukung
Cabang Manifes Kernel Pixel Cabang GKI Build Platform Android
gs-android-gs-raviole-mainline android-mainline android-latest-release
android16-6.12-gs101 android16-6.12 android-latest-release
gs-android13-gs-raviole-5.15 android13-5.15 TQ1A.230205.002 (9471150)

Siapkan perangkat Pixel Anda

Diagram alur 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 dan Kernel Android yang didukung.
  3. Pilih opsi berikut:
    • Hapus Total Perangkat
    • Memaksa Flash semua Partisi
    • Menonaktifkan Verifikasi
  4. Tekan tombol Install build untuk melakukan flash perangkat.

**Gambar 2.** Contoh Stasiun Kilat

Mendownload dan mengompilasi kernel

Menyinkronkan repositori kernel

Jalankan perintah berikut untuk mendownload kode sumber kernel. Lihat tabel Kombinasi Platform dan Kernel Android yang Didukung untuk Pixel 6/6 Pro 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 untuk memperbarui file vendor_ramdisk-DEVICE.img. Gunakan opsi (1) jika Anda menggunakan Android 15 QPR2 (BP11.241025.006) atau yang lebih baru. Jika tidak, gunakan opsi (2).

  • Opsi 1) Hanya mengupdate bit ramdisk DTB dan DLKM dari partisi vendor_boot

    Mulai fastboot versi 35.0.2-12583183, Anda dapat langsung mem-flash DTB dan DLKM ramdisk di partisi vendor_boot. Download dan ekstrak sdk-repo-HOST_OS-platform-tools-12583183.zip dari artefak v35.0.2-12583183 ke lingkungan komputer host Anda untuk digunakan.

    Ikuti petunjuk untuk mem-flash DTB dan vendor_boot:dlkm di Flash image kernel.

  • Opsi 2) Ekstrak image ramdisk vendor dari image pabrikan Pixel.

    1. Download image pabrik yang didukung untuk perangkat Anda dari https://developers.google.com/android/images.

    2. Ekstrak vendor_boot.img:

      Perintah berikut menggunakan AP1A.240505.004 Pixel 6 Pro sebagai contoh. Ganti nama file zip dengan nama file image pabrikan 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
      

Kompilasi 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 dibangun menggunakan Kleaf.

Untuk mempermudah, Anda dapat menjalankan skrip build_DEVICE.sh yang ada di KERNEL_REPO_ROOT. Dalam sebagian besar kasus, DEVICE harus berupa nama kode, yang dapat berupa nama kode satu perangkat, seperti "akita" (Pixel 8a), atau nama kode yang mewakili grup 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 membangun kernel Pixel 6 di cabang android-gs-raviole-5.10-android14, Anda akan menjalankan perintah:

build_slider.sh

Secara default di cabang kernel produksi, 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. Cabang kernel pengembangan secara langsung membangun sumber kernel secara default.

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

Flash image kernel

Catatan: Jika Anda belum menonaktifkan verifikasi, Anda harus melakukannya sebelum mem-flash kernel kustom. Berikut perintah untuk melakukannya:
fastboot oem disable-verification
PERINGATAN: Jika Anda mem-flash kernel kustom di atas build platform, Anda mungkin perlu menghapus data perangkat jika ada penurunan tingkat patch keamanan (SPL) yang terkait dengan kernel baru. Proses ini akan menghapus semua data pribadi Anda. Pastikan Anda mencadangkan data sebelum menghapus data.
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 melakukan reboot ke mode fastbootd sebelum melakukan flashing.

Perangkat Partisi Kernel
Pixel 6 (oriole)
Pixel 6 Pro (raven)
Pixel 6a (bluejay)
boot
dtbo
vendor_boot atau vendor_boot:dlkm
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  --dtb out/slider/dist/dtb.img vendor_boot:dlkm out/slider/dist/initramfs.img
fastboot reboot fastboot
fastboot flash vendor_dlkm out/slider/dist/vendor_dlkm.img

Untuk Pixel 6/6 Pro/6a, jika Anda mengupdate vendor_ramdisk di bagian Perbarui ramdisk vendor, maka gunakan perintah berikut untuk mengupdate partisi vendor_boot:

fastboot flash vendor_boot out/slider/dist/vendor_boot.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 image 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 di struktur 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 (api)
Pixel 4 XL (koral)
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 (arsir 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