Embedded Linux dengan Qemu – Bagian 2

Essensi dari Free Software adalah anda dapat membuat segala sesuatunya sendiri/reproduce system yang dikembangkan di atas free software. Kali ini kita akan mencoba membangun sebuah mini Linux system menggunakan Qemu. Emulasi yang akan kita gunakan adalah processor ARM (qemu-system-arm) yang dapat diperoleh dengan perintah berikut:
sudo apt-get install qemu

Persiapan

Pertama-tama, siapkan direktori tempat kita akan bekerja:

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.

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. Kita dapat menggunakan cross compiler/toolchain binary yang siap pakai dari Code Sourcery:

Code Sourcery Toolchain

Ekstrak compiler ke direktori hack/compiler

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//hack/compiler/arm-2010.09/ maka tambahkan baris tersebut di ~/.bashrc

Linux Kernel
Inti dari system kita adalah Linux kernel yang dapat diperoleh dari http://kernel.org/pub/v2.6

Kita pilih kernel versi 2.6.27.58, extract di dalam direktori hack/staging dengan perintah berikut:


# 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

Lakukan konfigurasi kernel dengan perintah berikut:

cd ~/hack/staging/linux-2.6.27.58
make ARCH=arm versatile_defconfig

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 favorit 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)

make ARCH=arm menuconfig
→ Kernel Features
→ Use the ARM EABI to compile the kernel

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 kernel image di Qemu.

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

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

Hingga saat ini kita telah berhasil membuat satu Linux system mini yang berjalan di atas sebuah mesin ARM. Tentunya sistem yang masih sangat mini ini belum bisa berfungsi apa-apa kecuali hanya beberapa perintah shell.

Pos ini dipublikasikan di Embedded, Linux, Tutorial. Tandai permalink.

3 Balasan ke Embedded Linux dengan Qemu – Bagian 2

  1. faisal sani berkata:

    makasih sekali telah membuka wawasan saya😉 salam kenal

  2. nanya berkata:

    saya mw nanya ni kk, itu kok kenapa compiler na kudu pake arm eabi, kenapa ga pake arm yg lainna ?? atau emang klo arm harus yang eabi?? trus kelebihanna apa dari eabi itu sendiri ????

    sebab saia liat di .config yang notabene dikopi dari versatile_defconfig yang berasal dari folder arm itu sendiri tidak mendefaultkan settingan untuk arm eabi???

    maaf klo pertanyaanna terlalu dasar, lagi berusaha ngerti ttg embedded soalna >.<

    terima kasi ia kk

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s