Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Membangun kernel

Halaman ini menjelaskan proses pembuatan kernel khusus untuk perangkat Android. Petunjuk berikut memandu Anda melalui proses memilih sumber yang tepat, membuat kernel, dan menyematkan hasilnya ke dalam image sistem yang dibuat dari Android Open Source Project (AOSP).

Sumber kernel yang lebih baru dapat diperoleh menggunakan Repo dan dibangun tanpa konfigurasi lebih lanjut dengan menjalankan build/build.sh dari root checkout sumber Anda.

Untuk kernel lama atau kernel yang tidak tercantum di bawah ini, lihat petunjuk tentang cara membuat kernel lama .

Mendownload sumber dan membangun alat

Untuk kernel terbaru, gunakan repo untuk mendownload sumber, toolchain, dan skrip build. Beberapa kernel (misalnya, kernel Pixel 3) memerlukan sumber dari beberapa repositori git, sementara yang lain (misalnya, kernel umum) hanya memerlukan satu sumber. Menggunakan pendekatan repo memastikan penyiapan direktori sumber yang benar.

Unduh sumber untuk cabang yang sesuai:

mkdir android-kernel && cd android-kernel
repo init -u https://android.googlesource.com/kernel/manifest -b BRANCH
repo sync

Tabel berikut mencantumkan nama BRANCH untuk kernel yang tersedia melalui metode ini.

Alat Jalur biner di pohon AOSP Cabang repo
Pixel 5 (redfin) perangkat / google / redfin-kernel android-msm-redfin-4.19-android11-d1
Pixel 4a (5G) (semak duri) perangkat / google / bramble-kernel android-msm-bramble-4.19-android11-d1
Pixel 4a (mola-mola) perangkat / google / sunfish-kernel android-msm-sunfish-4.14-android10-d4
Pixel 4 (api)
Pixel 4 XL (karang)
perangkat / google / coral-kernel android-msm-coral-4.14-android10-qpr3
Pixel 3a (sargo)
Pixel 3a XL (bonito)
perangkat / google / bonito-kernel android-msm-bonito-4.9-android10-qpr3
Pixel 3 (blueline)
Pixel 3 XL (crosshatch)
perangkat / google / crosshatch-kernel android-msm-crosshatch-4.9-android10-qpr3
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
Hikey960 perangkat / linaro / hikey-kernel hikey-linaro-android-4.14
hikey-linaro-android-4.19
common-android12-5.4
Anjing pemburu x15 perangkat / ti / beagle_x15-kernel omap-beagle-x15-android-4.14.0
omap-beagle-x15-android-4.19.0
Kernel Umum Android T / A umum-android-4.4
common-android-4.9
common-android-4.14
common-android-4.19
common-android-4.19-stable
common-android11-5.4
common-android12-5.4
common-android-mainline

Membangun kernel

Kemudian bangun kernel dengan:

build/build.sh

Biner kernel, modul, dan gambar terkait terletak di direktori out/ BRANCH /dist .

Menjalankan kernel

Ada beberapa cara untuk menjalankan kernel yang dibuat khusus. Berikut ini adalah cara-cara yang diketahui sesuai untuk berbagai skenario pengembangan.

Menyematkan ke dalam build gambar Android

Salin Image.lz4-dtb ke lokasi biner kernel terkait di dalam pohon AOSP dan Image.lz4-dtb kembali image boot.

Alternatifnya, tentukan variabel TARGET_PREBUILT_KERNEL saat menggunakan make bootimage (atau baris perintah make lainnya yang membangun image boot). Variabel ini didukung oleh semua perangkat saat disiapkan melalui device/common/populate-new-device.sh . Sebagai contoh:

export TARGET_PREBUILT_KERNEL=DIST_DIR/Image.lz4-dtb

Mem-flash dan mem-boot kernel dengan fastboot

Perangkat terbaru memiliki ekstensi bootloader untuk menyederhanakan proses pembuatan dan boot image boot.

Untuk mem-boot kernel tanpa mem-flash:

adb reboot bootloader
fastboot boot Image.lz4-dtb

Dengan menggunakan metode ini, kernel tidak benar-benar di-flash, dan tidak akan bertahan saat reboot.

Menyesuaikan build kernel

Proses dan hasil pembangunan dapat dipengaruhi oleh variabel lingkungan. Kebanyakan dari mereka adalah opsional dan setiap cabang kernel harus memiliki konfigurasi default yang tepat. Yang paling sering digunakan tercantum di sini. Untuk daftar lengkap (dan terbaru), lihat build/build.sh .

