Perancangan kernel .1 Perancangan Governor

3.3 Perancangan kernel 3.3.1 Perancangan Governor Perancangan Governor kernel adalah perancangan dan penyeleksian governor yang dianggap sesuai dengan kebutuhan multitasking dan gaming, sehingga didapatkan sebuah kernel multifungsi yang dapat mendukung semua kebutuhan pengguna. Governor yang sesuai dengan kriteria diatas adalah governor Brazilianwax dan SmartassV2. Kedua governor ini memiliki kemampuan untuk mengatur frekuensi CPU sedemikian rupa yang kemudian menghasilkan sebuah manejemen CPU yang maksimal, sehingga cocok digunakan ketika proses multitasking ataupun gaming. Akan tetapi dikarenakan Cpu yang digunakan pada Sony Xperia Ray masih berinti satu single core maka governor yang dapat ditetapkan sebagai governor bawaan hanya salah satu governor diatas. Sehingga, SmartasV2 lah yang digunakan sebagai governor kernel dikarenakan governor ini sangat cocok diterapkan pada CPU single core. Governor sendiri pada sistem kernel android terletak pada bagian “driverscpufreqKconfig”. Pada file Kconfig ini penulis inputkan konfigurasi pemilihan governor smartassV2 sebagai governor bawaan yang diletakkan di antara governor bawaan vendor. config CPU_FREQ_DEFAULT_GOV_SMARTASSV2 bool smartassV2 select CPU_FREQ_GOV_SMARTASSV2 select CPU_FREQ_GOV_PERFORMANCE Universitas Sumatera Utara help Use the CPUFreq governor smartassV2 as default. config CPU_FREQ_GOV_SMARTASSV2 tristate smartassV2 cpufreq governor depends on CPU_FREQ help smartassV2 - a smartv2 optimized governor If in doubt, say N. Pada script diatas dapat dilihat penulis menetapkan governor smartassV2 sebagai governor bawaan pada line yang paling bawah yaitu “ Use the CPUFreq governor smartassV2 as default. ”. Ketika mengubah pengaturan kernel penulis juga diharuskan mengubah sebuah file yaitu “driverscpufreqMakefile”. File ini berisi bagian-bagian apa saja yang harus dikompilasi sehingga terbentuk file-file governor yang dapat digunakan. Script yang penulis masukkan pada file ini adalah : obj-CONFIG_CPU_FREQ_GOV_SMARTASSV2 += cpufreq_smartassV2.o Script diatas berfungi membuat sebuah file berekstensi “.o” yang merupakan hasil dari kompilasi kode sumber dalam bahasa C. Setelah menetapkan konfigurasi governor yang akan digunakan, maka Universitas Sumatera Utara penulis membuat sebuah file “cpufreq_smartassV2.c” yang berisi tentang kode sumber governor smartassV2 yang ditulis dalam bahasa C. Penulis meletakkannya pada bagian “driverscpufreqcpufreq_smartassV2.c”. Selain itu diperlukan kode tambahan pada bagian “includelinuxcpufreq.h” yang berfungsi mengenali governor yang penulis masukkan tadi. elif definedCONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS extern struct cpufreq_governor cpufreq_gov_smartass; define CPUFREQ_DEFAULT_GOVERNOR cpufreq_gov_smartass Script diatas penulis masukkan pada bagian “Cpufreq_Default”. Pada bagian inilah yang bertugas melakukan pengenalan governor-governor yang dapat digunakan pada kernel. Cara diatas dilakukan pada saat penambahan setiap governor yang akan digunakan selanjutnya.

3.3.2 Perancangan IO scheduler

