Difference between revisions of "ROM Android: Porting"
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
(37 intermediate revisions by the same user not shown) | |||
Line 67: | Line 67: | ||
=== Pelajari <code>boot.img</code> dan <code>recovery.img</code> === | === Pelajari <code>boot.img</code> dan <code>recovery.img</code> === | ||
− | Seperti disebutkan sebelumnya, saat kita melakukan porting, kita biasanya berharap untuk dapat menggunakan '''kernel''' yang sudah jadi yang kita yakini dapat berjalan dengan baik daripada membuat dari source code. Tergantung dari device yang kita miliki, kita mungkin perlu mengekstrak file kernel dari device. Kernel kemungkinan berbentuk sebuah | + | Seperti disebutkan sebelumnya, saat kita melakukan porting, kita biasanya berharap untuk dapat menggunakan '''kernel''' yang sudah jadi yang kita yakini dapat berjalan dengan baik daripada membuat dari source code. Tergantung dari device yang kita miliki, kita mungkin perlu mengekstrak file kernel dari device. Kernel kemungkinan berbentuk sebuah file (seperti kebanyakan device OMAP) atau digabungkan dengan ramdisk dalam partisi boot atau partisi recovery. |
Sejalan dengan itu, isi dari stock '''ramdisk''' sangat menolong dan kadang kala bisa di extrak dan di lihat. Kadang kala, sebuah device membutuhkan file tertentu dari stock ramdisk agar dapat boot secara benar, load modul, dll. Biasanya, kita dapat melihat file di ramdisk dari device itu sendiri, akan tetapi biasanya kita lebih suka untuk melihat directory secara keseluruhkan. | Sejalan dengan itu, isi dari stock '''ramdisk''' sangat menolong dan kadang kala bisa di extrak dan di lihat. Kadang kala, sebuah device membutuhkan file tertentu dari stock ramdisk agar dapat boot secara benar, load modul, dll. Biasanya, kita dapat melihat file di ramdisk dari device itu sendiri, akan tetapi biasanya kita lebih suka untuk melihat directory secara keseluruhkan. | ||
Line 77: | Line 77: | ||
=== Kumpulkan source code yang tersedia === | === Kumpulkan source code yang tersedia === | ||
− | Pabrikan atau vendor dari device menggunakan android minimal harus membuat source code tersedia untuk semua berdasarkan lisensi | + | Pabrikan atau vendor dari device menggunakan android minimal harus membuat source code tersedia untuk semua berdasarkan lisensi GPL berdasarkan permohonan, termasuk (dan terutama) kernel. Anda akan sangat membutuhkan untuk memperoleh copy dari kernel source dan menyimpannya dengan baik. |
=== Meneliti struktur partisi=== | === Meneliti struktur partisi=== | ||
Line 111: | Line 111: | ||
* <code>vendor/[vendor]/[codename]/</code> -- Directory <code>vendor/</code> berisi file proprietary, binary yang di backup dari device asli (atau di sediakan oleh vendor, seperti Google Nexus dan beberapa TI graphics). | * <code>vendor/[vendor]/[codename]/</code> -- Directory <code>vendor/</code> berisi file proprietary, binary yang di backup dari device asli (atau di sediakan oleh vendor, seperti Google Nexus dan beberapa TI graphics). | ||
− | * <code>kernel/[vendor]/[codename]/</code> -- | + | * <code>kernel/[vendor]/[codename]/</code> -- folder ini berisi source kernel. Jika kita mulai melakukan porting, akan lebih mudah kalau menggunakan pre-built kernel (seperti yang ada di instalasi stock / stock rom) dari pada membuat kernel dari awal. Trik untuk melakukan itu adalah meng-ekstrak kernel keluar dari stock rom dari berbagai format yang ada, dan mempaket ulang, bersama dengan ramdisk yang baru, ke bentuk yang bisa digunakan di device kita. Ini akan berbeda dari satu device ke device lain, oleh karenanya akan sangat menolong jika kita bisa melihat device yang hampir sama dengan kita yang menggunakan arsitektur yang sama. Membuat kernel dari source sebetulnya tidak perlu dilakikan untuk semua device, tapi dalam semangat open soyrce, ini adalah langkah yang di sarankan untuk CyanogenMod. |
− | + | Ada paling tidak tiga cara untuk membuat directory di atas: | |
− | ===Method 1: | + | ===Method 1: Menggunakan script <code>mkvendor.sh</code> untuk membuat file=== |
− | + | Gunakan <code>mkvendor.sh</code> script ada di <code>build/tools/device/</code> untuk secara automatis membuat directory. | |
− | + | Script <code>mkvendor</code> hanya dapat digunakan untuk device yang menggunakan file standard <code>boot.img</code> , menggunakan standard konvesi dan dan header Android standard. Script ini tidak jalan untuk device yang berbeda dari standard, seperti Nook Color, Touchpad, dll. | |
− | + | Script ini menerima tiga parameter: '''vendor''', '''codename''', dan file <code>boot.img</code> | |
− | + | Contoh penggunaan: | |
<code>$ ./build/tools/device/mkvendor.sh samsung i9300 ~/Desktop/i9300boot.img</code> | <code>$ ./build/tools/device/mkvendor.sh samsung i9300 ~/Desktop/i9300boot.img</code> | ||
− | + | Dalam contoh , <code>samsung</code> menunjukan '''vendor''', <code>i9300</code> menunjukan '''codename''' dan parameter terakhir path ke file <code>boot.img</code> yang di ekstrak dari partisi boot dengan <code>dd</code> atau diberikan oleh vendor dalam file .zip seperti di diskusikan di atas. | |
− | + | Perintah di atas akan membuat folder <code>/device/samsung/i9300/</code> dalam struktur repo source CyanogenMod. Dalam folder tersebut ada file <code>AndroidBoard.mk</code>, <code>AndroidProducts.mk</code>, <code>BoardConfig.mk</code>, <code>cm.mk</code>, <code>device_[codename].mk</code>, <code>kernel</code> (binary), <code>recovery.fstab</code>, dll | |
− | + | Langkah di atas tidak akan membuat directory <code>kernel/</code> . Kita perlu melakukannya nanti, saat kita sudah siap untuk membuat kernel. | |
− | + | Jika responds yang diberikan adalah | |
− | |||
− | + | "unpackbootimg not found. | |
+ | Is your android build environment set up and have the host tools been built?" | ||
− | + | pastikan anda menjalankan perintah berikut saat mensetup developer environment: | |
− | + | <code>$ make -j4 otatools</code> | |
− | + | === Method 2: Fork dari device yang mirip git repository === | |
− | + | Jika anda mempunya account di GitHub http://www.github.com, ada baiknya mulai melakukan forking https://help.github.com/articles/fork-a-repo dari device yang lain / mirip, dan di rename menjadi device kita. | |
− | + | Pastikan kita mengikuti lisensi dari repository yang kita fork. | |
− | == | + | === Method 3: buat directory dan file secara manual === |
− | + | Kita dapat juga mulai dengan cara membuat directory kosong dan membuat file dengan tangan. Cara ini tidak terlalu di rekomendasikan dan mungkin memrupakan cara yang paling melelahkan, tapi merupakan cara yang paling memberikan pembelajaran. Kita dapat melihat device lainnya untuk referensi dan file yang kita perlukan. | |
− | + | == Meng-kustomsisasi file == | |
− | + | Ada banyak file di folder <code>device/</code> . Agar recovery pada device kita dapat berjalan dengan baik, kita akan mulai memfokuskan pada file / folder berikut, yaitu: | |
+ | |||
+ | <code>BoardConfig.mk</code> | ||
+ | <code>device_[codename].mk</code> | ||
+ | <code>cm.mk</code> | ||
+ | <code>recovery.fstab</code> | ||
+ | <code>kernel</code> | ||
+ | |||
+ | Langkah pertama / utama yang perlu dilakukan adalah untuk membuat recovery image berjalan di device kita sehingga percobaan untuk update .zip selanjutnya menjadi mudah sehingga kita dapat melakukan backup jika di perlukan. Langkah berikut memfokuskan pada bagaimana agar recovery image dapat dibuat dengan baik, bukan bekerja pada CM (CyanogenMod) itu sendiri. Setelah recovery berhasil dibuat dan beroperasi dengan baik, pekerjaan yang kita lakukan dapat di jadikan bagian dari CM. | ||
+ | |||
+ | Mari perhatikan file berikut: | ||
===<code>BoardConfig.mk</code>=== | ===<code>BoardConfig.mk</code>=== | ||
− | + | File ini berisi informasi arsitektur dan build tentang arsitektur motherboard, CPU dan hardware dari device kita. Membuat file ini dengan benar sangat penting artinya. | |
− | + | Untuk membuat booting recovery yang mendasar, beberapa parameter perlu di set di file berikut. | |
− | + | Parameter berikut perlu di set secara benar di <code>BoardConfig</code> agar dapat meng-compile image recovery yang berjalan dengan baik: | |
− | *'''TARGET_ARCH''': | + | *'''TARGET_ARCH''': ini adalah arsitetur device, biasanya seperti, '''arm''' atau '''omap3'''. |
− | *'''BOARD_KERNEL_CMDLINE''': | + | *'''BOARD_KERNEL_CMDLINE''': tidak semua device akan pass buat parameter, akan tetapi kalau device kita melalukan hal tersebut maka parameter ini '''harus''' di isi dengan benar agar boot dapat berjalan dengan baik. Kita dapat memperoleh informasi tentang ini di <code>ramdisk.img</code>. |
− | *'''BOARD_KERNEL_PAGESIZE''': | + | *'''BOARD_KERNEL_PAGESIZE''': pagesize dari stock <code>boot.img</code> dan harus di set secara benar agar dapat boot secara benar. Nilai yang sering digunakan adalah '''2048''' dan '''4096''' dan informasi ini dapat di ekstrak dari stock kernel. |
− | *'''BOARD_BOOTIMAGE_PARTITION_SIZE''': | + | *'''BOARD_BOOTIMAGE_PARTITION_SIZE''': banyaknya byte yang dialokasikan ke partisi kernel image. |
− | *'''BOARD_RECOVERYIMAGE_PARTITION_SIZE''': | + | *'''BOARD_RECOVERYIMAGE_PARTITION_SIZE''': banyaknya byte yang dialokasikan ke partisi recovery image. |
− | *'''BOARD_SYSTEMIMAGE_PARTITION_SIZE''': | + | *'''BOARD_SYSTEMIMAGE_PARTITION_SIZE''': banyaknya bytes yang dialokasikan ke partisi Android system filesystem. |
− | *'''BOARD_USERDATAIMAGE_PARTITION_SIZE''': | + | *'''BOARD_USERDATAIMAGE_PARTITION_SIZE''': banyaknya byte yang dialokasikan ke partisi Android data filesystem. |
− | + | ||
− | *'''BOARD_HAS_NO_SELECT_BUTTON''': (optional), | + | Catatan: Nilai di atas dapat di peroleh dengan mengalikan size <code>/proc/partitions</code> atau <code>/proc/mtd</code> dengan block size, biasanya '''1024'''. |
− | *'''BOARD_FORCE_RAMDISK_ADDRESS / BOARD_MKBOOTIMG_ARGS''': (optional), | + | |
+ | *'''BOARD_HAS_NO_SELECT_BUTTON''': (optional), gunakan ini jika device kita membutuhkan tombol '''Power''' untuk mengkonfirmasi pilihan di recovery. | ||
+ | *'''BOARD_FORCE_RAMDISK_ADDRESS / BOARD_MKBOOTIMG_ARGS''': (optional), gunakan ini untuk memaksakan address tertentu untuk ramdisk. Ini biasanya dibutuhkan di partisi yang besar agar ramdisk di load ke tempat yang benar. Nilai ini dapat di peroleh dari stock kernel. | ||
===<code>device_[codename].mk</code>=== | ===<code>device_[codename].mk</code>=== | ||
− | + | Makefile <code>device_codename.mk</code> berisi instruksi tentang bagaimana paket Android dibuat, dan kemana mengcopy file dan paket tertentu, atau properties tertentu yang perlu di set saat meng-compile. | |
− | + | File ini dapat digunakan untuk mengcopy file penting ke ramdisk saat meng-compile. | |
− | *'''PRODUCT_COPY_FILES''': | + | |
− | + | * '''PRODUCT_COPY_FILES''': digunakan untuk meng-copy file saat proses compile ke ramdisk, yang akan berlokasi di <code>$OUT/recovery/root</code>. Contoh: | |
<code>$(LOCAL_PATH)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \</code> | <code>$(LOCAL_PATH)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \</code> | ||
− | + | Ini akan meng-copy binary file offmode_charging ke folder <code>sbin</code> dalam ramdisk. | |
− | *'''PRODUCT_NAME / PRODUCT_DEVICE''': | + | * '''PRODUCT_NAME / PRODUCT_DEVICE''': digunakan untuk men-set codename yang digunakan. Nama device ini yang digunakan dengan perintah [[Lunch]]. |
===<code>kernel</code>=== | ===<code>kernel</code>=== | ||
− | + | Ini merupakan prebuilt kernel image atau kernel yang kita buat sendiri yang digunakan untuk boot device. Format dari kernel dapat zImage atau uImage, tergantung kebutuhan arsitektur dari device kita. | |
===<code>cm.mk</code>=== | ===<code>cm.mk</code>=== | ||
− | + | Kita perlu mengubah ke file ini untuk di integrasikan dengan perintah <code>lunch</code>, <code>brunch</code>, dan <code>breakfast</code> , sehingga device kita dapat muncul dalam daftar dan di build dengan benar. Kita juga perlu men-set beberapa variable (lihat device lainnya) untuk meng-indikasikan size dari animasi slash yang digunakan, apakah ini tablet atau telepon, dll. | |
− | + | Beberapa dari setting ini tidak digunakan untuk build hanya untuk recovery, tapi sebaiknya kita tetap men-set dengan benar karena jika recovery dapat dibuat dan jalan, maka setting-an kita akan menjadi penting artinya. | |
− | + | Sebaiknya, kita lihat lagi device yang mirip dengan device kita untuk memperoleh gambaran settingan mana yang perlu di set. Cara ini mememang memerlukan intuisi. | |
===<code>recovery.fstab</code>=== | ===<code>recovery.fstab</code>=== | ||
− | <code>recovery.fstab</code> | + | <code>recovery.fstab</code> mendefinisikan file system mount point, tipe file system, dan block device untuk setiap partisi di device yang kita gunakan. File ini sangat mirip dengan <code>/etc/fstab</code> di sistem operasi Linux. |
− | + | Contoh: | |
<code>/system ext4 /dev/block/mmcblk0p32 </code> | <code>/system ext4 /dev/block/mmcblk0p32 </code> | ||
− | + | Ini akan menset block device <code>mmcblk0p32</code> untuk di mount di <code>/system</code> dengan tipe filesystem <code>ext4</code> | |
− | + | Semua mountpoint harus ada di file ini, dan ini amat sangat '''penting''' karena informasi ini karena jika tidak hal yang sangat buruk akan terjadi, seperti, recovery flash menulis ke tempat yang salah. | |
− | + | Tipe filesystem <code>datamedia</code> dapat digunakan untuk sdcard internal juga menset block device ke <code>/dev/null</code>. | |
===<code>vendorsetup.sh</code>=== | ===<code>vendorsetup.sh</code>=== | ||
− | <code>vendorsetup.sh</code> | + | <code>vendorsetup.sh</code> akan di panggil saat <code>setupenv.sh</code> di jalankan. Ini digunakan untuk menambahkan <code>lunch</code> non-standard yang di kombinasikan ke menu <code>lunch</code>. |
− | + | Untuk menambahkan device kita ke menu lunch: | |
<code>add_lunch_combo cm_<codename>-userdebug</code> | <code>add_lunch_combo cm_<codename>-userdebug</code> | ||
− | == | + | == Build test recovery image == |
+ | |||
+ | Untuk build hanya recovery, set <code>lunch</code> sama seperti build biasa, kemudian tulis <code>make recoveryimage</code> | ||
− | + | Jika gagal (kemungkinan besar akan gagal), lihat berbagai tip untuk "dealing with build errors" di Wiki CyanogenMod. | |
− | + | Jika kita memiliki [[fastboot]], kita dapat mencoba untuk menginstalasi recovery image ke partisi recovery. Ada ara lain untuk menginstalasi recovery, seperti menggunakan <code>dd</code> dari sistem yang di root untuk mem-flash ke tempat yang di tuju. | |
− | + | Tidak banyak yang perlu di jelaskan disini, yang penting pastikan recovery dapat dilakukan sebelum kita masuk / bekerja dengan CyanogenMod. Mode recovery yang 100% jalan dan reliable amat sangat penting sekali sebelum kita bekerja / build experimen di Android. | |
− | |||
− | === | + | === Atur <code>recovery_ui.cpp</code> jika dibutuhkan === |
− | + | Anda mungkin akan menemukan bahwa walaupun recovery image dapat jalan, beberapa tombol hardware, seperti tombol volume atau power, yang biasanya digunakan untuk scroll ke berbagai opsi, tidak bisa jalan. | |
− | + | Kita perlu mengatur nilai [[GPIO]] agar tombol ini dapat di kenali. Sama halnya, jika kita ingin meng-include/exclude opsi atau memodifikasi elemen UI. | |
− | + | Untuk itu, kita perlu membuat dan mengedit <code>/device/[vendor]/[codename]/recovery/recovery_ui.cpp</code>. Kita akan menemukan banyak sekali contoh untuk file ini, maupun file pendamping <code>recovery/Android.mk</code> yang dapat digunakan untuk membuat file tersebut, dan bagaimana cara menggunakannya. | |
− | + | Tip: Nilai GPIO untuk device kita bisa ditemukan di source kernel. | |
+ | == Letakan folder device kita di github, dan gunakan local manifest untuk secara automatic sync dengan repo sync == | ||
− | + | Ketika kita sudah memulai dengan folder device kita, kita dapat membuat account di GitHub http://github.com dan ada baiknya membaca-baca https://help.github.com/articles/creating-a-new-repository untuk menset folder kita sebagai repository public di GitHub.Ini akan menjadi kesempatan untuk belajar tentang [[git]], dan juga source kita akan dapat di akses oleh mereka yang akan bekerjasama dengan kita. | |
− | + | Pada saat memberikan nama repository, gunakan format '''android_device_VENDOR_CODENAME''', dimana VENDOR dan CODENAME menggunakan nilai dari device. Misalnya nama account GitHub kita adalah "fat-tire" dan codename device kita adalah "encore", yang dibuat oleh Barnes and Noble. Kita perlu menyebutkan nama repository kita sebagai '''android_device_bn_encore'''. Repository tersebut dapat di akses pada '''https://github.com/fat-tire/android_device_bn_encore'''. Demikian pula, kernel repository akan bernama '''android_kernel_bn_encore'''. Dia dapat di akses pada '''https://github.com/fat-tire/android_kernel_bn_encore'''. | |
− | + | Hal terakhir yang perlu dilakukan adalah membuat [[local manifest]] sehingga orang lain dapat menggunakan secara automatis men-download dan membuat perubahan yang ada di mereka tetap up-to-date. Berikut adalah contoh dari skenario di atas: | |
− | |||
<code><?xml version="1.0" encoding="UTF-8"?> | <code><?xml version="1.0" encoding="UTF-8"?> | ||
Line 259: | Line 272: | ||
</manifest></code> | </manifest></code> | ||
− | |||
− | + | Catatan: attribut ''revision'' sifatnya opsional. Jika tidak ditulis, maka <code>repo sync</code> akan menggunakan revisi yang tertulis di <code><default ... /></code> tag di default manifest. | |
+ | |||
+ | Setelah kita test file [[local manifest]] dapat bekerja, kita dapat berikan file tersebut ke orang lain, dan mereka akan mencoba hasil karya kita. Pada titik ini, kita perlu terus mem-push perubahan yang kita buat ke GitHub, dan mungkin perlu memberikan ijin pada yang lain untuk commit access sehingga kita dapat bekejasama mengerjakan device tersebut. | ||
− | + | Jika anda karena suatu hal perlu mengganti atau menambahkan repository lain dari CyanogenMod, anda dapat menambahkan repository menggunakan [[local manifest]]. Setelah kita membuat semuanya berjalan dengan baik, kita dapat menggunakan [[Gerrit]] untuk men-subnmit file yang ada di repository tersebut kembali ke CyanogenMod. | |
− | == | + | == Tambahkan blob ke directory <code>vendor/</code> == |
− | + | Setelah kita mempunyai recovery yang berjalan dengan baik, saatnya untuk mem-build CyanogenMod dan jalan. | |
− | + | Yang pertama kali perlu dilakukan adalah meletakan semua proprietary binary blob ke folder <code>vendor/</code> bersama file <code>.mk</code> yang akan di tambahkan di build final. | |
− | + | Hal ini membutuhkan tiga tahap: | |
− | # | + | # Buat script <code>extract-files.sh</code> dan <code>setup-makefiles.sh</code> untuk mengambil blob file dari device menggunakan <code>adb</code> dan meletakannya di directory yang benar di bawah <code>/vendor/</code> . Ada banyak contoh tersedia untuk berbagai device. |
− | # | + | # Buat Makefile <code>.mk</code> untuk mengcopy file ke folder <code>$OUT</code> saat proses build dan meletakannya di tempat yang benar. Sama seperti sebelumnya, sebaiknya menggunakan contoh / pegangan device lain untuk membuat Makefile karena harusnya mirip. Sebua contoh filename adalah <code>BoardConfigVendor.mk</code> |
− | # | + | # Pastikan bahwa Makefile yang kita buat termasuk dalam <code>BoardConfig.mk</code> melalui perintah seperti <code>-include vendor/[vendor]/[codename]/BoardConfigVendor.mk</code>. Sama seperti sebelumnya, device yang ada harusnya dapat memberikan ilustrasi bagaimana cara membuatnya. |
− | == | + | == Revisi directory <code>device/</code> == |
− | + | Karena kita sudah mempunyai directory yang dapat berjalan dengan baik, kembali dan mulai memodifikasi file di folder <code>device/</code> . Seperti biasanya, gunakan device yang mirip sebagai referensi. | |
− | + | Kita sekarang mempunyai cara yang mudah untuk melakukan backup dan test hasil build yang kita lakukan. Oleh karena-nya kita dapat mulai melakukan perubahan-perubahan pada folder device itu sendiri, dan melihat apakah kita dapat membuat-nya boot ... Jika kita berhasil melakukannya, selanjutnya adalah masalah bagaimana membuat dan mendukung berbagai komponen dan peripheral, satu per satu. | |
− | == | + | ==Cari pertolongan dari pabrikan & vendor== |
− | + | Banyak OEM (Original Equipment Manufacturer) yang membuat device yang kita gunakan menyediakan wiki, dokumentasi, contoh source code yang dapat membantu kita dapat menyelesaikan porting. Anda akan menemukan bahwa beberapa perusahaan lebih bersahabat dengan komunitas developer di banding dengan yang lain. Ini ada beberapa EOM dan vendor beserta situs dan repository-nya yang mungkin dapat menolong. | |
− | ( | + | (Daftar ini tedak lengkap) |
{| class=wikitable | {| class=wikitable | ||
Line 311: | Line 325: | ||
|} | |} | ||
− | |||
− | == | + | Kadangkala jika kita mempunyai pertanyaan dapat mengirim e-mail ke developer atau support forum. |
+ | |||
+ | ==Menambahkan XML Overlas == | ||
− | + | Kemungkinan besar di file <code>device_[codename].mk</code> dari device kita, ada kalimat yang kira-kira sebagai berikut: | |
DEVICE_PACKAGE_OVERLAYS := \ | DEVICE_PACKAGE_OVERLAYS := \ | ||
device/[vendor]/[codename]/overlay | device/[vendor]/[codename]/overlay | ||
− | + | Kalimat ini pada dasarnya menset folder <code>overlay/</code> yang meungkinkan kita untuk meng-override file XML yang digunakan Android framework or apps, hanya untuk device ini. Untuk melakukan hal ini, buat sebuah struktur directory yang mem-mirror path menuju XML file, mulai dari root dari source code kita. Kemudian ganti file yang ingin kita overlay. | |
+ | |||
+ | Contoh: Misalnya kita ingin meng-override standard Android setting. Lihat file di <code>frameworks/base/core/res/res/values/config.xml</code>. Copy ke <code>device/[vendor]/[codename]/overlay/frameworks/base/core/res/res/values/config.xml</code>. Sekarang versi kita yang akan digunakan bukan yang lain. Kita hanya perlu menambahkan setting yang ingin kita override -- tidak perlu semua setting, sehingga kita hanya perlu mengubah file yang berbeda dengan default saja. | ||
− | + | Kita dapat overlay file XML apa saja, yang bereffek pada layout, setting, preferensi, translasi dan lainnya. | |
− | + | == Membuat kernel dan kernel module dari source code == | |
− | + | Jika kita sebelumnya menggunakan pre-built kernel, sampai suatu saat kita ingin mulai membuat kernel dari nol. | |
− | + | Lihat instruksi cara mengubah file <code>BoardConfig.mk</code> untuk membuat CyanogenMod [[Doc:_integrated_kernel_building|build the kernel and any required kernel modules automatically]]. | |
− | + | == Penutup == | |
+ | |||
+ | Memang sulit untuk membahas secara lengkap cara melakukan porting dari awal sampai akhir. AKan tetapi, semoga bagian ini dapat menjelaskan bagaimana berbagai hal di setup dan langkah yang perlu kita ambil. Kita selalu dapat bertanya di forum http://forum.cyanogenmod.org forums atau [[IRC]]. | ||
+ | |||
+ | Semoga proses yang akan anda lalui akan membawa berkah dan pengetahuan bagi anda, bukan mustahil juga akan memberikan pengakuan :) .. Ini terutama akan terasa, saat porting kita lakukan dapat bekerja lebih baik daripada stock. | ||
+ | |||
+ | Tentunya kita dapat mengkontribusikan pekerjaan kita ke upstream. | ||
+ | [[Doc:_Submitting_A_Port|Here are the instructions]] untuk bagaimana cara melakukannya. | ||
+ | |||
+ | Semoga sukses! | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Cara Porting ROM Android | ||
+ | CROSS-EVERCOSS - Kali ini saya akan mencoba membahas yaitu bagaimana Porting ROM Android, mungkin bagi sebagian orang sangat penasaran bagaiman ya porting ROM?. Dibawah mungkin ada beberapa langkah dalam melakukan porting ROM. Untuk lebih jelas mari simak uraian berikut ini: | ||
+ | PERINGATAN: Harap ikuti tutorial di bawah dengan teliti agar terhindar dari kemungkinan | ||
+ | BRICK, dan ingat saya tidak bertanggung jawab atas segala kerusakan yang mungkin terjadi pada hape anda, jadi lakukan dengan resiko anda sendiri!!! | ||
+ | |||
+ | BAHAN BAHAN: | ||
+ | 1. Stock Rom | ||
+ | 2. Port Rom mt6582 bisa di cari di http://www.needrom.com (usahain spec, ukuran layar sama) | ||
+ | 3. Komputer kalau ga punya bisa pakai Root Explorer | ||
+ | 4. Notepad++ (untuk komputer) | ||
+ | |||
+ | TAHAP AWAL: | ||
+ | 1. Untuk komputer Buat 2 folder satu folder di beri nama Stock dan yang satu lagi Port | ||
+ | 2. Extract Stock Rom ke folder Stock dan Port Rom ke folder Port | ||
+ | 3. Kalo udah,, ke tahap selanjutnya.. | ||
+ | |||
+ | TAHAP PORTING: | ||
+ | 2.copy file berikut dari stok ke port | ||
+ | |||
+ | 1. Folder firmware dan ppp letak nya di system/etc/disini. | ||
+ | 2. File camera.default.so letak nya di system/lib/hw. | ||
+ | 3. File ccci.ko, ccci_plat.ko, ccmni.ko, mtk_stp_wmt.ko, mtk_wmt_wifi.ko, dan pvrsrvkm.ko letak nya di system/lib/modules/disini. | ||
+ | 4. File libbluetooth_mtk.so letaknya di system/lib/disini. | ||
+ | 5. File Generic.kl, dan mtk-kpd.kl letaknya di system/usr/keylayout/disini. | ||
+ | 6. File libmnlp letaknya di system/xbin/disini. | ||
+ | 7. Boot.img. | ||
+ | |||
+ | 3.untuk folder firmware dan ppp hapus dulu dari port,, baru di paste. | ||
+ | 4.kalau sudah di pindah semuanya tinggal di zip kan lagi. | ||
+ | kalau makai komputer tandai semua meta if - boot.img - system. lalu pack semua dengan winrar (zip bukan rar), kalau makai Root Explorer tahan lama folder nya pilih zip this folder. | ||
+ | 5. rom portingan siap di instal. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== See Also == | == See Also == | ||
Line 348: | Line 406: | ||
* [https://groups.google.com/forum/?fromgroups#!forum/android-porting Android-Porting] -- the official Google Group on this topic | * [https://groups.google.com/forum/?fromgroups#!forum/android-porting Android-Porting] -- the official Google Group on this topic | ||
* [http://forum.cyanogenmod.org/topic/15492-general-cyanogenmod-porting-discussion/ General CyanogenMod Porting Discussion] -- a forum post on porting | * [http://forum.cyanogenmod.org/topic/15492-general-cyanogenmod-porting-discussion/ General CyanogenMod Porting Discussion] -- a forum post on porting | ||
− | |||
==Referensi== | ==Referensi== | ||
Line 355: | Line 412: | ||
* https://groups.google.com/forum/?fromgroups#!forum/android-porting | * https://groups.google.com/forum/?fromgroups#!forum/android-porting | ||
* http://forum.cyanogenmod.org/topic/15492-general-cyanogenmod-porting-discussion/ | * http://forum.cyanogenmod.org/topic/15492-general-cyanogenmod-porting-discussion/ | ||
+ | * http://wiki.cyanogenmod.org/w/Doc:_integrated_kernel_building | ||
+ | * http://cross-evercoss.blogspot.com/2014/11/cara-porting-rom-android.html | ||
+ | * http://www.needrom.com/download/porting-mtk-rom/ | ||
+ | * http://wiki.cyanogenmod.org/w/Build_for_d802 |
Latest revision as of 09:35, 3 January 2015
Beberapa tip untuk porting CyanogenMod ke device lain
Kemungkinan kita akan menemui telepon / tablet / apapun yang belum tersedia di CM.
Kemungkinan anda sebelumnya sudah perlu membuat CyanogenMod di komputer anda untuk satu atau dua device, dan anda merasa nyaman dengan proses compile-nya. Bahkan, anda masih mempunyai source code yang siap untuk menangani proyek yang besar.
Tampaknya ini adalah kesempatan besar anda :) ...
Catatan: Untuk keperluan tutorial ini, semua directory yang akan digunakan akan mengacu pada directory root source code (yaitu, tempat dimana kita menjalankan perintah "repo init"). Semua nama folder akan mengacu relatif pada roor source code.
Kebutuhan
Porting CyanogenMod ke device yang baru kemungkinan akan amat sangat mudah sekali, atau amat sangat sukar sekali, tergantung pada device tersebut, apakah dia menjalankan versi android yang terbaru atau tidak, dan tentunya keterampilan kita sebagai developer.
Akan sangat sukar melakukan porting tanpa mempunyai pengalaman membuat CyanogenMod (atau recovery) untuk device lain. Jadi sarannya, jika anda sama sekali belum pernah membuat / build CyanogenMod maka coba lah.
Selanjutnya, anda sebaiknya mulai membuat diri anda familiar dengan source code Cyanogenmod. Kemungkinan besar, sebagian besar yang kita butuhkan ada pada folder:
/device/[vendor]/[codename] /vendor/[vendor]/[codename] /kernel/[vendor]/[codename]
Ada baiknya kita mempelajari seluruh struktur folder yang ada di CyanogenMod karena akan sangat bermanfaat saat kita melakukan porting.
Kumpulkan informasi tentang device kita
Sebelum kita melakukan porting, kita perlu mengumpulkan sebanyak mungkin informasi tentang device kita. Masuk ke wikipedia dan identifikasi:
- nama produk.
- code name
- arsitektur
- memory size
- internal storage size
- platform architecture
Simpan semua informasi ini di sebuah file untuk memudahkan mencarian. Usahakan untuk belajar sebanyak mungkin tentang device tersebut, termasuk kesamaan dengan device lain.
Banyak device secara arsitektur mirip dengan device yang sudah ada di pasar dan sudah ada porting CM-nya. Jika device baru muncul, kemungkinan kita akan menemukan kemiripan ke device lain, mungkin akan berbeda di besarnya layar atau lebih banyak memory atau beberapa perbedaan kecil lainnya. Jika kita dapat menemukan "sepupu" atau "nenek moyang" dari device kita, maka sebagian besar pekerjaan kita sudah dilakukan.
Sebagian besar informasi yang kita butuhkan kemungkinan besar tersedia online, asumsinya device tersebut telah menjalankan versi android non-CyanogenMod , kita akan memperoleh informasi tentang device tersebut. Untuk melihat file berisi informasi tersebut, device perlu di root. Kadang kala, kita dapat menemukan paket stock firmware update secara online, dan kita dapat melihat fie dari arsip file .zip.
Lihat pada device /system/build.prop
Untuk device yang sudah menjalankan Android, akan ada file /system/build.prop di device yang akan berisi informasi yang sangat bermanfaat saat kita melakukan porting. File ini berisi definisi dari berbagai parameter dan setting yang digunakan oleh Android.
Jika kita sebelumnya pernah menginstalasi adb ke komputer kita, kita dapat menggunakan perintah berikut untuk mengambil file tersebut ke komputer kita:
adb pull /system/build.prop
Jika kita memperoleh error karena permission (ijin), maka device perlu di root untuk dapat mengakses file tersebut. Untung, ada cara lain untuk memperoleh file tersebut. Contoh, file tersebut akan ada di paket stock firmware "upgrade" yang tersebut online.
Jika kita sudah berhasil memperoleh file /system/build.prop
- Tulis nilai dari parameter ro.product.manufacturer. Ini adalah nama vendor. [vendor] adalah nama dari manufacturer/vendor dari device. CM sudah membuat konvensi nama untuk vendor yang besar, seperti, samsung, htc, lge, dll. Perhatikan bahwa dalam directory ini, nama vendor selalu huruf kecil tanpa spasi.
- Tulis nilai dari parameter ro.product.device . Ini adalah codename device. [codename] berhubungan dengan project code name dari device. Biasanya bukan nama sales dari device. Jika anda pernah membuat CM sebelumnya (sebaiknya, anda pernah!), anda akan familiar dengan konsep code name dari masing-masing device. Seperti vendor, codename selalu huruf kecil dan tidak ada spasi.
Catatan: kadang kala device di identifikasi dengan parameter lain, seperti ro.product.board.
Simpan baik-baik file build.prop, karena kita akan membutuhkannya nanti.
Pelajari boot.img
dan recovery.img
Seperti disebutkan sebelumnya, saat kita melakukan porting, kita biasanya berharap untuk dapat menggunakan kernel yang sudah jadi yang kita yakini dapat berjalan dengan baik daripada membuat dari source code. Tergantung dari device yang kita miliki, kita mungkin perlu mengekstrak file kernel dari device. Kernel kemungkinan berbentuk sebuah file (seperti kebanyakan device OMAP) atau digabungkan dengan ramdisk dalam partisi boot atau partisi recovery.
Sejalan dengan itu, isi dari stock ramdisk sangat menolong dan kadang kala bisa di extrak dan di lihat. Kadang kala, sebuah device membutuhkan file tertentu dari stock ramdisk agar dapat boot secara benar, load modul, dll. Biasanya, kita dapat melihat file di ramdisk dari device itu sendiri, akan tetapi biasanya kita lebih suka untuk melihat directory secara keseluruhkan.
Catatan: ramdisk adalah sekumpulan kecil file dan directory yang di load ke memory dengan kernel. Kernel kemudian akan menjalankan satu dari file di ramdisk yaitu init
, yang kemudian akan menjalankan script (init.rc
, init.[codename].rc
, dll.) yang kemudian akan me-load sisa sistem operasi Android. ramdisk dan kernel dapat di paket bersama melalui berbagai cara menggunakan tool seperti mkbootimg
, mkimage
, dan cara lainya.
Kita sering kali dapat meng-ekstrak boot dan recovery image (dari file boot.img
dan recovery.img
) di sebuah Android device yang sudah di root menggunakan perintah dd di linux. Atau, jika kita mempunyai akses ke file update .zip
dari vendor, kita seringkali dapat memperoleh file tersebut di dalamnya.
Kumpulkan source code yang tersedia
Pabrikan atau vendor dari device menggunakan android minimal harus membuat source code tersedia untuk semua berdasarkan lisensi GPL berdasarkan permohonan, termasuk (dan terutama) kernel. Anda akan sangat membutuhkan untuk memperoleh copy dari kernel source dan menyimpannya dengan baik.
Meneliti struktur partisi
Bagian penyimpanan utama untuk jangka panjang dari mobile device kita biasanya adalah sebuah -- "emmc" (embedded multimedia card) -- kira-kira seperti komputer harddisk yang di siapkan sedemikian rupa untuk mengidentifikasi dan mengisolasi wilayah yang berbeda dari data. Wilayah yang unik ini biasa di sebut partisi dan bisa menyimpan berbagai jenis data di dalanmnya. Beberapa partisi berisi data mentah -- firmware, kernel, ramdisk, dll. Lebih sering, sebuah partisi di format menggunakan file system tertentu yang dikenali oleh kernel sehingga file dan directory dapat dibaca dan di tulis ke dalanmnya.
Sebelum kita mengganti sistem operasi asli dengan CyanogenMod, sangat penting untuk memastikan struktur partisi dari device. Recovery image yang kita buat akan memerlukan informasi untuk menemukan berbagai directory Android. Terutama kita perlu mengetahui mana directory yang di berikan kepada /system
, /data
, /cache
, dan /sdcard
.
Kita ingin mengetahui partisi mana yang perlu ada, di device apa, bagaimana cara mount-nya, juga size dari partisi. Informasi ini perlu ditulis di file BoardConfig.mk
di directory /vendor
.
Jika anda beruntung, file recovery.fstab
bisa di temukan di file recovery.img
, ini akan mempercepat proses untuk mengetahui apa kemana. Juga file init.[codename].rc
di ramdisk akan memiliki informasi tersebut. Lihat kalimat di atas dimana partisi di mount
.
Juga, perintah:
$ cat /proc/partitions
Dari device yang berjalan / beroperasi kita juga dapat memperoleh informasi tentang partisi. Ada baiknya lihat /proc/emmc
, /proc/mounts
atau /proc/mtd
. Kita juga akan memperoleh beberapa informasi dari perintah mount
(jalankan sebagai root).
Juga cek /cache/recovery.log
atau /tmp/recovery.log
.
Akhirnya, jika kita punya source code dari bootloader (seperti u-boot yang banyak digunakan di OMAP-based device), kita kemungkinan akan menemukan informasi tersebut.
HATI-HATI: pada kasus langka, seperti di HP Touchpad, digunakan virtual file system.
Set up tiga directory baru
Sekarang kita sudah mengumpulkan semua informasi tentang device kita, saatnya untuk membuat folder untuk konfigurasi device, yang berlokasi di directory berikut, relatif terhadap source directory.
device/[vendor]/[codename]/
-- lokasi ini berisi file instalasi yang khusus untuk device kita. Directorydevice/
berisi 99-100% konfigurasi maupun code yang khusus untuk device kita. Kita harus mengetahui directory ini dengan baik. Seperti di jelaskan sebelumnya, akan sangat baik untuk mengadaptasi directory dari device yang secara arsitektur sama / mirip dengan yang ingin kita porting. Contoh, cari device yang menggunakan platform yang sama.
vendor/[vendor]/[codename]/
-- Directoryvendor/
berisi file proprietary, binary yang di backup dari device asli (atau di sediakan oleh vendor, seperti Google Nexus dan beberapa TI graphics).
kernel/[vendor]/[codename]/
-- folder ini berisi source kernel. Jika kita mulai melakukan porting, akan lebih mudah kalau menggunakan pre-built kernel (seperti yang ada di instalasi stock / stock rom) dari pada membuat kernel dari awal. Trik untuk melakukan itu adalah meng-ekstrak kernel keluar dari stock rom dari berbagai format yang ada, dan mempaket ulang, bersama dengan ramdisk yang baru, ke bentuk yang bisa digunakan di device kita. Ini akan berbeda dari satu device ke device lain, oleh karenanya akan sangat menolong jika kita bisa melihat device yang hampir sama dengan kita yang menggunakan arsitektur yang sama. Membuat kernel dari source sebetulnya tidak perlu dilakikan untuk semua device, tapi dalam semangat open soyrce, ini adalah langkah yang di sarankan untuk CyanogenMod.
Ada paling tidak tiga cara untuk membuat directory di atas:
Method 1: Menggunakan script mkvendor.sh
untuk membuat file
Gunakan mkvendor.sh
script ada di build/tools/device/
untuk secara automatis membuat directory.
Script mkvendor
hanya dapat digunakan untuk device yang menggunakan file standard boot.img
, menggunakan standard konvesi dan dan header Android standard. Script ini tidak jalan untuk device yang berbeda dari standard, seperti Nook Color, Touchpad, dll.
Script ini menerima tiga parameter: vendor, codename, dan file boot.img
Contoh penggunaan:
$ ./build/tools/device/mkvendor.sh samsung i9300 ~/Desktop/i9300boot.img
Dalam contoh , samsung
menunjukan vendor, i9300
menunjukan codename dan parameter terakhir path ke file boot.img
yang di ekstrak dari partisi boot dengan dd
atau diberikan oleh vendor dalam file .zip seperti di diskusikan di atas.
Perintah di atas akan membuat folder /device/samsung/i9300/
dalam struktur repo source CyanogenMod. Dalam folder tersebut ada file AndroidBoard.mk
, AndroidProducts.mk
, BoardConfig.mk
, cm.mk
, device_[codename].mk
, kernel
(binary), recovery.fstab
, dll
Langkah di atas tidak akan membuat directory kernel/
. Kita perlu melakukannya nanti, saat kita sudah siap untuk membuat kernel.
Jika responds yang diberikan adalah
"unpackbootimg not found. Is your android build environment set up and have the host tools been built?"
pastikan anda menjalankan perintah berikut saat mensetup developer environment:
$ make -j4 otatools
Method 2: Fork dari device yang mirip git repository
Jika anda mempunya account di GitHub http://www.github.com, ada baiknya mulai melakukan forking https://help.github.com/articles/fork-a-repo dari device yang lain / mirip, dan di rename menjadi device kita.
Pastikan kita mengikuti lisensi dari repository yang kita fork.
Method 3: buat directory dan file secara manual
Kita dapat juga mulai dengan cara membuat directory kosong dan membuat file dengan tangan. Cara ini tidak terlalu di rekomendasikan dan mungkin memrupakan cara yang paling melelahkan, tapi merupakan cara yang paling memberikan pembelajaran. Kita dapat melihat device lainnya untuk referensi dan file yang kita perlukan.
Meng-kustomsisasi file
Ada banyak file di folder device/
. Agar recovery pada device kita dapat berjalan dengan baik, kita akan mulai memfokuskan pada file / folder berikut, yaitu:
BoardConfig.mk
device_[codename].mk
cm.mk
recovery.fstab
kernel
Langkah pertama / utama yang perlu dilakukan adalah untuk membuat recovery image berjalan di device kita sehingga percobaan untuk update .zip selanjutnya menjadi mudah sehingga kita dapat melakukan backup jika di perlukan. Langkah berikut memfokuskan pada bagaimana agar recovery image dapat dibuat dengan baik, bukan bekerja pada CM (CyanogenMod) itu sendiri. Setelah recovery berhasil dibuat dan beroperasi dengan baik, pekerjaan yang kita lakukan dapat di jadikan bagian dari CM.
Mari perhatikan file berikut:
BoardConfig.mk
File ini berisi informasi arsitektur dan build tentang arsitektur motherboard, CPU dan hardware dari device kita. Membuat file ini dengan benar sangat penting artinya.
Untuk membuat booting recovery yang mendasar, beberapa parameter perlu di set di file berikut.
Parameter berikut perlu di set secara benar di BoardConfig
agar dapat meng-compile image recovery yang berjalan dengan baik:
- TARGET_ARCH: ini adalah arsitetur device, biasanya seperti, arm atau omap3.
- BOARD_KERNEL_CMDLINE: tidak semua device akan pass buat parameter, akan tetapi kalau device kita melalukan hal tersebut maka parameter ini harus di isi dengan benar agar boot dapat berjalan dengan baik. Kita dapat memperoleh informasi tentang ini di
ramdisk.img
. - BOARD_KERNEL_PAGESIZE: pagesize dari stock
boot.img
dan harus di set secara benar agar dapat boot secara benar. Nilai yang sering digunakan adalah 2048 dan 4096 dan informasi ini dapat di ekstrak dari stock kernel. - BOARD_BOOTIMAGE_PARTITION_SIZE: banyaknya byte yang dialokasikan ke partisi kernel image.
- BOARD_RECOVERYIMAGE_PARTITION_SIZE: banyaknya byte yang dialokasikan ke partisi recovery image.
- BOARD_SYSTEMIMAGE_PARTITION_SIZE: banyaknya bytes yang dialokasikan ke partisi Android system filesystem.
- BOARD_USERDATAIMAGE_PARTITION_SIZE: banyaknya byte yang dialokasikan ke partisi Android data filesystem.
Catatan: Nilai di atas dapat di peroleh dengan mengalikan size /proc/partitions
atau /proc/mtd
dengan block size, biasanya 1024.
- BOARD_HAS_NO_SELECT_BUTTON: (optional), gunakan ini jika device kita membutuhkan tombol Power untuk mengkonfirmasi pilihan di recovery.
- BOARD_FORCE_RAMDISK_ADDRESS / BOARD_MKBOOTIMG_ARGS: (optional), gunakan ini untuk memaksakan address tertentu untuk ramdisk. Ini biasanya dibutuhkan di partisi yang besar agar ramdisk di load ke tempat yang benar. Nilai ini dapat di peroleh dari stock kernel.
device_[codename].mk
Makefile device_codename.mk
berisi instruksi tentang bagaimana paket Android dibuat, dan kemana mengcopy file dan paket tertentu, atau properties tertentu yang perlu di set saat meng-compile.
File ini dapat digunakan untuk mengcopy file penting ke ramdisk saat meng-compile.
- PRODUCT_COPY_FILES: digunakan untuk meng-copy file saat proses compile ke ramdisk, yang akan berlokasi di
$OUT/recovery/root
. Contoh:
$(LOCAL_PATH)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \
Ini akan meng-copy binary file offmode_charging ke folder sbin
dalam ramdisk.
- PRODUCT_NAME / PRODUCT_DEVICE: digunakan untuk men-set codename yang digunakan. Nama device ini yang digunakan dengan perintah Lunch.
kernel
Ini merupakan prebuilt kernel image atau kernel yang kita buat sendiri yang digunakan untuk boot device. Format dari kernel dapat zImage atau uImage, tergantung kebutuhan arsitektur dari device kita.
cm.mk
Kita perlu mengubah ke file ini untuk di integrasikan dengan perintah lunch
, brunch
, dan breakfast
, sehingga device kita dapat muncul dalam daftar dan di build dengan benar. Kita juga perlu men-set beberapa variable (lihat device lainnya) untuk meng-indikasikan size dari animasi slash yang digunakan, apakah ini tablet atau telepon, dll.
Beberapa dari setting ini tidak digunakan untuk build hanya untuk recovery, tapi sebaiknya kita tetap men-set dengan benar karena jika recovery dapat dibuat dan jalan, maka setting-an kita akan menjadi penting artinya.
Sebaiknya, kita lihat lagi device yang mirip dengan device kita untuk memperoleh gambaran settingan mana yang perlu di set. Cara ini mememang memerlukan intuisi.
recovery.fstab
recovery.fstab
mendefinisikan file system mount point, tipe file system, dan block device untuk setiap partisi di device yang kita gunakan. File ini sangat mirip dengan /etc/fstab
di sistem operasi Linux.
Contoh:
/system ext4 /dev/block/mmcblk0p32
Ini akan menset block device mmcblk0p32
untuk di mount di /system
dengan tipe filesystem ext4
Semua mountpoint harus ada di file ini, dan ini amat sangat penting karena informasi ini karena jika tidak hal yang sangat buruk akan terjadi, seperti, recovery flash menulis ke tempat yang salah.
Tipe filesystem datamedia
dapat digunakan untuk sdcard internal juga menset block device ke /dev/null
.
vendorsetup.sh
vendorsetup.sh
akan di panggil saat setupenv.sh
di jalankan. Ini digunakan untuk menambahkan lunch
non-standard yang di kombinasikan ke menu lunch
.
Untuk menambahkan device kita ke menu lunch:
add_lunch_combo cm_<codename>-userdebug
Build test recovery image
Untuk build hanya recovery, set lunch
sama seperti build biasa, kemudian tulis make recoveryimage
Jika gagal (kemungkinan besar akan gagal), lihat berbagai tip untuk "dealing with build errors" di Wiki CyanogenMod.
Jika kita memiliki fastboot, kita dapat mencoba untuk menginstalasi recovery image ke partisi recovery. Ada ara lain untuk menginstalasi recovery, seperti menggunakan dd
dari sistem yang di root untuk mem-flash ke tempat yang di tuju.
Tidak banyak yang perlu di jelaskan disini, yang penting pastikan recovery dapat dilakukan sebelum kita masuk / bekerja dengan CyanogenMod. Mode recovery yang 100% jalan dan reliable amat sangat penting sekali sebelum kita bekerja / build experimen di Android.
Atur recovery_ui.cpp
jika dibutuhkan
Anda mungkin akan menemukan bahwa walaupun recovery image dapat jalan, beberapa tombol hardware, seperti tombol volume atau power, yang biasanya digunakan untuk scroll ke berbagai opsi, tidak bisa jalan.
Kita perlu mengatur nilai GPIO agar tombol ini dapat di kenali. Sama halnya, jika kita ingin meng-include/exclude opsi atau memodifikasi elemen UI.
Untuk itu, kita perlu membuat dan mengedit /device/[vendor]/[codename]/recovery/recovery_ui.cpp
. Kita akan menemukan banyak sekali contoh untuk file ini, maupun file pendamping recovery/Android.mk
yang dapat digunakan untuk membuat file tersebut, dan bagaimana cara menggunakannya.
Tip: Nilai GPIO untuk device kita bisa ditemukan di source kernel.
Letakan folder device kita di github, dan gunakan local manifest untuk secara automatic sync dengan repo sync
Ketika kita sudah memulai dengan folder device kita, kita dapat membuat account di GitHub http://github.com dan ada baiknya membaca-baca https://help.github.com/articles/creating-a-new-repository untuk menset folder kita sebagai repository public di GitHub.Ini akan menjadi kesempatan untuk belajar tentang git, dan juga source kita akan dapat di akses oleh mereka yang akan bekerjasama dengan kita.
Pada saat memberikan nama repository, gunakan format android_device_VENDOR_CODENAME, dimana VENDOR dan CODENAME menggunakan nilai dari device. Misalnya nama account GitHub kita adalah "fat-tire" dan codename device kita adalah "encore", yang dibuat oleh Barnes and Noble. Kita perlu menyebutkan nama repository kita sebagai android_device_bn_encore. Repository tersebut dapat di akses pada https://github.com/fat-tire/android_device_bn_encore. Demikian pula, kernel repository akan bernama android_kernel_bn_encore. Dia dapat di akses pada https://github.com/fat-tire/android_kernel_bn_encore.
Hal terakhir yang perlu dilakukan adalah membuat local manifest sehingga orang lain dapat menggunakan secara automatis men-download dan membuat perubahan yang ada di mereka tetap up-to-date. Berikut adalah contoh dari skenario di atas:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="fat-tire/android_device_bn_encore" path="device/bn/encore" remote="github" revision="cm-10.1" />
<project name="fat-tire/android_kernel_bn_encore" path="kernel/bn/encore" remote="github" revision="cm-10.1" />
</manifest>
Catatan: attribut revision sifatnya opsional. Jika tidak ditulis, maka repo sync
akan menggunakan revisi yang tertulis di <default ... />
tag di default manifest.
Setelah kita test file local manifest dapat bekerja, kita dapat berikan file tersebut ke orang lain, dan mereka akan mencoba hasil karya kita. Pada titik ini, kita perlu terus mem-push perubahan yang kita buat ke GitHub, dan mungkin perlu memberikan ijin pada yang lain untuk commit access sehingga kita dapat bekejasama mengerjakan device tersebut.
Jika anda karena suatu hal perlu mengganti atau menambahkan repository lain dari CyanogenMod, anda dapat menambahkan repository menggunakan local manifest. Setelah kita membuat semuanya berjalan dengan baik, kita dapat menggunakan Gerrit untuk men-subnmit file yang ada di repository tersebut kembali ke CyanogenMod.
Tambahkan blob ke directory vendor/
Setelah kita mempunyai recovery yang berjalan dengan baik, saatnya untuk mem-build CyanogenMod dan jalan.
Yang pertama kali perlu dilakukan adalah meletakan semua proprietary binary blob ke folder vendor/
bersama file .mk
yang akan di tambahkan di build final.
Hal ini membutuhkan tiga tahap:
- Buat script
extract-files.sh
dansetup-makefiles.sh
untuk mengambil blob file dari device menggunakanadb
dan meletakannya di directory yang benar di bawah/vendor/
. Ada banyak contoh tersedia untuk berbagai device. - Buat Makefile
.mk
untuk mengcopy file ke folder$OUT
saat proses build dan meletakannya di tempat yang benar. Sama seperti sebelumnya, sebaiknya menggunakan contoh / pegangan device lain untuk membuat Makefile karena harusnya mirip. Sebua contoh filename adalahBoardConfigVendor.mk
- Pastikan bahwa Makefile yang kita buat termasuk dalam
BoardConfig.mk
melalui perintah seperti-include vendor/[vendor]/[codename]/BoardConfigVendor.mk
. Sama seperti sebelumnya, device yang ada harusnya dapat memberikan ilustrasi bagaimana cara membuatnya.
Revisi directory device/
Karena kita sudah mempunyai directory yang dapat berjalan dengan baik, kembali dan mulai memodifikasi file di folder device/
. Seperti biasanya, gunakan device yang mirip sebagai referensi.
Kita sekarang mempunyai cara yang mudah untuk melakukan backup dan test hasil build yang kita lakukan. Oleh karena-nya kita dapat mulai melakukan perubahan-perubahan pada folder device itu sendiri, dan melihat apakah kita dapat membuat-nya boot ... Jika kita berhasil melakukannya, selanjutnya adalah masalah bagaimana membuat dan mendukung berbagai komponen dan peripheral, satu per satu.
Cari pertolongan dari pabrikan & vendor
Banyak OEM (Original Equipment Manufacturer) yang membuat device yang kita gunakan menyediakan wiki, dokumentasi, contoh source code yang dapat membantu kita dapat menyelesaikan porting. Anda akan menemukan bahwa beberapa perusahaan lebih bersahabat dengan komunitas developer di banding dengan yang lain. Ini ada beberapa EOM dan vendor beserta situs dan repository-nya yang mungkin dapat menolong.
(Daftar ini tedak lengkap)
OEM | Platform | Repositories/Resources |
---|---|---|
various | Google's Git Repository , Nexus binary blobs | |
HTC | various | Dev Center |
Lenovo | various | Lenovo Smartphones (Search your device) |
LG | various | LG Open Source Code Distribution |
Motorola | various | Motorola Open Source Center |
Nvidia | Tegra | Tegra's GitWeb |
Qualcomm | MSM/QSD | Code Aurora Forum |
Samsung | various | Samsung Open Source Release Center |
Texas Instruments | OMAP | www.omapzoom.com , Omappedia |
Kadangkala jika kita mempunyai pertanyaan dapat mengirim e-mail ke developer atau support forum.
Menambahkan XML Overlas
Kemungkinan besar di file device_[codename].mk
dari device kita, ada kalimat yang kira-kira sebagai berikut:
DEVICE_PACKAGE_OVERLAYS := \ device/[vendor]/[codename]/overlay
Kalimat ini pada dasarnya menset folder overlay/
yang meungkinkan kita untuk meng-override file XML yang digunakan Android framework or apps, hanya untuk device ini. Untuk melakukan hal ini, buat sebuah struktur directory yang mem-mirror path menuju XML file, mulai dari root dari source code kita. Kemudian ganti file yang ingin kita overlay.
Contoh: Misalnya kita ingin meng-override standard Android setting. Lihat file di frameworks/base/core/res/res/values/config.xml
. Copy ke device/[vendor]/[codename]/overlay/frameworks/base/core/res/res/values/config.xml
. Sekarang versi kita yang akan digunakan bukan yang lain. Kita hanya perlu menambahkan setting yang ingin kita override -- tidak perlu semua setting, sehingga kita hanya perlu mengubah file yang berbeda dengan default saja.
Kita dapat overlay file XML apa saja, yang bereffek pada layout, setting, preferensi, translasi dan lainnya.
Membuat kernel dan kernel module dari source code
Jika kita sebelumnya menggunakan pre-built kernel, sampai suatu saat kita ingin mulai membuat kernel dari nol.
Lihat instruksi cara mengubah file BoardConfig.mk
untuk membuat CyanogenMod build the kernel and any required kernel modules automatically.
Penutup
Memang sulit untuk membahas secara lengkap cara melakukan porting dari awal sampai akhir. AKan tetapi, semoga bagian ini dapat menjelaskan bagaimana berbagai hal di setup dan langkah yang perlu kita ambil. Kita selalu dapat bertanya di forum http://forum.cyanogenmod.org forums atau IRC.
Semoga proses yang akan anda lalui akan membawa berkah dan pengetahuan bagi anda, bukan mustahil juga akan memberikan pengakuan :) .. Ini terutama akan terasa, saat porting kita lakukan dapat bekerja lebih baik daripada stock.
Tentunya kita dapat mengkontribusikan pekerjaan kita ke upstream.
Here are the instructions untuk bagaimana cara melakukannya.
Semoga sukses!
Cara Porting ROM Android
CROSS-EVERCOSS - Kali ini saya akan mencoba membahas yaitu bagaimana Porting ROM Android, mungkin bagi sebagian orang sangat penasaran bagaiman ya porting ROM?. Dibawah mungkin ada beberapa langkah dalam melakukan porting ROM. Untuk lebih jelas mari simak uraian berikut ini: PERINGATAN: Harap ikuti tutorial di bawah dengan teliti agar terhindar dari kemungkinan BRICK, dan ingat saya tidak bertanggung jawab atas segala kerusakan yang mungkin terjadi pada hape anda, jadi lakukan dengan resiko anda sendiri!!!
BAHAN BAHAN: 1. Stock Rom 2. Port Rom mt6582 bisa di cari di http://www.needrom.com (usahain spec, ukuran layar sama) 3. Komputer kalau ga punya bisa pakai Root Explorer 4. Notepad++ (untuk komputer)
TAHAP AWAL: 1. Untuk komputer Buat 2 folder satu folder di beri nama Stock dan yang satu lagi Port 2. Extract Stock Rom ke folder Stock dan Port Rom ke folder Port 3. Kalo udah,, ke tahap selanjutnya..
TAHAP PORTING:
2.copy file berikut dari stok ke port
1. Folder firmware dan ppp letak nya di system/etc/disini. 2. File camera.default.so letak nya di system/lib/hw. 3. File ccci.ko, ccci_plat.ko, ccmni.ko, mtk_stp_wmt.ko, mtk_wmt_wifi.ko, dan pvrsrvkm.ko letak nya di system/lib/modules/disini. 4. File libbluetooth_mtk.so letaknya di system/lib/disini. 5. File Generic.kl, dan mtk-kpd.kl letaknya di system/usr/keylayout/disini. 6. File libmnlp letaknya di system/xbin/disini. 7. Boot.img.
3.untuk folder firmware dan ppp hapus dulu dari port,, baru di paste. 4.kalau sudah di pindah semuanya tinggal di zip kan lagi. kalau makai komputer tandai semua meta if - boot.img - system. lalu pack semua dengan winrar (zip bukan rar), kalau makai Root Explorer tahan lama folder nya pilih zip this folder. 5. rom portingan siap di instal.
See Also
- Android-Porting -- the official Google Group on this topic
- General CyanogenMod Porting Discussion -- a forum post on porting
Referensi
- http://wiki.cyanogenmod.org/w/Doc:_porting_intro
- https://groups.google.com/forum/?fromgroups#!forum/android-porting
- http://forum.cyanogenmod.org/topic/15492-general-cyanogenmod-porting-discussion/
- http://wiki.cyanogenmod.org/w/Doc:_integrated_kernel_building
- http://cross-evercoss.blogspot.com/2014/11/cara-porting-rom-android.html
- http://www.needrom.com/download/porting-mtk-rom/
- http://wiki.cyanogenmod.org/w/Build_for_d802