SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Table of Contents
1Tentang Qemu..........................................................................................................................................1
2Minimum System dengan Qemu + Busybox...........................................................................................2
  2.1Persiapan..........................................................................................................................................2
  2.2Quick Start........................................................................................................................................2
  2.3Membangun Sendiri Sebuah Mini System.......................................................................................3
     2.3.1Persiapan ..................................................................................................................................3
     2.3.2Working Directory....................................................................................................................4
     2.3.3Cross Compiler.........................................................................................................................4
     2.3.4Linux Kernel.............................................................................................................................5
     2.3.5Busybox....................................................................................................................................8
     2.3.6Testing.....................................................................................................................................10
  2.4Mini System dengan Qemu + Linux + Busybox + NFS................................................................11
     2.4.1Konfigurasi Kernel.................................................................................................................13
     2.4.2Testing.....................................................................................................................................13
1 Tentang Qemu
       Qemu adalah sebuah processor emulator yang berguna bagi pengembangan perangkat
lunak di atas satu processor tertentu. Seperti yang kita tahu, banyak sekali jenis processor
seperti Intel x86, ARM, MIPS, PPC, dll. Qemu mendukung emulasi processor sehingga
system dapat dikembangkan tanpa ketersediaan perangkat keras.

       Bayangkan ketika kita ingin membuat aplikasi di atas salah satu processor tersebut
sementara kita belum memiliki perangkat keras. Di sini Qemu hadir untuk memberikan
kemudahan mengembangkan perangkat lunak tanpa harus memiliki         perangkat      keras.
Tentu pada beberapa kasus Qemu tidak dapat memberikan solusi, akan tetapi fungsi minimal
dari system sudah dapat dipenuhi oleh Qemu.

       Lebih jauh lagi, dalam proyek skala besar yang melibatkan banyak pengembang yang
bekerja di beberapa bagian proyek yang berbeda (misalkan bagian device driver, bagian user
interface, user library, dll) distribusi pekerjaan dapat dilakukan secara parallel. Pengembang
user interface dan library dapat bekerja tanpa harus menunggu ketersediaan perangkat keras,
dan hal semacamnya.

      Pemakai Qemu sebagai emulator atau bagian dari Standard Development Kit dapat
dijumpai di: Google Android Emulator, QT Greenphone, OpenMoko.

      Qemu merupakan perangkat lunak bebas, dapat diperoleh di http://qemu.org



2 Minimum System dengan Qemu + Busybox
       Bagian ini akan membahas tentang pembuatan sebuah mini system menggunakan
Qemu sebagai emulator, Linux kernel, dan busybox. Pembaca diharapkan dapat mereproduksi
mini system sesuai dengan petunjuk yang diberikan.



2.1 Persiapan
       Buku ini ditulis di atas sistem operasi Ubuntu dan semua listing kode telah dipastikan
berjalan di atasnya. Bagi pembaca, dapat menggunakan sistem operasi Ubuntu atau BlankOn
Ombilin yang dapat diperoleh di:

      Ubuntu: http://ubuntu.com
      BlankOn: http://blankonlinux.or.id
      Dibutuhkan koneksi internet untuk menginstall development package yang tersedia di
Ubuntu atau BlankOn repository. Petunjuk lebih detil tersedia di CD bagian 1 (Persiapan).
Setelah development-package terinstall, kita dapat melanjutkan ke bab selanjutnya.



2.2 Quick Start
     Untuk memulainya, cukup buka direktori di CD bagian 2 (Demo: Qemu + Linux +
Busybox) kemudian ketik perintah berikut:

     qemu­system­arm   ­M   versatilepb   ­m   128M   ­kernel   zImage   ­append 
"root=/dev/ram init=/bin/sh"

      Qemu window akan muncul dan menampilkan loading process Linux dan berakhir
dengan console dengan tanda '#'




      Anda sudah berada di sebuah Embedded Linux sistem yang terdiri dari Linux kernel,
root filesystem yang ada di RAM, dan sebuah console yang berfungsi seperti terminal
desktop.

TIPS: CTRL+ALT untuk keluar dari Qemu jika mouse anda sudah terperangkap di dalamnya
      Coba ketikkan perintah: ls, pwd, ps



2.3 Membangun Sendiri Sebuah Mini System
       Essensi dari Free Software adalah anda dapat membuat segala sesuatunya
sendiri/reproduce system yang dikembangkan di atas free software. Mari kita coba
membangun sendiri sebuah sistem seperti demo di atas.



2.3.1 Persiapan
      Beberapa aplikasi perlu disiapkan di atas development machine seperti yang disebutkan
pada bagian Persiapan. Selanjutnya, kita akan membuat sebuah direktori tempat kita bekerja.
Sebaiknya direktori ini dibuat di dalam HOME direktori dari user yang bersangkutan.



2.3.2 Working Directory
      Buat satu direktori di home direktori sebagai working directory.

      cd ~
      mkdir ­p hack hack/src/ hack/debug hack/compiler hack/staging

      Sehingga susunan direktori yang terbentuk sebagai berikut:

            hack/
            ├── compiler
            ├── debug
            ├── src
            └── staging



      Direktori src akan kita gunakan sebagai tempat menyimpan source file, sementara
debug untuk binary image yang dihasilkan sesudah proses kompilasi. Direktori compiler untuk
meletakkan Cross compiler, staging digunakan sebagai tempat pengerjaan kompilasi.
2.3.3 Cross Compiler
      Cross compiler dibutuhkan untuk membangun binary dengan format yang sesuai