IO scheduler yang kan digunakan adalah sebuah IO scheduler yang dapat mengatur keseimbangan antara pengaturan kapasitas permintaan pembacaan drive dan proses penulisan pada drive. Untuk itu penulis mengambil SIO scheduler yang memiliki kemampuan tersebut akan tetapi masih cocok dipasangkan dengan governor yang digunakan. SIO akan mengatur keseimbangan proses tanpa mengganggu kinerja governor dalam mengatur frekuensi. Sehingga, pemakaian baterei yang berlebihan dapat Universitas Sumatera Utara dihindari. IO scheduler pada android terletak pada bagian block didalam kode sumber kernel android. Pada direktori inilah nantinya akan dimasukkan kode sumber SIO scheduler yang ditulis dalam bahasa C. Kemudian penulis mengedit file Kconfig.iosched yang berisikan pengaturan IO scheduler bawaan. config IOSCHED_SIO tristate Simple IO scheduler default y ---help--- The Simple IO scheduler is an extremely simple scheduler, based on noop and deadline, that relies on deadlines to ensure fairness. The algorithm does not do any sorting but basic merging, trying to keep a minimum overhead. It is aimed mainly for aleatory access devices eg: flash devices. Kode diatas bertujuan untuk menempatkan scheduler tambahan agar dapat dikenali oleh kernel. Pada bagian Default_choice penulis menambahkan kode “default sio if DEFAULT_SIO” yang bertujuan kernel dapat memilih scheduler SIO sebagai scheduler bawaan. Penulis juga mengubah isi berkas MAKEFILE yang berfungsi sebagai pengaturan ketika kernel akan di compile. Sehingga, scheduler yang telah dipilih dapat berjalan dengan lancar pada kernel yang akan dibuat. obj-CONFIG_IOSCHED_SIO += sio-iosched.o Universitas Sumatera Utara Kode di atas bertujuan untuk mengubah berkas sumber “sio-iosched.c” agar dapat dimasukkan ke dalam pengaturan kernel.

3.3.3 Overclock Prosesor