Variabel lingkungan Deskripsi Contoh
BUILD_CONFIG Buat file konfigurasi untuk menginisialisasi lingkungan build. Lokasi akan ditentukan relatif terhadap direktori root Repo. Default-nya adalah build.config .
Wajib untuk kernel umum.
BUILD_CONFIG=common/build.config.gki.aarch64
OUT_DIR Direktori keluaran dasar untuk pembuatan kernel. OUT_DIR=/path/to/my/out
DIST_DIR Direktori keluaran dasar untuk distribusi kernel. OUT_DIR=/path/to/my/dist
CC Timpa kompiler yang akan digunakan. Terjun kembali ke kompiler default yang ditentukan oleh build.config . CC=clang
SKIP_MRPROPER Lewati make mrproper SKIP_MRPROPER=1
SKIP_DEFCONFIG Lewati make defconfig SKIP_DEFCONFIG=1

Konfigurasi kernel kustom untuk build lokal

Jika Anda perlu mengganti opsi konfigurasi kernel secara teratur, misalnya, saat mengerjakan fitur, atau jika Anda memerlukan opsi untuk disetel untuk tujuan pengembangan, Anda dapat mencapai fleksibilitas itu dengan mempertahankan modifikasi lokal atau salinan konfigurasi build.

Set variabel POST_DEFCONFIG_CMDS ke pernyataan yang dievaluasi tepat setelah langkah make defconfig biasa dilakukan. Karena file build.config bersumber ke dalam lingkungan build, fungsi yang didefinisikan dalam build.config dapat dipanggil sebagai bagian dari perintah post-defconfig.

Contoh umum adalah menonaktifkan pengoptimalan waktu tautan (LTO) untuk kernel crosshatch selama pengembangan. Sementara LTO bermanfaat untuk kernel yang dirilis, overhead pada waktu pembuatan bisa menjadi signifikan. Cuplikan berikut ditambahkan ke build.config lokal menonaktifkan LTO secara terus-menerus saat menggunakan build/build.sh .

POST_DEFCONFIG_CMDS="check_defconfig && update_debug_config"
function update_debug_config() {
    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
         -d LTO \
         -d LTO_CLANG \
         -d CFI \
         -d CFI_PERMISSIVE \
         -d CFI_CLANG
    (cd ${OUT_DIR} && \
     make O=${OUT_DIR} $archsubarch CC=${CC} CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
}

Mengidentifikasi versi kernel

Ada dua cara untuk mengidentifikasi versi yang benar untuk dibuat.

Versi kernel dari pohon AOSP

Pohon AOSP berisi versi kernel bawaan. Seringkali git log menampilkan versi yang benar sebagai bagian dari pesan komit:

cd $AOSP/device/VENDOR/NAME
git log --max-count=1

Versi kernel dari image sistem

Untuk menentukan versi kernel yang digunakan dalam citra sistem, jalankan perintah berikut pada file kernel:

file kernel

Untuk file Image.lz4-dtb , jalankan:

grep -a 'Linux version' Image.lz4-dtb

Membangun Gambar Boot

Anda dapat membangun image boot menggunakan lingkungan kernel build. Untuk melakukan ini, Anda memerlukan biner ramdisk, yang dapat Anda peroleh dengan mengunduh image boot GKI dan membukanya. Gambar boot GKI apa pun dari rilis Android terkait akan berfungsi.

tools/mkbootimg/unpack_bootimg.py --boot_img=boot-5.4-gz.img
mv out/ramdisk gki-ramdisk.lz4

Jika Anda mengembangkan dengan master AOSP, Anda dapat mengunduh artefak ramdisk-recovery.img dari build aosp_arm64 di ci.android.com dan menggunakannya sebagai biner ramdisk Anda.

Jika Anda memiliki biner ramdisk dan telah menyalinnya ke gki-ramdisk.lz4 di direktori root dari build kernel, Anda dapat membuat image boot dengan menjalankan:

BUILD_BOOT_IMG=1 SKIP_VENDOR_BOOT=1 KERNEL_BINARY=Image.gz GKI_RAMDISK_PREBUILT_BINARY=gki-ramdisk.lz4 BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh

Gambar boot terletak di out/<kernel branch>/dist/boot.img .