dengan instruksi processor. Dalam hal ini kita menggunakan processor ARM maka dipakai
cross compiler bagi mesin ARM. Anda dapat menggunakan cross compiler dari Code
Sourcery, Linaro, atau membuatnya sendiri dengan crosstool-ng. Pembahasan mengenai cross
compiler tersedia di bagian lain buku ini. Saya menggunakan Code Sourcery sebagai compiler
ARM yang dapat diperoleh di sini:

      http://codesourcery.com/uri/to/cross-compiler-binary

      Ekstrak compiler ke direktori hack/compiler

      [NOTE]
      Code Sourcery toolchain juga tersedia di CD bagian Compiler
      [/NOTE]

       Cross compiler yang akan kita gunakan dapat di export ke PATH sehingga dapat
diakses dari mana saja tanpa memberikan absolute path-nya. Jika tidak, setiap kali proses
compile dipanggil maka CROSS_COMPILER parameter harus ditentukan dengan absolute
path-nya.

      Anda dapat mengexport cross compiler di file ~/.bashrc dengan menambahkan baris
di bawah ini:

      export PATH=${PATH}:/path/to/cross­compiler­binary

      Pada kasus kita, cross compiler diextract di /home/<user>/hack/compiler/arm-
2010.09/ maka tambahkan baris tersebut di ~/.bashrc



2.3.4 Linux Kernel
       Inti dari system kita adalah Linux kernel yang dapat diperoleh dari
http://kernel.org/pub/v2.6 Di dalam CD juga sudah tersedia beberapa versi Linux kernel
yang akan kita gunakan pada bab selanjutnya.

       Kita pilih kernel versi 2.6.27.58, extract di dalam direktori hack/staging dengan
perintah berikut:
[CODE]
           # tar xjvf linux-2.6.27.58.tar.bz2
           # head -n 5 linux-2.6.27.58/Makefile
                 VERSION = 2
                 PATCHLEVEL = 6
                 SUBLEVEL = 27
                 EXTRAVERSION = .58
                 NAME = Trembling Tortoise
      [/CODE]

      Lakukan konfigurasi kernel dengan perintah berikut:
      [CODE]
           cd ~/hack/staging/linux-2.6.27.58
           make ARCH=arm versatile_defconfig
      [/CODE]

      Perintah tersebut mengkopi file konfigurasi           mesin   ARM     versatile   dari
arch/arm/configs/versatile_defconfig ke .config.

       File konfigurasi ini belum mendukung ARM EABI instruction set yang harus
diaktifkan karena compiler yang kita gunakan adalah compiler EABI. Buka file .config dengan
text editor idaman anda, lalu cari CONFIG_AEABI yang masih di-comment, lalu ganti
dengan:

      CONFIG_AEABI=y

      Update konfigurasi kernel dengan perintah:

      make ARCH=arm oldconfig

      atau gunakan fasilitas konfigurasi kernel (Kconfig)
      [CODE]
            make ARCH=arm menuconfig
                  → Kernel Features
                          → Use the ARM EABI to compile the kernel
      [/CODE]
[GAMBAR 03: Kernel menuconfig]

       Saatnya mengompile kernel! Karena kernel yang akan dibangun adalah untuk mesin
ARM, kita perlu memberikan parameter CROSS_COMPILE yang menunjuk pada path ke
cross compiler yang akan kita gunakan.

      make ARCH=arm CROSS_COMPILE=arm­none­linux­gnueabi­

      Tunggu beberapa saat hingga proses kompilasi selesai dan kernel image tersedia di
arch/arm/boot/zImage. Kita akan gunakan file zImage ini sebagai parameter di Qemu.

TIPS: Konfigurasi kernel yang lebih detil terdapat di bagian lain buku ini [Appendix A:
Konfigurasi Kernel]
2.3.5 Busybox
       Busybox adalah swiss knife of embedded Linux, satu aplikasi yang mencakup hampir
semua perintah shell. Cukup dengan Busybox kita dapat memperoleh fungsi dari sebuah
terminal yang sama dengan yang kita dapati di Desktop. Busybox dapat diperoleh di
http://busybox.net/downloads/busybox-1.18.4.tar.gz

      Ekstrak busybox-1.18.4.tar.gz di dalam direktori hack/staging

      cd ~/hack/staging
      tar xfvz busybox­1.18.4.tar.gz

     Busybox akan kita konfigurasi dengan static build di mana busybox binary tidak akan
membutuhkan shared library dan dapat dipakai sebagai aplikasi yang berdiri sendiri. Untuk
mengkonfigurasinya:

      make ARCH=arm defconfig

Untuk mengubah konfigurasi BusyBox, kita dapat melakukan perintah berikut:

      make ARCH=arm menuconfig

      Busybox Settings
           -> Build Options
                  -> Build BusyBox as a static binary

Tampilan dari BusyBox configurator dapat dilihat pada gambar di halaman berikutnya.
Kemudian lakukan proses kompilasi dengan perintah berikut:

      make ARCH=arm CROSS_COMPILE=arm­none­linux­gnueabi­ install

       Tunggu beberapa saat hingga proses compile selesai dan hasil compile tersedia di dalam
direktori _install. Hasil dari kompilasi BusyBox berupa root file system skeleton, kita
memerlukan image yang nantinya akan dikenali oleh Kernel, salah satunya initramfs/cpio
image. Untuk membuatnya, kita lakukan perintah berikut:

      cd _install
      find . | cpio ­o ­­format=newc > ../rootfs.img

      Ukuran yang dihasilkan masih cukup besar yang mana akan berpengaruh pada
konsumsi RAM kernel atau bahkan menyebabkan kernel panic jika ukuran initramfs tersebut
lebih besar dari yang ditentukan oleh kernel. Lakukan proses kompresi initramfs tadi:

      cd ..
      gzip ­c rootfs.img > rootfs.img.gz
[GAMBAR 04: Busybox configurator]




2.3.6 Testing
      Kernel image telah kita miliki begitu pula dengan busybox dan mini root file system.
