Mini System dengan Qemu + Linux + Busybox + NFS

Dalam pengembangan riil embedded Linux, 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 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. Kali 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:

[bash]sudo apt-get install nfs-kernel-server[/bash]

Lalu siapkan satu direktori sebagai NFS root, misalkan /srv/nfs. Setelah NFS server terinstall, update file /etc/exports tambahkan baris di bawah ini:

[bash]
/srv/nfs 192.168.2.*(rw,sync,no_subtree_check,all_squash,insecure,anonuid=1000,anongid=1000)
[/bash]

Perubahan pada file /etc/exports perlu diupdate dengan perintah berikut:

[bash]
exportfs -av
[/bash]

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.

[bash]
sudo cp -dpfa busybox/_install /srv/nfs
[/bash]

Sehingga kita memiliki struktur direktori sebagai berikut:

[bash]
/srv/nfs/_install
├── bin
├── dev
├── etc
├── proc
├── sbin
├── sys
└── usr
├── bin
└── sbin
[/bash]

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:

[bash]
mkdir /srv/nfs/_install/etc/init.d
mkdir /srv/nfs/_install/dev
mkdir /srv/nfs/_install/proc
mkdir /srv/nfs/_install/sys
[/bash]

Kemudian akan membuat file /etc/inittab sebagai berikut:

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

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:

[bash]
mount -t proc none /proc
mount -t sysfs none /sys
mount -t ramfs ramfs /dev
/sbin/mdev -s
[/bash]

Kita mount /dev sebagai temporary file system karena kekurangan dari NFS file system yaitu tidak dapat membuat device node on the fly karena ownership dari direktori NFS dimiliki oleh user workstation.

Konfigurasi Kernel

Linux kernel memiliki fitur untuk mengakses NFS server dengan mengaktifkan NFS support.

[bash]
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
[/bash]

Testing

Jalankan qemu dengan perintah berikut:

[html]
qemu-system-arm -M versatilepb -m 128M -kernel zImage -append ‘root=/dev/nfs nfsroot=192.168.2.2:/srv/nfs/_install rw ip=192.168.2.15::192.168.2.1:255.255.255.0 init=/sbin/init’
[/html]

Catatan:

  • 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
Pos ini dipublikasikan di Embedded, Linux, Tutorial. Tandai permalink.

4 Balasan ke Mini System dengan Qemu + Linux + Busybox + NFS

  1. Fitra Aditya berkata:

    Terima kasih Pak ruckuus artikelnya.😀

  2. Dmxyor berkata:

    Gunanya NFS kernel server untuk apa ya? terima kasih.

    • Dwi Sasongko S berkata:

      NFS (Network File System) Kernel Server di sini berfungsi sebagai penyedia storage virtual (host development). Manfaatnya:
      1. Storage yang tidak terbatas (sebesar kapasitas disk di server)
      2. Kemudahan untuk debugging; mengganti file konfigurasi, mengupdate hasil kompilasi, dan lain-lain.

  3. Ping balik: BuildRoot dan Real Hardware | Embedid

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