Overclock prosesor android tidak sama halnya dengan overclock pada prosesor Komputer. Dikarenakan arsitektur kernel android yang bersifat monolitik. Sehingga, overclock dilakukan terhadap pengaturan clock secara manual yang dilakukan oleh bagian archarm. Pengaturan clock CPU setiap perangkat android berbeda. Hal ini disebabkan oleh jenis arsitektur dan vendor pembuat prosesor. Pada Sony Xperia Ray, prosesor yang digunakan adalah prosesor yang diproduksi oleh vendor Qualcomm dengan seri msm7x30 sehingga pengaturan pada kode sumber dilakukan pada bagian “archarmmach-msmacpuclock-7×30.c”. Pada pengaturan pabrikan clock yang diterapkan pada prosesor perangkat ini adalah 1024 Mhz. Sehingga clock yang masih dapat didukung oleh prosesor perangkat ini adalah dua kali dari clock bawaan pabrikan yaitu 2048 Mhz. Akan tetapi, penulis akan menaikkan hingga pada batas 2000 Mhz untuk menghindari adanya pemakaian baterei secara drastis dan peningkatan suhu yang sangat tinggi pada prosesor. Secara pengertian dasar, overclock dapat di katakan sebagai perbandingan array frekuensi dengan tegangan pada prosesor. Penulis melakukan pengaturan clock CPU perangkat ini dengan cara melakukan beberapa perubahan pada kode sumber “archarmmach-msmacpuclock-7×30.c”. static struct pll pll2_tbl[] = { Universitas Sumatera Utara { 42, 0, 1, 0 }, 806 MHz { 53, 1, 3, 0 }, 1024 MHz { 125, 0, 1, 1 }, 1200 MHz { 73, 0, 1, 0 }, 1401 MHz }; static struct clkctl_acpu_speed acpu_freq_tbl[] = { { 0, 24576, SRC_LPXO, 0, 0, 30720000, 900, VDD_RAW900 }, { 0, 61440, PLL_3, 5, 11, 61440000, 900, VDD_RAW900 }, { 1, 122880, PLL_3, 5, 5, 61440000, 900, VDD_RAW900 }, { 0, 184320, PLL_3, 5, 4, 61440000, 900, VDD_RAW900 }, { 0, MAX_AXI_KHZ, SRC_AXI, 1, 0, 61440000, 900, VDD_RAW900 }, { 1, 245760, PLL_3, 5, 2, 61440000, 900, VDD_RAW900 }, { 1, 368640, PLL_3, 5, 1, 122800000, 900, VDD_RAW900 }, AXI has MSMC1 implications. See above. { 1, 768000, PLL_1, 2, 0, 153600000, 1050, VDD_RAW1050 }, AXI has MSMC1 implications. See above. { 1, 806400, PLL_2, 3, 0, UINT_MAX, 1100, VDD_RAW1100, pll2_tbl[0]}, { 1, 1024000, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW1200, pll2_tbl[1]}, { 1, 1200000, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW1200, pll2_tbl[2]}, { 1, 1401600, PLL_2, 3, 0, UINT_MAX, 1250, VDD_RAW1250, pll2_tbl[3]}, { 0 } }; Universitas Sumatera Utara Pada bagian clkctl_acpu_speed diatas clock maksimum yang digunakan adalah 1250 Mhz dan batasan nilai clock tertinggi adalah 1401 Mhz atau dapat dikatakan batas paling tinggi sebelum perangkat akan melakukan proses mulai ulang sendiri dikarenakan beban berlebih adalah 200 Mhz diatas clock maksimum. Penaikan tegangan prosesor dilakukan pada setiap nilai 100 hingga 150 pada setiap langkah. Maka, penulis akan melakukan langkah aman dengan menaikkan tegangan prosesor dengan nilai 50 per tingkatan kenaikan. Sehingga bagian di atas penulis rubah menjadi seperti berikut : static struct cpufreq_frequency_table freq_table[] = { { 0, 134400 }, { 1, 184320 }, { 2, 249600 }, { 3, 364800 }, { 4, 460800 }, { 5, 576000 }, { 6, 652800 }, { 7, 768000 }, 806.4MHz is updated to 1024MHz at runtime for MSM8x55. { 8, 806400 }, { 9, 921600 }, { 10, 1017600 }, { 11, 1113600 }, { 12, 1209600 }, { 13, 1305600 }, { 14, 1401600 }, { 15, 1516800 }, { 16, 1612800 }, if OVERCLOCK_CPU_LOW { 17, CPUFREQ_TABLE_END }, else { 17, 1708800 }, { 18, 1804800 }, { 19, 1900800 }, { 20, 2016000 }, { 21, CPUFREQ_TABLE_END }, endif }; Use negative numbers for sources that cant be enableddisabled define SRC_LPXO -2 define SRC_AXI -1 Each ACPU frequency has a certain minimum MSMC1 voltage requirement that is implicitly met by voting for a specific minimum AXI frequency. Do NOT change the AXI frequency unless you are _absoulutely_ sure you know all the hw requirements. Universitas Sumatera Utara static struct clkctl_acpu_speed acpu_freq_tbl[] = { { 24576, SRC_LPXO, 0, 0, 30720000, 900, VDD_RAW900 }, { 61440, PLL_3, 5, 11, 61440000, 900, VDD_RAW900 }, { 134400, PLL_3, 5, 5, 61440000, 900, VDD_RAW900 }, { 184320, PLL_3, 5, 4, 61440000, 900, VDD_RAW900 }, { MAX_AXI_KHZ, SRC_AXI, 1, 0, 61440000, 900, VDD_RAW900 }, { 249600, PLL_3, 5, 2, 61440000, 900, VDD_RAW900 }, { 364800, PLL_3, 5, 1, 122800000, 900, VDD_RAW900 }, AXI has MSMC1 implications. See above. { 460800, PLL_1, 2, 0, 153600000, 950, VDD_RAW950 }, { 576000, PLL_1, 2, 0, 153600000, 1000, VDD_RAW1000 }, { 652800, PLL_1, 2, 0, 153600000, 1050, VDD_RAW1050 }, { 768000, PLL_1, 2, 0, 153600000, 1050, VDD_RAW1050 }, AXI has MSMC1 implications. See above. 806.4MHz is increased to match the SoCs capabilities at runtime { 806400, PLL_2, 3, 0, UINT_MAX, 1100, VDD_RAW1100 }, { 921600, PLL_2, 3, 0, UINT_MAX, 1150, VDD_RAW1150 }, { 1017600, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW1200 }, { 1113600, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW1200 }, { 1209600, PLL_2, 3, 0, UINT_MAX, 1200, VDD_RAW1200 }, { 1305600, PLL_2, 3, 0, UINT_MAX, 1250, VDD_RAW1250 }, { 1401600, PLL_2, 3, 0, UINT_MAX, 1250, VDD_RAW1250 }, { 1516800, PLL_2, 3, 0, UINT_MAX, 1300, VDD_RAW1300 }, { 1612800, PLL_2, 3, 0, UINT_MAX, 1300, VDD_RAW1300 }, if OVERCLOCK_CPU_LOW { 0 } else { 1708800, PLL_2, 3, 0, UINT_MAX, 1350, VDD_RAW1350 }, { 1804800, PLL_2, 3, 0, UINT_MAX, 1400, VDD_RAW1400 }, { 1900800, PLL_2, 3, 0, UINT_MAX, 1450, VDD_RAW1450 }, { 2016000, PLL_2, 3, 0, UINT_MAX, 1500, VDD_RAW1500 }, { 0 } endif };

3.3.4 File System