Saatnya kita coba untuk menjalankan mini system ini di atas Qemu:

     qemu­system­arm   ­M   versatilepb   ­m   128   ­kernel   zImage   ­initrd 
rootfs.img.gz ­append "root=/dev/ram rdinit=/bin/sh"

      -M adalah parameter tipe machine
-m parameter memory yang digunakan oleh system
        -kernel adalah parameter untuk kernel image yang digunakan oleh Qemu
        -initrd adalah initial ram disk image (root file system) yang akan digunakan oleh mini
system
        -append adalah parameter bagi kernel, root berarti menunjuk device node root
filesystem, init adalah aplikasi pertama kali yang akan dieksekusi

TIPS: Dalam CD sudah disediakan Makefile untuk membentuk demo di atas.



2.4 Mini System dengan Qemu + Linux + Busybox + NFS
      Dalam pengembangan riil embedded system, sering dijumpai kendala ketika harus
mendebug aplikasi yang sedang dikembangkan. Kadang langkah untuk mendownload binary
ke board, kemudian menulis ke memory area cukup memakan waktu dan tentunya
menghambat pengembangan. Untuk mengatasi hal ini, Linux memberikan kemudahan dengan
kemampuannya mengakses network, terutama NFS root. Kali ini kita akan membuat system
yang menggunakan NFS sebagai root file system.

       Dengan NFS kita dapat mengupdate root file system on the fly, tanpa harus mereboot
system dengan syarat user permission harus sama antara qemu dan pemilik direktori /srv/nfs.
Misalkan kita memiliki aplikasi untuk ditest, aplikasi tersebut cukup di copy-paste ke
direktori NFS dan dapat langsung diakses dari sistem yang berjalan.

        Pada bagian sebelumnya kita telah membahas tentang pembuatan minimum system
