Saturday, January 12, 2013

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.

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.
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 config menjadi .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 folder
folder_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 ./menu
Kemudian 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=1774035
http://source.android.com/source/building-kernels.html

Published with Blogger-droid v2.0.10

Monday, January 7, 2013

Fitur2 androidku yang sudah tidak umum.

Salah satu keunggulan android dibanding ponsel ber OS lain adalah kesempatan untuk dimodifikasi sampai berubah total. Modifikasi pada tingkat tertentu menjadi sangat personal sehingga meskipun sesama pemakai android navigasi menu di dalamnya bisa jadi membingungkan. Ponsel android saya dari kelas menengah saja dan dengan munculnya device baru bisa jadi kelasnya jadi turun. Dengan merek samsung tapi tipenya sepertinya kurang populer, galaxy mini 2 secara umum fiturnya juga ngepas dengan harganya. Dilengkapi media penyimpanan 3GB dan kata yang jual sudah cukup besar, tapi bagi saya kurang sehingga memutuskan pakai sdcard sampai 16GB, sejauh ini masih cukup. Modifikasi sebenarnya bisa menambah nilai guna barang yang sudah terlanjur dibeli. Tidak hanya puas sebagai konsumer tapi juga sebagai modder. Berhubung update Jellybean masih di angan2 gak apa2 modding jalan dulu aja.

Home


Tampilan home sudah tidak pakai Touchwiz UI bawaan galaxy tapi menggunakan espier yang bergaya iPhone. Saya kurang suka pakai tombol launcher karena keharusan menyentuh layarnya jadi lebih banyak. Interface iphone yang dikritik kurang variatif tapi menurut saya lebih praktis. Espier menyediakan fitur menyembunyikan shortcut sehingga layar home tidak terlalu banyak. Model layar semacam ini memang cenderung menutupi wallpaper tapi kita bisa memanfaatkan lockscreen untuk dapat sekedar melihat jam dan wallpaper. Ada lagi launcher yang mirip iphone ini bernama MiHome yang merupakan launcher MIUI ROM yaitu custom ROM yang berusaha menyamai antarmuka iphone. Dari segi fitur tidak sebanyak Espier tapi karena jadi satu dengan lockscreen maka kesan menyatu semakin kelihatan.



Dari segi tampilan tidak banyak perbedaan, saya menggunaka theme iphone 4s 7.0. Hanya saja MiHome tidak memiliki dynamic calendar icon yang angka dan hari berubah sesuai tanggal. Di sini hal yang saya suka dari desain ala iphone adalah wallpaper maksimal dinikmati pada layar lockscreen sedangkan pada layar icon, tanpa wallpaper pun tidak banyak mengurangi estetika.

Keyboard


Keyboard qwerty walaupun sangat legendaris dan menjadi standar metode input menurut saya sudah ketinggalan. Ponsel android menggunakan layar sentuh yang ukurannya tidak terlalu besar. Layar sentuh tidak hanya menerima input touch saja tapi sudah mampu menerima swipe dan multitouch dan ini tidak maksimal digunakan pada keyboard qwerty. Saya menggunakan keyboard Messagease yang lebih hemat tempat dan menurut saya membantu menulis lebih cepat dan lebih akurat dengan rata2 20 kata per menit. Saya tidak menggunakan fasilitas word prediction karena typing saya sepertinya sudah cukup cepat. Bagi yang tidak terbiasa tentu bingung tapi dalam 2 minggu maka kecepatan mengetik menjadi meningkat. Tapi sepertinya tidak banyak yang mengadopsi metode input seperti ini, alasannya harus belajar lagi. Belajar memang memperlambat proses tapi kalau hasilnya lebih cepat mengapa tidak? Keyboard asli sudah diarsip karena tidak digunakan daripada memenuhi space.

Notification area

 VS  
Sebelah kiri adalah area notifikasi aslinya. Toogle bar, nama operator, area ongoing dan notifikasi. Untuk notifikasi pilihannya adalah pilih satu2 atau hapus semuanya dengan menekan tombol clear.
ROM yang baru memiliki dua macam layar notifikasi: Toggles dan Notif. Toggles berisi box untuk menampilkan kondisi cuaca yang di sini hanya saya pakai untuk memajang foto. Di bawahnya merupakan indikator seperti toggle bar pada stock dan di bawahnya lagi adalah tombol untuk pengaturan beberapa fungsi yang dapat digeser ke kanan dan kiri karena memuat 20 tombol seperti : wifi, bluetooth, data, gps, rotation, timeout, brightness, sound mode, sleep, airplane mode dll. Area Notif berisi ongoing dan notifikasi. Dari pembuatnya menambahkan 3 tombol : home, settings dan recent apps sekedar untuk shortcut. Di bawahnya ada kalender yang bisa diswitch ke kalender+jam kemudian box berisi 16 shortcut yang bisa diatur kegunaannya serta bisa dimunculkan atau disembunyikan. Box saya isi dengan beberapa tools yang sebagian besar perlu root. Untuk notifikasi ada tambahan fungsi yaitu kita bisa menghapus notifikasi yang kurang penting dengan menggeser ke kanan atau ke kiri menyisakan notifikasi yang lebih penting. Atau seperti cara lama dengan menekan tombol clear untuk menghapus semua sekaligus.