File sistem adalah sebuah sistem berkas yang mengatur bagaimana suatu file dapat disimpan ke dalam media penyimpanan menurut struktur tertentu. Pada android Xperia Ray, file sistem yang digunakan sebagai media penyimpanan kilat adalah sistem file FAT32 File Alocation Table 32. Kelemahan sistem file ini adalah terletak pada jangkauan ukuran data yang didukung dalam proses penyimpanan. Perlu diketahui bahwa sistem file FAT32 ini hanya dapat mendukung pembacaan serta penulisan file dengan ukuran maksimal Universitas Sumatera Utara [FAT32 maximum : 128 sectors per cluster × 33,550,325 clusters = 2,198,754,099,200 bytes ≈2,047 GiB]. Untuk sistem file penyimpanan pihak kedua second partition pada Xperia ray hanya terbatas dukungan terhadap sistem file EXT2. Memori kilat yang telah beredar dipasaran memiliki kapasitas penyimpanan yang lebih besar, termasuk ukuran berkas yang kini berada di atas ukuran 3GB. Akan tetapi, apabila memori kilat tersebut masih dalam format FAT32 maka pemanfaatan memori kilat berukuran besar akan tidak maksimal. Atas dasar ini, penulis akan melakukan perubahan terhadap sistem file yang didukung baik untuk penyimpanan kilat utama maupun pihak kedua. Untuk sistem file penyimpanan kilat pertama penulis memilih untuk menambahkan fitur pendukung file sistem NTFS New Technology File System. NTFS telah mendukung untuk pembacaan hingga file 16TB 16 × 1024 6 or 2 64 bytes. Untuk file sistem pihak kedua, penulis menambahkan dukungan file sistem EXT4 yang memiliki kemampuan lebih efisien daripada EXT2. Kode sumber Android sendiri telah mendukung kedua sistem file tersebut. Sehingga memudahkan penulis dalam menambahkan dukungan sistem file ini. Penulis hanya melakukan beberapa perubahan kode pada berkas archarmconfigsSemc_urushi_defconfig. Semula bagian sistem file tersebut adalah : DOSFATNT Filesystems CONFIG_FAT_FS=y CONFIG_MSDOS_FS is not set CONFIG_VFAT_FS=y Universitas Sumatera Utara CONFIG_VFAT_FS_NO_DUALNAMES=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET=iso8859-1 CONFIG_NTFS_FS is not set File systems CONFIG_EXT2_FS=y CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_POSIX_ACL is not set CONFIG_EXT2_FS_SECURITY is not set CONFIG_EXT2_FS_XIP is not set CONFIG_EXT3_FS=y CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_POSIX_ACL is not set CONFIG_EXT3_FS_SECURITY is not set CONFIG_EXT4_FS is not set CONFIG_JBD=y CONFIG_JBD_DEBUG is not set CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS is not set CONFIG_JFS_FS is not set CONFIG_FS_POSIX_ACL is not set CONFIG_XFS_FS is not set CONFIG_GFS2_FS is not set CONFIG_OCFS2_FS is not set CONFIG_BTRFS_FS is not set CONFIG_NILFS2_FS is not set Universitas Sumatera Utara CONFIG_FILE_LOCKING=y CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY=y CONFIG_INOTIFY_USER=y CONFIG_QUOTA is not set CONFIG_AUTOFS_FS is not set CONFIG_AUTOFS4_FS is not set CONFIG_FUSE_FS is not set Menjadi : DOSFATNT Filesystems CONFIG_FAT_FS=y CONFIG_MSDOS_FS is not set CONFIG_VFAT_FS=y CONFIG_VFAT_FS_NO_DUALNAMES=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET=iso8859-1 CONFIG_NTFS_FS=y File systems CONFIG_EXT2_FS=y CONFIG_EXT2_FS_XATTR=y CONFIG_EXT2_FS_POSIX_ACL is not set CONFIG_EXT2_FS_SECURITY is not set CONFIG_EXT2_FS_XIP is not set CONFIG_EXT3_FS=y Universitas Sumatera Utara CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set CONFIG_EXT3_FS_XATTR=y CONFIG_EXT3_FS_POSIX_ACL is not set CONFIG_EXT3_FS_SECURITY is not set CONFIG_EXT4_FS=y CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set CONFIG_EXT4_FS_XATTR=y CONFIG_JBD=y CONFIG_JBD_DEBUG is not set CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS is not set CONFIG_JFS_FS is not set CONFIG_FS_POSIX_ACL is not set CONFIG_XFS_FS is not set CONFIG_GFS2_FS is not set CONFIG_OCFS2_FS is not set CONFIG_BTRFS_FS is not set CONFIG_NILFS2_FS is not set CONFIG_FILE_LOCKING=y CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY=y CONFIG_INOTIFY_USER=y CONFIG_QUOTA is not set CONFIG_AUTOFS_FS is not set CONFIG_AUTOFS4_FS is not set CONFIG_FUSE_FS is not set

