Iklan

WHAT'S NEW?
Loading...

[TUTOR] Kompilasi kernel android (yang sebenarnya mirip dengan Linux)

Untuk sekedar kompilasi hampir tidak diperlukan mahir dalam bahasa pemrograman C, cukup logika dasar alur pemrograman umum. Untuk lokasi perlu disesuaikan dengan kondisi kompie masing2.

Alat dan bahan yang perlu disediakan:
 0. Sistem operasi Linux, boleh native atau pakai virtual machine seperti virtualbox atau vmware. Saya pakai yang native karena sehari2 pakai Ubuntu. Disarankan menggunakan OS yang versi 64bit tapi saya pakai 32bit masih OK saja.

1. Kernel source yang kompatible dengan device yang dimiliki, di sini untuk jena. Boleh stock dari samsung opensource, boleh source dari om squadzone atau dari thewhisp yang msm7x27a untuk s6500. Ukurannya antara 200-400mb.

2. Arm-toolchain untuk kompilasi kernel yang akan dijalankan di prosesor arm. Komputer kita biasa kelasnya x86 atau x86-64 intel kompatible. Toolchain ini bermacam2, yang pernah saya coba Codesourcery-gcc 4.4.1 (versi lama), dan toolchain tak bernama gcc 4.6.3 http://forum.xda-developers.com/showthread.php?t=1686310 (saya pakai sekarang) serta Linaro gcc 4.7.3 yang tidak sukses.

3. Tool dasar kompilasi untuk Linux antara lain:
- git-core
- gnupg
- flex
- bison
- gperf
- build-essential
- zip
- curl
- zlib1g-dev
- libc6-dev
- lib32ncurses5-dev
- ia32-libs
- x11proto-core-dev
- libx11-dev
- lib32readline5-dev
- lib32z-dev
- libgl1-mesa-dev
- g++-multilib
- mingw32
- tofrodos
- python-markdown
- libxml2-utils
- xsltproc

Nama2 di atas tidak harus persis tapi bisa mirip2. Untuk instalasi di Ubuntu menggunakan perintah :
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 git

Kemudian buat link file library:sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

4. Untuk packing kernel saya menggunakan dsixda's Android-Kitchen karena menu2nya yang komprehensif. https://github.com/dsixda/Android-Kitchen

Menu di dsixda Android-Kitchen

Langkah2 :
 1. Kopikan source kernel ke salah satu folder yang dapat anda akses. Kalau dalam Linux biasanya di dalam home/home/user_name/jena_kernel_folder.Atau kalau download langsung dari github, misalnya dari thewhisp perintahnya :git clone https://github.com/TheWhisp/android_kernel_samsung_msm7x27a.git

Di dalam folder ini ada banyak folder yang berisikan source code dalam bahasa c. Untuk sementara tidak usah menghiraukan file2 source tersebut karena yang penting sekarang adalah setup environment supaya proses kompile bisa berjalan. File2 yang perlu mendapatkan perhatian sekarang adalah : Makefile (isinya konfigurasi kompilasi) dan .config (isinya konfigurasi kernel).

2. Kopikan paket program arm-toolchain ke folder yang bisa diakses dan terpisah dari folder source kernel. Contohnya bisa dikopikan ke /home/user_name/bin/my-arm-toolchain.

3. Setup environment :- beritahukan system mengenai lokasi arm-toolchain anda berada dengan perintah export PATH, contoh : export PATH=$PATH:/home/user_name/bin/my-arm-toolchain/ - beritahukan system bahwa proses kompilasi untuk prosesor bukan x86. Seandainya program gcc untuk kompilasi arm yang anda punya bernama arm-linux-androieabi-gcc maka perintahnya :export CROSS_COMPILE=arm-linux-androideabi-beri tanda "-" di akhir perintah tanpa gcc karena ada banyak tool selain gcc tetapi berawalan sama.- tentukan arsitektur prosesor target, yaitu prosesor ARM untuk s6500.export ARCH=arm

File Makefile juga perlu diedit, cari tulisan :

ARCH ?= arm
CROSS_COMPILE ?=
tambah atau ganti setelah tanda = dengan lokasi toolchain kita :
CROSS_COMPILE ?= /home/username/bin/my_arm_toolchain/bin/arm-linux-androideabi-

Saat ini sistem sudah tahu mengenai proyek kompilasi yang akan kita lakukan.

4. Untuk melakukan kompilasi maka ada beberapa perintah yang dilakukan di dalam folder source kernel. Perintah yang digunakan :- untuk membersihkan source dari konfigurasi sebelumnya :make mrproper