Extended Settings Menu



Setting bawaan hanya berisi satu deret menu, berkat kebaikan seorang developer saya bisa mengganti menjadi 4 deret menu. Deret pertama adalah menu setting asli seperti bawaan seperti wireless & networks, device, personal dll. Deret kedua merupakan shortcut ke aplikasi utama dan aplikasi google. Saya belum berhasil untuk mengakses seting masing2 aplikasi langsung dari sini karena terbentur pengetahuan. Deret ketiga ada tweak tambahan yang merupakan inti dari custom ROM ini. Secara garis besar tweak tambahan untuk mengatur tampilan, output audio, alat bantu modifikasi sistem dll. Deret ke empat hanya menampilkan About Phone di sini bisa dilihat kita bisa melakukan personalisasi hingga device name kita ubah sesuai keinginan.

Kernel















Seorang pengembang android berhasil melakukan modifikasi kernel sehingga kernel mendukung beberapa fitur yang tidak dimiliki oleh kernel asli. Saya belum sempat membandingkan dengan kernel asli tapi kernel yang baru ini memiliki kemampuan deep sleep sehingga menghemat baterai saat ponsel tidak digunakan. Mendukung overclocking dan underclocking serta undervolting untuk clockspeed rendah. Prosesor yang aslinya 800MHz ternyata dapat dipacu hingga 1,1GHz tetapi saya berpikir menghemat baterai bila hanya sekedar untuk telepon, sms, cek e-mail dan internet maka kecepatan saya turunkan maks 600MHz saja dan terbukti kerja ponsel masih lancar plus hemat baterai. Selain clockspeed si pengembang juga menambahkan mode pengaturan kerja CPU/governor. Aslinya ada 15 governor tapi karena tidak semua diperlukan akhirnya hanya saya sisakan 5 dan saya menggunakan smartassv2 yang menyeimbangkan kinerja dan hemat baterai. Untuk I/O media penyimpanan ada pilihan selain cfq yang merupakan default, saya ganti menjadi sio/simple i/o yang katanya lebih sederhana dan cepat. Kernel juga mendukung fungsi swap yaitu menukarkan isi RAM yang sedang diam ke sdcard sehingga RAM dapat digunakan untuk keperluan lain atau apabila RAM terlalu penuh swap dapat mencegah aplikasi ponsel tertutup paksa karena RAM tidak cukup. Kebetulan pembuat kernel juga membagikan kodenya sehingga saya bisa belajar melakukan kompilasi kernel sendiri. Tertulis di situ nama saya dan komputer yang digunakan untuk kompilasi kernel.

Power Menu















Power menu aslinya hanya empat, hal yang menurut saya kurang dari power menu asli adalah tidak adanya pilihan reboot. Jadi kalo ada yang tidak beres dengan ponsel kita maka ponsel harus dimatikan kemudian dinyalakan lagi/cold boot. Di sini ada tambahan menu reboot sehingga pengguna dapat melakukan warm boot, tinggal tekan reboot maka ponsel akan reboot otomatis sampai masuk ke mode ready lagi. Tambahan menu screenshot untuk dapat melakukan screenshot dengan satu tangan. Screenshot aslinya yang menggunakan tombol home dan power pun masih ada.

Sebenarnya banyak modifikasi yang sifatnya undercover tidak banyak melibatkan antarmuka yang jelas tetapi sangat mengubah performa seperti tweaking build.prop yang mengatur pengelolaan RAM untuk mencapai keseimbangan antara multitasking dan kecepatan respon ponsel. Tambahan haptic feedback untuk tombol menu dan back sehingga kita yakin sudah memencet tombol2 tersebut. Dukungan init.d untuk menjalankan script optimasi yang membantu performa sehingga dengan sumberdaya yang ada dapat bekerja lebih baik.
















Performa yang tidak mengecewakan untuk clockspeed 600MHz.

Saya belajar banyak dari sini https://www.facebook.com/groups/galmin2/ bersama master2 yang ada di dalamnya.

Published with Blogger-droid v2.0.9