3.3.5 USB OTG On The Go

Universitas Sumatera Utara USB On-The-Go, sering disingkat USB OTG, adalah suatu spesifikasi yang memungkinkan perangkat yang memiliki port USB seperti pemutar audio digital atau ponsel untuk bertindak sebagai HOST, yang memungkinkan perangkat USB lainnya seperti USB flashdrive, mouse, atau keyboard dapat terpasang kepada mereka. Tidak seperti sistem USB konvensional, USB OTG dapat bertindak sebagai perangkat USB normal ketika terpasang ke host lain. Hal ini dapat digunakan untuk memungkinkan ponsel untuk bertindak host untuk flashdrive dan membaca isinya, mengunduh musik misalnya, tapi kemudian bertindak sebagai flash drive ketika terhubung ke komputer host dan memungkinkan host untuk membacakan isi baru. Pada beberapa tipe tertentu fitur USB OTG memang telah dicantumkan sebagai keluaran pabrikan. Akan tetapi, pada Sony Xperia Ray hal ini belum dilakukan. Maka penulis menambahkan beberapa perubahan pada kernel agar dapat mendukung penggunaan USB OTG ini. Hal ini penulis lakukan dengan cara mengedit beberapa bagian source pada berkas semc_urushi_defconfig yang terletak pada direktori archarmconfigs. Penulis hanya mengatur penggunaan USB adalah sebagai berikut : Miscellaneous USB options CONFIG_USB_DEVICEFS is not set CONFIG_USB_DEVICE_CLASS=y CONFIG_USB_DYNAMIC_MINORS is not set CONFIG_USB_SUSPEND=y CONFIG_USB_OTG=y CONFIG_USB_OTG_WHITELIST=y CONFIG_USB_OTG_BLACKLIST_HUB is not set Universitas Sumatera Utara CONFIG_USB_MON is not set CONFIG_USB_WUSB is not set CONFIG_USB_WUSB_CBAF is not set Bisa dilihat pada script di atas penggunaan USB OTG telah penulis aktifkan.

3.3.6 Penambahan driver perangkat tambahan

Driver tambahan yang dimaksudkan disini adalah sebuah driver perangkat tambahan yang didukung oleh penggunaan USB OTG. Perlu diketahui, perangkat tambahan harus berbasis USB untuk dapat digunakan contohnya printer. Bagian kernel yang menangani penggunaan driver perangkat berbasis usb adalah driverusb. Dalam kode sumber dicantumkan penggunaan sebagai berikut. core - This is for the core USB host code, including the usbfs files and the hub class driver khubd. host - This is for USB host controller drivers. This includes UHCI, OHCI, EHCI, and others that might be used with more specialized embedded systems. gadget - This is for USB peripheral controller drivers and the various gadget drivers which talk to them. Individual USB driver directories. A new driver should be added to the first subdirectory in the list below that it fits into. image - This is for still image drivers, like scanners or digital cameras. ..input - This is for any driver that uses the input subsystem, Universitas Sumatera Utara like keyboard, mice, touchscreens, tablets, etc. ..media - This is for multimedia drivers, like video cameras, radios, and any other drivers that talk to the v4l subsystem. ..net - This is for network drivers. serial - This is for USB to serial drivers. storage - This is for USB mass-storage drivers. class - This is for all USB device drivers that do not fit into any of the above categories, and work for a range of USB Class specified devices. misc - This is for all USB device drivers that do not fit into any of the above categories. Pada keterangan bawaan kode sumber telah dijelaskan secara rinci bagian- bagian dari driver usb yang dapat didukung sebuah kernel. Printer sendiri merupakan sebuah perangkat berbasis USB yang dapat dikategorikan pada bagian misc. Sehingga penulis memasukkan kode sumber tambahan yaitu kode sumber printer. Printer yang dipilih oleh penulis adalah Canon PIXMA IP2700 series. Penulis memilih printer jenis ini dikarenakan banyaknya lapisan masyarakat yang menggunakan printer jenis ini. Cara penambahan driver perangkat tambahan ini dapat dilakukan untuk setiap penambahan perangkat lainnya. 3.4 Perancangan ramdisk 3.4.1 Clockworkmod recovery