- Back to Home »
- All about Android , Tips Trik or just Sharing »
- Compile Kernel Android
Hi people!
Kembali lagi dengan zomaru-kun yang akan berbagi lagi hal-hal mengenai android, nah salah satunya yang akan saya bagikan kali ini adalah tentang Compile kernel, khususnya untuk device Qualcomm (32-bit dan 64-bit)
semoga saja artikel ini bisa membantu mereka yg ingin memulai perjalanan dalam mengoprek android.
Tentang apa itu kernel sendiri tidak akan saya jelaskan dalam post kali ini karena pasti akan membuat kalian mengantuk saat membacanya.
Saya kebetulan memiliki 2 device yang mendukung saya dalam penulisan artikel ini, Andromax A (32-bit) dan Redmi Note 3 Pro (64-bit)
So, as the title says.. Let's start!
Kita mulai dulu dengan yang 32-bit
So sad sih sebenarnya begitu mengetahui jika device saya ini tidak memiliki source code official untuk kernelnya.
Apa yang harus kalian persiapkan?
- Kopi & Camilan || Plak!! ini puasa oi
- Kesabaran
- Tentu saja device nya, disini saya mengambil contoh Andromax A
- Komputer/Laptop yang sudah terinstall Operating System distribusi Linux 64-bit, kebetulan yang saya gunakan disini adalah Ubuntu 'Mc D*nald' (14.04.5) LTS :v
- Pengetahuan dasar mengenai penggunaan CLI
- Pengetahuan dasar mengenai spesifikasi device kalian
- Kabel USB
- Flashable zip (untuk install kernel jika sudah jadi)
- Aplikasi seperti Geany untuk membuka / mengedit dokumen
- Dan Build Environment
Build Environment itu sendiri mencakup seperti hal-hal dibawah ini
- Toolchain yang akan digunakan untuk compiling (NDK misalnya)
- Source Code kernel, kalian bisa mendapatkannya dengan searching di google seperti ini 'huashan kernel source, bacon kernel source,' dll.
- File konfigurasi kernel yang spesifik untuk device kalian, 'A16C3H_defconfig' contohnya. File ini biasanya bisa didapatkan melalui source code kernel device kalian, maupun bisa kalian ambil langsung dari device kalian (/proc/config.gz) namun, tidak semua kernel memiliki file config.gz di direktori /proc/ , bergantung pada konfigurasi kernel itu sendiri pada CONFIG_IKCONFIG (opsi untuk menampilkan ada atau tidaknya file .config pada kernel yang sedang berjalan)
- dan lib-lib yg akan digunakan
- dtbTool sekaligus mkbootimg
jika semuanya sudah kalian persiapkan, Mari kita mulai
Buka terminal (Ctrl+Alt+T untuk ubuntu)
masuk ke direktori source code kernel
ketik perintah ini lalu tekan Enter
lalu, ketik perintah ini lalu tekan Enter
path menuju toolchain yang saya gunakan adalah seperti yang tertera diatas
ubahlah perintahnya dengan path menuju yang ke direktori toolchain kalian
ketik perintah ini lalu tekan Enter
ketik perintah ini lalu tekan Enter
terakhir, ketik perintah make (ini akan menghasilkan output kernel menjadi file Image)
atau ketik make zImage untuk menghasilkan output kernel menjadi file zImage
Proses compile kernel akan memakan waktu kurang lebih sekitar 10 menit
jika kernel kalian sudah jadi, terminal kalian akan nampak seperti ini
Untuk 64-bit caranya hampir sama dengan 32-bit, cuma ada perbedaan pada perintah yang akan kalian gunakan
untuk perintahnya bisa dilihat disini
pastikan kalian memasukkan perintahnya 1 1, dan juga yang perlu diingat adalah
untuk device 64-bit (arm64) kalian harus menggunakan toolchain aarch64
-COMPILING DTB-
jangan lupa juga untuk compile dtb (device tree blob) untuk device anda
jalankan perintah ini untuk memulai
hasilnya biasanya akan berada di direktori arch/arm/boot/dts dan berekstensi .dtb
serta, .dtb tersebut tidak hanya satu file saja, namun banyak
untuk menyatukan file-file dtb yang sudah di compile tadi kalian akan memerlukan tools seperti dtbTool/dtbTool CM untuk menyatukan file-file dtb tadi menjadi dtb.img.
Untuk membuat dt.img dari file .dtb-dtb tadi masukkan perintah ini
dengan catatan sebagai berikut:
- ganti direktori terminal kalian menuju ke direktori dimana dtbtool kalian berada
- -2 adalah versi dtb nya
- -o adalah command untuk menunjukkan dimana hasil/output dt.img
- -p untuk menunjukkan path dimana dtc kalian, biasanya terletak di /direktori_source_code_kernel_kalian/scripts/dtc
- -s adalah pagesize nya
- hasil output hanya ditulis '~/dt.img' itu hanya bagi mereka yang mendapat error 'Generating master DTB.... could not create dt.img /path-output-ada-dua/ contoh: 'Generating master DTB..... could not create dt.img /home/kamu/home/kamu/dt.img'
- jika kalian mendapat error seperti 'dtbToolCM: command not found'
sertakan path menuju dtbtool kalian pada command
misalnya seperti ini /home/kamu/dtbToolCM 2 -o dan seterusnya' - jika kalian mendapat error 'Generating master DTB.... error: please rerun: size mismatch xxxx vs xxxx (kira-kira seperti ini)'
coba ganti dtbtool yang kalian gunakan
-Ramdisk.img-
Sebelumnya, unpack sebuah boot.img (direkomendasikan yang memiliki source yang sama dengan yang kalian compile kernelnya)
ambil folder ramdisknya, letakkan folder ramdisk tersebut didalam folder dimana kalian menyimpan dtbtool kalian
lalu, masukkan perintah ini
apabila kalian mendapat error 'mkbootfs: command not found', lakukan cara yang sama seperti ketika anda mengalami error tersebut dengan dtbtool
masukkan path menuju direktori dari mkbootfs tadi
-Boot.img-
Setelah kernel, dtb dan ramdisk selesai, kini waktunya membuat boot.img dengan menggunakan mkbootimg
jalankan perintah dibawah ini sesuai dengan realita
- untuk Andromax A dengan output file kernel adalah zImage
jalankan perintah ini
untuk device 32 bit yang lain ganti bagian "console...hingga tag offset=0000xx" tersebut dengan apa yang tertera saat kalian meng-unpack boot.img sebelumnya - jika hasil output file kernel adalah Image, ganti bagian perintah 'zImage' dengan Image
- untuk redmi note 3 pro dengan output file kernel adalah Image
jalankan perintah ini
untuk device 64-bit yang lain bagian "console...hingga tag offset=0000xx" tersebut dengan apa yang tertera saat kalian meng-unpack boot.img sebelumnya - error seperti could not found/ could not read muncul kalau kalian tidak menyediakan path menuju mkbootimg kalian
Beberapa tambahan
Berikut saya sertakan tambahan-tambahan, seperti error message yang sering dijumpai ketika compile kernel
error biasa terjadi dalam compiling kernel manual, karena pada dasarnya kernel selalu di compile berbarengan dengan ROM
error bisa muncul karena berbagai hal, seperti source code yang tidak lengkap.
- Jika error muncul, proses compile kernel akan terhenti, jika error sudah kalian temukan dan perbaiki, ketik perintah make atau make zImage lagi, lalu tekan Enter untuk melanjutkan proses compile kernel kembali
- Jika muncul error 'no rule to make (nama file) needed by (nama file)' pastikan file-file yang tertera dalam error message tersebut ada
- Jika muncul pada file tertentu dengan error message seperti 'undefined reference to..' atau 'undeclared...' atau '... is declared in parameter list', disinilah error yang kadang merepotkan bagi mereka yang baru memulai compile kernel, apalagi tanpa pengetahuan mengenai bahasa pemrograman. Hal ini bisa diakali (walau tidak selalu bisa) dengan, misal yang error adalah file 'kamu.c' nah, kalian bisa saja mereplace file tersebut dengan 'kamu.c' yang bisa kalian ambil dari repository lain selama itu masih untuk device kalian
- Untuk error 'undefined reference to (nama variable)', coba cek untuk variable yg disebutkan di error message tadi apakah variable statis (static int) atau variable eksternal (extern int). Ganti extern menjadi static jika kalian mendapat error message ini pada sebuah variable file .c
- 'Penyakit' atau error spesifik yang saya temukan selama compile kernel, khususnya kernel nougat untuk Redmi Note 3 Pro (kenzo) biasanya adalah 'no rule to make target ... msm_dba_internal.h is needed by msm_dba.c
#include <msm_dba_internal.h>' Disini kalian perlu membuka file msm_dba.c yang terletak di direktori /drivers/video/msm/msm_dba/ dan mengedit bagian #include <msm_dba_internal.h>
menjadi #include "msm_dba_internal.h"
Error lainnya untuk si kenzo ini yang biasa terjadi adalah di direktori /drivers/misc/qcom/qdsp6v2/ file-file disitu biasanya akan ada yang mengalami error, terutama file 'audio_hwacc_effects.c' - Maka dari itu, setiap saya hendak memulai compile kernel dari source code yang saya temukan di github pasti selalu saya crosscheck terlebih dahulu untuk meminimalisir terjadinya error. Tambahan sedikit, kalian bisa mengambil source code yang ada di CodeAurora Forum juga, karena source code yang ada disini adalah lebih khusus untuk device Qualcomm. Perlu diingat juga bahwa tidak semua repository kernel bisa di compile secara manual (tidak bersamaan dengan compile ROM), beberapa repository memang memiliki source code untuk device tertentu, namun ada yang source code kernelnya yang khusus untuk di compile bersamaan dengan ROM/inline.
- Ingin memberi nama pada kernel kalian? Buka file 'makefile' yang ada di direktori awal kernel kalian, bisa dilihat contohnya pada gambar dibawah ini
Edit pada bagian yang sudah saya blok tersebut dengan yang kalian sukai, bisa jadi nama pacar kalian, atau nama mantan mungkin? (ehem)
hasil dari editting makefile bisa kalian lihat saat kalian memasukkan perintah make menuconfig
dan juga, biasanya didalam file defconfig khususnya untuk source code dari custom ROM biasanya akan ada line
CONFIG_LOCALVERSION="xxx"
kalian bisa saja mengubah nya dengan "mantan" atau terserah yang lain sesuai keinginan kalian, asal tetap ditulis menggunakan awalan dan akhiran ""
Hasil dari edit yang kalian lakukan pada make file dan file defconfig tadi akan terlihat di About Phone >> Kernel Version 3.10.x saya jones (misalnya)
Sekian dari saya, maaf jika artikel ini masih banyak kekurangan
kita semua sama-sama belajar disini, feel free untuk melengkapi kekurangan didalam artikel ini pada kolom komentar
semoga bermanfaat ^^
Halo, saya ingin bertanya. Setelah kita berhasil meng compiled kernel dari sebuah sources. Bagaimana cara membuat flashable patch yg berisi firmware dan driver tambahan untuk kernel yang sebelumnya sudah berhasil di compiled?
Thanks before :)