dengan Linux dan Busybox yang telah dapat berfungsi seperti terminal/console di desktop.
Akan tetapi masih banyak kekurangan di sistem tersebut, misal perintah `ps' tidak dapat
bekerja karena membutuhkan /proc filesystem, dan beberapa kendala lainnya. Pada bagian
ini, kita akan membahas dan mencobanya lebih lanjut.




        Beberapa persiapan harus dilakukan untuk menjalankan mini system dengan NFS root
file system. Install nfs-kernel-server di Ubuntu dengan perintah berikut:

      sudo apt­get install nfs­kernel­server

       Lalu siapkan satu direktori sebagai NFS root, misalkan /srv/nfs. Setelah NFS server
terinstall, update file /etc/exports tambahkan baris di bawah ini:
/srv/nfs 10.0.2.*(rw,sync,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)
Perubahan pada file /etc/exports perlu diupdate dengan perintah berikut:

      exportfs ­av

Perintah di atas menginstruksikan nfs-kernel-server untuk mereload file /etc/exports sehingga
perubahan yang kita lakukan dapat berjalan.

       Root file system yang nantinya akan dipakai oleh kernel akan diletakkan di dalam
direktori /srv/nfs. Kita akan menggunakan root file system hasil dari kompilasi busybox.

      sudo cp ­dpfa busybox/_install /srv/nfs

      Sehingga kita memiliki struktur direktori sebagai berikut:
            /srv/nfs/_install
            ├── bin
            ├── dev
            ├── etc
            ├── proc
            ├── sbin
            ├── sys
            └── usr
               ├── bin
               └── sbin

       Program yang pertama kali dieksekusi oleh Linux adalah /sbin/init, program ini
bertugas untuk menginisialisasi sistem dengan menjalankan perintah-perintah yang diletakkan
di /etc/inittab. File ini dapat berisi apa saja yang dibutuhkan untuk memulai sebuah sistem;
menjalankan script inisialisasi, membuka console, dll.

     Akan tetapi hasil kompilasi dari busybox masih kekurangan beberapa direktori
tambahan yang memungkinkan Linux untuk booting dengan lancar. Untuk kita akan
membuatnya:
     mkdir /srv/nfs/_install/etc/init.d
     mkdir /srv/nfs/_install/dev
     mkdir /srv/nfs/_install/proc
     mkdir /srv/nfs/_install/sys

      Kemudian akan membuat file /etc/inittab sebagai berikut:

      ::sysinit:/etc/init.d/rcS
      ::respawn:/sbin/getty ­n ­l /bin/sh ­L 115200 tty1 vt100
::restart:/sbin/init

     Baris pertama menginstruksikan system untuk menjalankan file /etc/init.d/rcS,
kemudian mengeksport output dari system ke tty1, kemudian restart /sbin/init

      Pada baris pertama, init akan menjalankan file /etc/init.d/rcS, dalam file ini, kita
akan mounting file system minimum yang dibutuhkan:

      mount ­t proc none /proc
      mount ­t sysfs none /sys
      mount ­t ramfs ramfs /dev
      /sbin/mdev ­s



       Karena NFS root filesystem dimiliki oleh user maka kita tidak dapat membuat
direktori/atau membuat file baru di dalamnya, sedangkan kita perlu untuk populate /dev
beserta isinya. Untuk mengakali hal tesebut, /dev dimount sebagai ramfs (temporary file
system).



2.4.1 Konfigurasi Kernel
      Linux kernel memiliki fitur untuk mengakses NFS server dengan mengaktifkan NFS
support. Pada konfigurasi yang kita pakai di bab sebelumnya, NFS support telah diaktifkan.



2.4.2 Testing
      Jalankan qemu dengan perintah berikut:

     qemu­system­arm ­M versatilepb ­m 128M ­kernel zImage ­append 
"root=/dev/nfs nfsroot=10.0.2.2:/srv/nfs/_install rw 
ip=10.0.2.15::10.0.2.1:255.255.255
.0 init=/sbin/init"
[GAMBAR]
-append adalah parameter untuk kernel command line
root root fs device
nfsroot ip address dari server diikuti path ke root file system
rw opsi untuk baca tulis file system
ip ip address dari qemu dengan format:
IP:HOSTNAME:GATEWAY:NETMASK
init menunjuk pada program pertama yang akan dieksekusi oleh kernel

Mais conteúdo relacionado

Mais procurados

Bab 10 konfigurasi sistem debian
Bab 10 konfigurasi sistem debianBab 10 konfigurasi sistem debian
Bab 10 konfigurasi sistem debianTeambolle Ajor
 
Pengolahan Database Dengan MySQL
Pengolahan Database Dengan MySQLPengolahan Database Dengan MySQL
Pengolahan Database Dengan MySQLI Putu Hariyadi
 
Tgs 2 so 2 samba (nisnawaty basri)
Tgs 2 so 2 samba (nisnawaty basri)Tgs 2 so 2 samba (nisnawaty basri)
Tgs 2 so 2 samba (nisnawaty basri)Nhyca
 
Supriyanto squidproxyserver
Supriyanto squidproxyserverSupriyanto squidproxyserver
Supriyanto squidproxyserverHARRY CHAN PUTRA
 
Dokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 Cimahi
Dokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 CimahiDokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 Cimahi
Dokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 CimahiFebi Gelar Ramadhan
 
Panduan tool networking windows
Panduan tool networking windowsPanduan tool networking windows
Panduan tool networking windowsVictor Tengker
 
Cara Install Openbravo 2.50 MP 43 di Ubuntu
Cara Install Openbravo 2.50 MP 43 di UbuntuCara Install Openbravo 2.50 MP 43 di Ubuntu
Cara Install Openbravo 2.50 MP 43 di UbuntuWirabumi Software
 
Aplikasi Linux Ubuntu (Ubuntu Aplication)
Aplikasi Linux Ubuntu (Ubuntu Aplication)Aplikasi Linux Ubuntu (Ubuntu Aplication)
Aplikasi Linux Ubuntu (Ubuntu Aplication)Nur Rahma Aziza
 
Kernel-based Virtual Machine
Kernel-based Virtual MachineKernel-based Virtual Machine
Kernel-based Virtual MachineBahry Bahri
 
Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5
Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5
Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5akbarfak
 
7 file-sharing-nfs-samba
7 file-sharing-nfs-samba7 file-sharing-nfs-samba
7 file-sharing-nfs-sambarahmanitayulia
 

Mais procurados (17)

SAMP (Solaris, Apache, MySQL, PHP)
SAMP (Solaris, Apache, MySQL, PHP)SAMP (Solaris, Apache, MySQL, PHP)
SAMP (Solaris, Apache, MySQL, PHP)
 
Building a Secure Web Application
Building a Secure Web ApplicationBuilding a Secure Web Application
Building a Secure Web Application
 
Bab 10 konfigurasi sistem debian
Bab 10 konfigurasi sistem debianBab 10 konfigurasi sistem debian
Bab 10 konfigurasi sistem debian
 
Pengolahan Database Dengan MySQL
Pengolahan Database Dengan MySQLPengolahan Database Dengan MySQL
Pengolahan Database Dengan MySQL
 
Tgs 2 so 2 samba (nisnawaty basri)
Tgs 2 so 2 samba (nisnawaty basri)Tgs 2 so 2 samba (nisnawaty basri)
Tgs 2 so 2 samba (nisnawaty basri)
 
Supriyanto squidproxyserver
Supriyanto squidproxyserverSupriyanto squidproxyserver
Supriyanto squidproxyserver
 
AT Rapier Usecase Document
AT Rapier Usecase DocumentAT Rapier Usecase Document
AT Rapier Usecase Document
 
Bab 5 linux shell
Bab 5 linux shellBab 5 linux shell
Bab 5 linux shell
 
Dokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 Cimahi
Dokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 CimahiDokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 Cimahi
Dokumentasi Pembangun Server Cloud di Domain TKJ SMKN 1 Cimahi
 
Panduan tool networking windows
Panduan tool networking windowsPanduan tool networking windows
Panduan tool networking windows
 
Oracle VirtualBox
Oracle VirtualBoxOracle VirtualBox
Oracle VirtualBox
 
Cara Install Openbravo 2.50 MP 43 di Ubuntu
Cara Install Openbravo 2.50 MP 43 di UbuntuCara Install Openbravo 2.50 MP 43 di Ubuntu
Cara Install Openbravo 2.50 MP 43 di Ubuntu
 
Aplikasi Linux Ubuntu (Ubuntu Aplication)
Aplikasi Linux Ubuntu (Ubuntu Aplication)Aplikasi Linux Ubuntu (Ubuntu Aplication)
Aplikasi Linux Ubuntu (Ubuntu Aplication)
 
Kernel-based Virtual Machine
Kernel-based Virtual MachineKernel-based Virtual Machine
Kernel-based Virtual Machine
 
Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5
Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5
Memblokir situs dengan squid proxy di linux debian server By: Fakhri akbar CC5
 
7 file-sharing-nfs-samba
7 file-sharing-nfs-samba7 file-sharing-nfs-samba
7 file-sharing-nfs-samba
 
Workshop & pelatihan
Workshop & pelatihanWorkshop & pelatihan
Workshop & pelatihan
 

Semelhante a OPTIMASI QEMU

Bab 12 kompilasi kernel
Bab 12 kompilasi kernelBab 12 kompilasi kernel
Bab 12 kompilasi kernelAde Tamin
 
Bab 3 instalasi paket software
Bab 3 instalasi paket softwareBab 3 instalasi paket software
Bab 3 instalasi paket softwareAde Tamin
 
Pask 1 14_s16010_sandro
Pask 1 14_s16010_sandroPask 1 14_s16010_sandro
Pask 1 14_s16010_sandroSandroSiagian
 
Bab 6 sistem boot
Bab 6 sistem bootBab 6 sistem boot
Bab 6 sistem bootAde Tamin
 
Gnu linux#1 mari-mengenal_linux
Gnu linux#1 mari-mengenal_linuxGnu linux#1 mari-mengenal_linux
Gnu linux#1 mari-mengenal_linuxMuksidin Emoox
 
Dadan kameravidiowebcam
Dadan kameravidiowebcamDadan kameravidiowebcam
Dadan kameravidiowebcamMas Suwondo
 
Tutorial Debian Bab 13 linux di floppy drive
Tutorial Debian Bab 13 linux di floppy driveTutorial Debian Bab 13 linux di floppy drive
Tutorial Debian Bab 13 linux di floppy driveDidit Septiawan
 
Remastering Ubuntu 17.10 Dengan Ubuntu Customization Kit
Remastering Ubuntu 17.10 Dengan Ubuntu Customization KitRemastering Ubuntu 17.10 Dengan Ubuntu Customization Kit
Remastering Ubuntu 17.10 Dengan Ubuntu Customization KitMuhammad Yuga Nugraha
 
Bab 13 linux di floppy drive
Bab 13 linux di floppy driveBab 13 linux di floppy drive
Bab 13 linux di floppy driveAde Tamin
 
Instalasi ubuntu dekstop dan server
Instalasi ubuntu dekstop dan serverInstalasi ubuntu dekstop dan server
Instalasi ubuntu dekstop dan serverAhmad Nurfawaid
 
Mengcompiledan menginstalkernellinux
Mengcompiledan menginstalkernellinuxMengcompiledan menginstalkernellinux
Mengcompiledan menginstalkernellinuxvanheatsink
 
Panduan pemaketan-blank on
Panduan pemaketan-blank onPanduan pemaketan-blank on
Panduan pemaketan-blank onAzis Ws
 
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software  AVR Studio 4, Simulasi dan DownloaderBab 4. Penggunaan Software  AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan DownloaderBeny Abd
 
Cloud Computing Dengan VMWARE
Cloud Computing Dengan VMWARECloud Computing Dengan VMWARE
Cloud Computing Dengan VMWAREHary HarysMatta
 
Backup system-mikrotik
Backup system-mikrotikBackup system-mikrotik
Backup system-mikrotikcabikhosting
 
Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)
Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)
Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)vivioliviab
 
Tutorial ubuntu server 1
Tutorial ubuntu server 1Tutorial ubuntu server 1
Tutorial ubuntu server 1Darwin_kens
 
SISTEM OPERASI tugas2 (ViviOliviaBayau)
SISTEM OPERASI tugas2 (ViviOliviaBayau)SISTEM OPERASI tugas2 (ViviOliviaBayau)
SISTEM OPERASI tugas2 (ViviOliviaBayau)vivioliviab
 
Pemrograman dasar 01-perkenalan
Pemrograman dasar 01-perkenalanPemrograman dasar 01-perkenalan
Pemrograman dasar 01-perkenalanTinaAmalia3
 

Semelhante a OPTIMASI QEMU (20)

Bab 12 kompilasi kernel
Bab 12 kompilasi kernelBab 12 kompilasi kernel
Bab 12 kompilasi kernel
 
Bab 3 instalasi paket software
Bab 3 instalasi paket softwareBab 3 instalasi paket software
Bab 3 instalasi paket software
 
Pask 1 14_s16010_sandro
Pask 1 14_s16010_sandroPask 1 14_s16010_sandro
Pask 1 14_s16010_sandro
 
Bab 6 sistem boot
Bab 6 sistem bootBab 6 sistem boot
Bab 6 sistem boot
 
Gnu linux#1 mari-mengenal_linux
Gnu linux#1 mari-mengenal_linuxGnu linux#1 mari-mengenal_linux
Gnu linux#1 mari-mengenal_linux
 
Dadan kameravidiowebcam
Dadan kameravidiowebcamDadan kameravidiowebcam
Dadan kameravidiowebcam
 
Tutorial Debian Bab 13 linux di floppy drive
Tutorial Debian Bab 13 linux di floppy driveTutorial Debian Bab 13 linux di floppy drive
Tutorial Debian Bab 13 linux di floppy drive
 
Pertemuan11
Pertemuan11Pertemuan11
Pertemuan11
 
Remastering Ubuntu 17.10 Dengan Ubuntu Customization Kit
Remastering Ubuntu 17.10 Dengan Ubuntu Customization KitRemastering Ubuntu 17.10 Dengan Ubuntu Customization Kit
Remastering Ubuntu 17.10 Dengan Ubuntu Customization Kit
 
Bab 13 linux di floppy drive
Bab 13 linux di floppy driveBab 13 linux di floppy drive
Bab 13 linux di floppy drive
 
Instalasi ubuntu dekstop dan server
Instalasi ubuntu dekstop dan serverInstalasi ubuntu dekstop dan server
Instalasi ubuntu dekstop dan server
 
Mengcompiledan menginstalkernellinux
Mengcompiledan menginstalkernellinuxMengcompiledan menginstalkernellinux
Mengcompiledan menginstalkernellinux
 
Panduan pemaketan-blank on
Panduan pemaketan-blank onPanduan pemaketan-blank on
Panduan pemaketan-blank on
 
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software  AVR Studio 4, Simulasi dan DownloaderBab 4. Penggunaan Software  AVR Studio 4, Simulasi dan Downloader
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
 
Cloud Computing Dengan VMWARE
Cloud Computing Dengan VMWARECloud Computing Dengan VMWARE
Cloud Computing Dengan VMWARE
 
Backup system-mikrotik
Backup system-mikrotikBackup system-mikrotik
Backup system-mikrotik
 
Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)
Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)
Tugas2 SISTEM OPERASI II (VIVI OLIVIA BAYAU)
 
Tutorial ubuntu server 1
Tutorial ubuntu server 1Tutorial ubuntu server 1
Tutorial ubuntu server 1
 
SISTEM OPERASI tugas2 (ViviOliviaBayau)
SISTEM OPERASI tugas2 (ViviOliviaBayau)SISTEM OPERASI tugas2 (ViviOliviaBayau)
SISTEM OPERASI tugas2 (ViviOliviaBayau)
 
Pemrograman dasar 01-perkenalan
Pemrograman dasar 01-perkenalanPemrograman dasar 01-perkenalan
Pemrograman dasar 01-perkenalan
 

OPTIMASI QEMU

  • 1. Table of Contents 1Tentang Qemu..........................................................................................................................................1 2Minimum System dengan Qemu + Busybox...........................................................................................2 2.1Persiapan..........................................................................................................................................2 2.2Quick Start........................................................................................................................................2 2.3Membangun Sendiri Sebuah Mini System.......................................................................................3 2.3.1Persiapan ..................................................................................................................................3 2.3.2Working Directory....................................................................................................................4 2.3.3Cross Compiler.........................................................................................................................4 2.3.4Linux Kernel.............................................................................................................................5 2.3.5Busybox....................................................................................................................................8 2.3.6Testing.....................................................................................................................................10 2.4Mini System dengan Qemu + Linux + Busybox + NFS................................................................11 2.4.1Konfigurasi Kernel.................................................................................................................13 2.4.2Testing.....................................................................................................................................13
  • 2. 1 Tentang Qemu Qemu adalah sebuah processor emulator yang berguna bagi pengembangan perangkat lunak di atas satu processor tertentu. Seperti yang kita tahu, banyak sekali jenis processor seperti Intel x86, ARM, MIPS, PPC, dll. Qemu mendukung emulasi processor sehingga system dapat dikembangkan tanpa ketersediaan perangkat keras. Bayangkan ketika kita ingin membuat aplikasi di atas salah satu processor tersebut sementara kita belum memiliki perangkat keras. Di sini Qemu hadir untuk memberikan kemudahan mengembangkan perangkat lunak tanpa harus memiliki perangkat keras. Tentu pada beberapa kasus Qemu tidak dapat memberikan solusi, akan tetapi fungsi minimal dari system sudah dapat dipenuhi oleh Qemu. Lebih jauh lagi, dalam proyek skala besar yang melibatkan banyak pengembang yang bekerja di beberapa bagian proyek yang berbeda (misalkan bagian device driver, bagian user interface, user library, dll) distribusi pekerjaan dapat dilakukan secara parallel. Pengembang user interface dan library dapat bekerja tanpa harus menunggu ketersediaan perangkat keras, dan hal semacamnya. Pemakai Qemu sebagai emulator atau bagian dari Standard Development Kit dapat dijumpai di: Google Android Emulator, QT Greenphone, OpenMoko. Qemu merupakan perangkat lunak bebas, dapat diperoleh di http://qemu.org 2 Minimum System dengan Qemu + Busybox Bagian ini akan membahas tentang pembuatan sebuah mini system menggunakan Qemu sebagai emulator, Linux kernel, dan busybox. Pembaca diharapkan dapat mereproduksi mini system sesuai dengan petunjuk yang diberikan. 2.1 Persiapan Buku ini ditulis di atas sistem operasi Ubuntu dan semua listing kode telah dipastikan berjalan di atasnya. Bagi pembaca, dapat menggunakan sistem operasi Ubuntu atau BlankOn Ombilin yang dapat diperoleh di: Ubuntu: http://ubuntu.com BlankOn: http://blankonlinux.or.id Dibutuhkan koneksi internet untuk menginstall development package yang tersedia di
  • 3. Ubuntu atau BlankOn repository. Petunjuk lebih detil tersedia di CD bagian 1 (Persiapan). Setelah development-package terinstall, kita dapat melanjutkan ke bab selanjutnya. 2.2 Quick Start Untuk memulainya, cukup buka direktori di CD bagian 2 (Demo: Qemu + Linux + Busybox) kemudian ketik perintah berikut: qemu­system­arm   ­M   versatilepb   ­m   128M   ­kernel   zImage   ­append  "root=/dev/ram init=/bin/sh" Qemu window akan muncul dan menampilkan loading process Linux dan berakhir dengan console dengan tanda '#' Anda sudah berada di sebuah Embedded Linux sistem yang terdiri dari Linux kernel,
  • 4. root filesystem yang ada di RAM, dan sebuah console yang berfungsi seperti terminal desktop. TIPS: CTRL+ALT untuk keluar dari Qemu jika mouse anda sudah terperangkap di dalamnya Coba ketikkan perintah: ls, pwd, ps 2.3 Membangun Sendiri Sebuah Mini System Essensi dari Free Software adalah anda dapat membuat segala sesuatunya sendiri/reproduce system yang dikembangkan di atas free software. Mari kita coba membangun sendiri sebuah sistem seperti demo di atas. 2.3.1 Persiapan Beberapa aplikasi perlu disiapkan di atas development machine seperti yang disebutkan pada bagian Persiapan. Selanjutnya, kita akan membuat sebuah direktori tempat kita bekerja. Sebaiknya direktori ini dibuat di dalam HOME direktori dari user yang bersangkutan. 2.3.2 Working Directory Buat satu direktori di home direktori sebagai working directory. cd ~ mkdir ­p hack hack/src/ hack/debug hack/compiler hack/staging Sehingga susunan direktori yang terbentuk sebagai berikut: hack/ ├── compiler ├── debug ├── src └── staging Direktori src akan kita gunakan sebagai tempat menyimpan source file, sementara debug untuk binary image yang dihasilkan sesudah proses kompilasi. Direktori compiler untuk meletakkan Cross compiler, staging digunakan sebagai tempat pengerjaan kompilasi.
  • 5. 2.3.3 Cross Compiler Cross compiler dibutuhkan untuk membangun binary dengan format yang sesuai dengan instruksi processor. Dalam hal ini kita menggunakan processor ARM maka dipakai cross compiler bagi mesin ARM. Anda dapat menggunakan cross compiler dari Code Sourcery, Linaro, atau membuatnya sendiri dengan crosstool-ng. Pembahasan mengenai cross compiler tersedia di bagian lain buku ini. Saya menggunakan Code Sourcery sebagai compiler ARM yang dapat diperoleh di sini: http://codesourcery.com/uri/to/cross-compiler-binary Ekstrak compiler ke direktori hack/compiler [NOTE] Code Sourcery toolchain juga tersedia di CD bagian Compiler [/NOTE] Cross compiler yang akan kita gunakan dapat di export ke PATH sehingga dapat diakses dari mana saja tanpa memberikan absolute path-nya. Jika tidak, setiap kali proses compile dipanggil maka CROSS_COMPILER parameter harus ditentukan dengan absolute path-nya. Anda dapat mengexport cross compiler di file ~/.bashrc dengan menambahkan baris di bawah ini: export PATH=${PATH}:/path/to/cross­compiler­binary Pada kasus kita, cross compiler diextract di /home/<user>/hack/compiler/arm- 2010.09/ maka tambahkan baris tersebut di ~/.bashrc 2.3.4 Linux Kernel Inti dari system kita adalah Linux kernel yang dapat diperoleh dari http://kernel.org/pub/v2.6 Di dalam CD juga sudah tersedia beberapa versi Linux kernel yang akan kita gunakan pada bab selanjutnya. Kita pilih kernel versi 2.6.27.58, extract di dalam direktori hack/staging dengan perintah berikut:
  • 6. [CODE] # tar xjvf linux-2.6.27.58.tar.bz2 # head -n 5 linux-2.6.27.58/Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 27 EXTRAVERSION = .58 NAME = Trembling Tortoise [/CODE] Lakukan konfigurasi kernel dengan perintah berikut: [CODE] cd ~/hack/staging/linux-2.6.27.58 make ARCH=arm versatile_defconfig [/CODE] Perintah tersebut mengkopi file konfigurasi mesin ARM versatile dari arch/arm/configs/versatile_defconfig ke .config. File konfigurasi ini belum mendukung ARM EABI instruction set yang harus diaktifkan karena compiler yang kita gunakan adalah compiler EABI. Buka file .config dengan text editor idaman anda, lalu cari CONFIG_AEABI yang masih di-comment, lalu ganti dengan: CONFIG_AEABI=y Update konfigurasi kernel dengan perintah: make ARCH=arm oldconfig atau gunakan fasilitas konfigurasi kernel (Kconfig) [CODE] make ARCH=arm menuconfig → Kernel Features → Use the ARM EABI to compile the kernel [/CODE]
  • 7. [GAMBAR 03: Kernel menuconfig] Saatnya mengompile kernel! Karena kernel yang akan dibangun adalah untuk mesin ARM, kita perlu memberikan parameter CROSS_COMPILE yang menunjuk pada path ke cross compiler yang akan kita gunakan. make ARCH=arm CROSS_COMPILE=arm­none­linux­gnueabi­ Tunggu beberapa saat hingga proses kompilasi selesai dan kernel image tersedia di arch/arm/boot/zImage. Kita akan gunakan file zImage ini sebagai parameter di Qemu. TIPS: Konfigurasi kernel yang lebih detil terdapat di bagian lain buku ini [Appendix A: Konfigurasi Kernel]
  • 8. 2.3.5 Busybox Busybox adalah swiss knife of embedded Linux, satu aplikasi yang mencakup hampir semua perintah shell. Cukup dengan Busybox kita dapat memperoleh fungsi dari sebuah terminal yang sama dengan yang kita dapati di Desktop. Busybox dapat diperoleh di http://busybox.net/downloads/busybox-1.18.4.tar.gz Ekstrak busybox-1.18.4.tar.gz di dalam direktori hack/staging cd ~/hack/staging tar xfvz busybox­1.18.4.tar.gz Busybox akan kita konfigurasi dengan static build di mana busybox binary tidak akan membutuhkan shared library dan dapat dipakai sebagai aplikasi yang berdiri sendiri. Untuk mengkonfigurasinya: make ARCH=arm defconfig Untuk mengubah konfigurasi BusyBox, kita dapat melakukan perintah berikut: make ARCH=arm menuconfig Busybox Settings -> Build Options -> Build BusyBox as a static binary Tampilan dari BusyBox configurator dapat dilihat pada gambar di halaman berikutnya. Kemudian lakukan proses kompilasi dengan perintah berikut: make ARCH=arm CROSS_COMPILE=arm­none­linux­gnueabi­ install Tunggu beberapa saat hingga proses compile selesai dan hasil compile tersedia di dalam direktori _install. Hasil dari kompilasi BusyBox berupa root file system skeleton, kita memerlukan image yang nantinya akan dikenali oleh Kernel, salah satunya initramfs/cpio image. Untuk membuatnya, kita lakukan perintah berikut: cd _install find . | cpio ­o ­­format=newc > ../rootfs.img Ukuran yang dihasilkan masih cukup besar yang mana akan berpengaruh pada konsumsi RAM kernel atau bahkan menyebabkan kernel panic jika ukuran initramfs tersebut
  • 9. lebih besar dari yang ditentukan oleh kernel. Lakukan proses kompresi initramfs tadi: cd .. gzip ­c rootfs.img > rootfs.img.gz
  • 10. [GAMBAR 04: Busybox configurator] 2.3.6 Testing Kernel image telah kita miliki begitu pula dengan busybox dan mini root file system. Saatnya kita coba untuk menjalankan mini system ini di atas Qemu: qemu­system­arm   ­M   versatilepb   ­m   128   ­kernel   zImage   ­initrd  rootfs.img.gz ­append "root=/dev/ram rdinit=/bin/sh" -M adalah parameter tipe machine
  • 11. -m parameter memory yang digunakan oleh system -kernel adalah parameter untuk kernel image yang digunakan oleh Qemu -initrd adalah initial ram disk image (root file system) yang akan digunakan oleh mini system -append adalah parameter bagi kernel, root berarti menunjuk device node root filesystem, init adalah aplikasi pertama kali yang akan dieksekusi TIPS: Dalam CD sudah disediakan Makefile untuk membentuk demo di atas. 2.4 Mini System dengan Qemu + Linux + Busybox + NFS Dalam pengembangan riil embedded system, sering dijumpai kendala ketika harus mendebug aplikasi yang sedang dikembangkan. Kadang langkah untuk mendownload binary ke board, kemudian menulis ke memory area cukup memakan waktu dan tentunya menghambat pengembangan. Untuk mengatasi hal ini, Linux memberikan kemudahan dengan kemampuannya mengakses network, terutama NFS root. Kali ini kita akan membuat system yang menggunakan NFS sebagai root file system. Dengan NFS kita dapat mengupdate root file system on the fly, tanpa harus mereboot system dengan syarat user permission harus sama antara qemu dan pemilik direktori /srv/nfs. Misalkan kita memiliki aplikasi untuk ditest, aplikasi tersebut cukup di copy-paste ke direktori NFS dan dapat langsung diakses dari sistem yang berjalan. Pada bagian sebelumnya kita telah membahas tentang pembuatan minimum system dengan Linux dan Busybox yang telah dapat berfungsi seperti terminal/console di desktop. Akan tetapi masih banyak kekurangan di sistem tersebut, misal perintah `ps' tidak dapat bekerja karena membutuhkan /proc filesystem, dan beberapa kendala lainnya. Pada bagian ini, kita akan membahas dan mencobanya lebih lanjut. Beberapa persiapan harus dilakukan untuk menjalankan mini system dengan NFS root file system. Install nfs-kernel-server di Ubuntu dengan perintah berikut: sudo apt­get install nfs­kernel­server Lalu siapkan satu direktori sebagai NFS root, misalkan /srv/nfs. Setelah NFS server terinstall, update file /etc/exports tambahkan baris di bawah ini: /srv/nfs 10.0.2.*(rw,sync,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)
  • 12. Perubahan pada file /etc/exports perlu diupdate dengan perintah berikut: exportfs ­av Perintah di atas menginstruksikan nfs-kernel-server untuk mereload file /etc/exports sehingga perubahan yang kita lakukan dapat berjalan. Root file system yang nantinya akan dipakai oleh kernel akan diletakkan di dalam direktori /srv/nfs. Kita akan menggunakan root file system hasil dari kompilasi busybox. sudo cp ­dpfa busybox/_install /srv/nfs Sehingga kita memiliki struktur direktori sebagai berikut: /srv/nfs/_install ├── bin ├── dev ├── etc ├── proc ├── sbin ├── sys └── usr ├── bin └── sbin Program yang pertama kali dieksekusi oleh Linux adalah /sbin/init, program ini bertugas untuk menginisialisasi sistem dengan menjalankan perintah-perintah yang diletakkan di /etc/inittab. File ini dapat berisi apa saja yang dibutuhkan untuk memulai sebuah sistem; menjalankan script inisialisasi, membuka console, dll. Akan tetapi hasil kompilasi dari busybox masih kekurangan beberapa direktori tambahan yang memungkinkan Linux untuk booting dengan lancar. Untuk kita akan membuatnya: mkdir /srv/nfs/_install/etc/init.d mkdir /srv/nfs/_install/dev mkdir /srv/nfs/_install/proc mkdir /srv/nfs/_install/sys Kemudian akan membuat file /etc/inittab sebagai berikut: ::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty ­n ­l /bin/sh ­L 115200 tty1 vt100
  • 13. ::restart:/sbin/init Baris pertama menginstruksikan system untuk menjalankan file /etc/init.d/rcS, kemudian mengeksport output dari system ke tty1, kemudian restart /sbin/init Pada baris pertama, init akan menjalankan file /etc/init.d/rcS, dalam file ini, kita akan mounting file system minimum yang dibutuhkan: mount ­t proc none /proc mount ­t sysfs none /sys mount ­t ramfs ramfs /dev /sbin/mdev ­s Karena NFS root filesystem dimiliki oleh user maka kita tidak dapat membuat direktori/atau membuat file baru di dalamnya, sedangkan kita perlu untuk populate /dev beserta isinya. Untuk mengakali hal tesebut, /dev dimount sebagai ramfs (temporary file system). 2.4.1 Konfigurasi Kernel Linux kernel memiliki fitur untuk mengakses NFS server dengan mengaktifkan NFS support. Pada konfigurasi yang kita pakai di bab sebelumnya, NFS support telah diaktifkan. 2.4.2 Testing Jalankan qemu dengan perintah berikut: qemu­system­arm ­M versatilepb ­m 128M ­kernel zImage ­append  "root=/dev/nfs nfsroot=10.0.2.2:/srv/nfs/_install rw  ip=10.0.2.15::10.0.2.1:255.255.255 .0 init=/sbin/init"
  • 14. [GAMBAR] -append adalah parameter untuk kernel command line root root fs device nfsroot ip address dari server diikuti path ke root file system rw opsi untuk baca tulis file system ip ip address dari qemu dengan format: IP:HOSTNAME:GATEWAY:NETMASK init menunjuk pada program pertama yang akan dieksekusi oleh kernel