- untuk melakukan seting konfigurasi :
make menuconfig

tampilan menuconfig berbasis text UI.

Konfigurasi kita akan disimpan dalam file .config. Apabila kita ingin menggunakan konfigurasi bawaan device maka kita perlu mengkopi file/proc/config.gz dari device kita. Lalu kita ekstrak ke dalam folder source kernel kemudian kita rename biasanya dari file configmenjadi .config.

- untuk memulai kompilasi perintahnya :
make atau supaya lebih cepat make -j jumlah_core_prosesor+1 jadi kalau pakai quad core perintahnya :
make -j 5
Proses kompilasi bisa antara 1-3jam tergantung kecepatan prosesor. Semakin banyak angka di belakang -j maka makin banyak core yang dikerahkan untuk kompilasi dan bisa2 kompie jadi gak bisa dipakai karena proses lain jadi lemot.

5. Ketika proses kompilasi sudah selesai maka kernel image ada di folderfolder_source/arch/arm/boot/ ada 2 file image kernel yang satu Image tanpa kompresi sedangkan yang zImage sudah terkompresi. Saya biasanya pakai yang tidak terkompresi tapi nanti dalam packing nama file Image diubah menjadi zImage.

6. Kernel image sendiri tidak bisa digunakan, harus disertai dengan yang namanya ramdisk. Mengenai ramdisk kita bahas pada saat packing kernel ke dalam boot.img.

Packing kernel menggunakan dsixda Android Kitchen:
 1. Setelah proses proses kompilasi akan dihasilkan kernel image dan file modul berekstensi .ko. Kernel image ini perlu dikemas bersama dengan ramdisk yang berisi folder dan konfigurasi awal. Paling mudah adalah dengan menggunakan ramdisk dari boot.img yang sudah jadi di dalam flashable zip. Contoh update-jenaboot.zip dari squadzone.

2. Android kitchen tidak perlu instalasi khusus karena isinya berupa shell script dan java. Di dalam folder android kitchen berisi folder2, zip yang akan dibongkar diletakkan di dalam folder original_update.

3. Untuk menjalankan kitchen perintahnya ./menuKemudian pilih 1. Select working folder. Berikutnya kita diminta menentukan zip yang akan dibongkar.

4. Isi file zip yang telah dibongkar akan masuk folder WORKING_XXX_XXX. Pada contoh jenaboot isinya adalah folder META-INF dan file boot.img.

5. Isi folder meta-inf ada update-binary yang merupakan program untuk membaca updater-script. Gunanya untuk mentransfer file dari zip ke device.Isi updater-script :
assert(package_extract_file("boot.img", "/tmp/boot.img"),       write_raw_image("/tmp/boot.img", "/dev/block/mmcblk0p8"),       delete("/tmp/boot.img"));
package_extract_dir("system", "/system");
set_perm_recursive(0, 0, 0755, 0644, "/system/lib/modules");

6. File boot.img yang kita build berisi kernel dan ramdisk yang akan dibaca pada saat device booting.

7. Di android kitchen ada menu untuk mengekstrak boot.img menjadi kernel image dan ramdisk. Menunya terletak di advanced menu > boot.img tools. Kemudian boot.img yang telah diekstrak berada di folder BOOT_EXTRACTED.

8. Kernel image diberi nama zImage di dalam folder boot_extracted diganti dengan image hasil kompilasi kernel sebelumnya.

9. Kemudian untuk packing ke dalam boot.img gunakan menu b = Build boot.img from BOOT-EXTRACTED folder.

10. Sekarang cari file2 berkestensi .ko di dalam folder source kernel, menggunakan fasilitas search. Kopikan semua file .ko tersebut ke dalam folder WORKING_XXX_XXX/system/lib/modules menimpa file2 .ko yang lama. File .ko tersebut adalah kernel modul yang menjalankan fungsi tertentu tapi tidak ikut dibuild di dalam kernel supaya ukuran kernel tidak terlalu besar. Partisi boot jena dibatasi hanya 12MB.

11. Terakhir ROM dapat dibuild agar dapat diflash via cwm. Disarankan untuk melakukan signing ROM yang sepertinya bertujuan file2 di dalamnya tidak diganti2 oleh orang yang tidak berkepentingan.

Mungkin sekali dibaca tidak bisa dipahami begitu saja, kalo perlu googling saja karena ini hanya merangkum dari tutorial building kernel untuk android dan ditambah pengalaman sendiri.

Sumber:
http://forum.xda-developers.com/showthread.php?t=177403
http://source.android.com/source/building-kernels.html

0 komentar:

Post a Comment