Modul 1 - Embedded

advertisement
Modul 1
Pengenalan RTOS (eCos)
Embedded Operating System adalah sebuah sistem operasi untuk sistem
embedded. Sistem operasi ini dirancang secara efisien dan compact,
mengabaikan fungsi-fungsi yang disediakan oleh sistem operasi computer nonembedded, dan tidak dapat digunakan oleh aplikasi khusus yang dijalankan.
1 Tujuan
1. Peserta mengerti cara membangun program untuk eCos.
2. Peserta mengerti bagaimana cara kompilasi dan implementasi program
Hello World pada RTOS di PC.
2 Dasar Teori
Salah satu jenis khusus dari sistem operasi embedded adalah Real-Time
Operating System (RTOS), yaitu sistem operasi yang mendukung multitasking
untuk memfasilitasi aplikasi real-time system. Real-time system adalah sistem
yang memiliki constraint waktu, di mana kebenaran dari suatu operasi tidak
hanya bergantung pada kebenaran secara logika, tetapi juga pada waktu ketika
operasi tersebut dilakukan. Sistem tersebut disebut hard real-time system apabila
operasi yang selesai setelah deadline mengakibatkan kegagalan pada sistem.
Sedangkan pada soft real-time system, keterlambatan tersebut dapat ditoleransi,
hanya saja menghasilkan kualitas kerja yang lebih rendah.
Sebuah RTOS biasanya menggunakan algoritma scheduling yang khusus agar
dapat menyediakan tool yang dibutuhkan untuk menghasilkan deterministic
behaviour pada sistem akhir. RTOS lebih dihargai untuk seberapa cepat atau
dapat diprediksinya respons terhadap suatu event daripada berapa banyak
pekerjaan yang dapat dilakukan dalam suatu waktu. Karena itu faktor kunci dari
RTOS adalah waktu yang minimal untuk memproses interrupt dan perpindahan
task.
1 Sistem Operasi eCos
Sejarah Singkat
Cygnus Solutions didirikan pada tahun 1989 dengan ide menyediakan dukungan
dan pengembangan penuh terhadap perangkat lunak open source. Perusahaan ini
sukses mempaketkan, mengembangkan dan mendukung seperangkat alat
termasuk GNU Compiler Collection (GCC) dan GNU Debugger (GDB). Di tahun
1997, dengan kesuksesan model dukungan open-source, Cygnus memulai
pengembangan sebuah real time operating system untuk melengkapi perangkat
GNUPro mereka. Tujuannya untuk menghasilkan real-time operating system
berukuran kecil dan dapat dikonfigurasi, sehingga dapat dimanfaatkan untuk
solusi komersial, tapi bebas royalty. Hasilnya adalah Embedded Configurable
Operating System (eCos).
eCos terus tumbuh dan berkembang. Hingga kini telah mendukung berbagai tipe
prosesor semisal: ARM (termasuk Intel Xscale IX425), Intel IA32, MIPS, Motorola
PowerPC (termasuk prosesor MPC74xx G4), Motorola 68k/Coldfire, Sun SPARC,
Renesas H8/300H, SuperH, NEC V850, Fujitsu FRV, Matsushita AM3x, Samsung
CalmRISC dan beberapa lainnya. Juga telah digunakan di berbagai produk
komersial seperti : Sistem Keamanan pada industri otomotif Volvo dan Ford,
Gameboy Advance, Mobile phones 3G Labs, Multimedia Iomega HipZip, dan
Video, Audio, dan MPEG Sun.
Arsitektur eCos
eCos dibangun berbasis arsitektur layered software. Portabilitas aplikasi dan
penggunaan kembali perangkat lunak ditingkatkan dengan membangun abstraksi
detail perangkat keras target dari aplikasi. Garis putus-putus pada Gambar 2.3
membagi lapisan komponen perangkat lunak. Lapisan pertama di atas garis
putus-putus : kernel, networking stack, dan filesystem bersifat independen
terhadap perangkat keras pemroses pada board. Komponen ini berantarmuka
dengan kompatibilitas di atasnya dan lapisan library untuk menghasilkan platform
konsisten untuk lapisan aplikasi. Di bawah garis putus-putus adalah RedBoot ROM
monitor, Hardware Abstraction Layer (HAL), dan device driver. Komponen ini
ditulis dan dikonfigurasi untuk perangkat keras target spesifik.
Gambar 1. Sistem embedded dengan lapisan
paket eCos
Dalam eCos dikenal istilah Component Repository, yaitu struktur direktori yang
memuat semua paket dari sebuah instalasi eCos. Kerangka komponen termasuk
sebuah Package Administration Tool untuk menambahkan paket baru,
memperbaharui paket yang sudah ada, dan menghapus paket lama yang ada
dalam repository. Direktori utama eCos memuat file-file distribusi eCos.
Subdirektori yang memuat component repository disebut packages. Sebuah file
database, ecos.db (berada dalam direktori packages) dikelola oleh Package
Adminstration Tool dan berisi keterangan detail tentang berbagai jenis paket
dalam component repository.
Tabel 2.1: Deskripsi struktur direktori Component Repository eCos
Direktori
Deskripsi
Berisi paket untuk POSIX (IEEE 1003.1) dan uITRON 3.0
Paket untuk Cygmon standalone debug monitor
Memuat semua device driver komponen hardware-specific seperti
komunikasi serial, Ethernet, dan PCMCIA
error
Berisi paket identifikasi kesalahan umum dan status kode.
Hal ini memungkinkan terjadinya keseragaman diantara paket-paket
untuk menyatakan adanya error dan kondisi status
fs
Berisi paket file sistem ROM dan RAM
hal
Gabungan semua paket target perangkat keras HAL
infra
Berisi infrastruktur eCos seperti tipe standard, macro, tracing, assertion,
dan opsi startup
io
Paket untuk semua dukungan sistem Input/Output (I/O) hardware-independent,
seperti Ethernet, flash, dan serial, yang merupakan basis
system device drivers
isoinfra Berisi paket yang menyediakan dukungan untuk ISO C library
(seperti stdlib dan stdio) dan implementasi POSIX
kernel
Berisi paket yang menyediakan fungsional inti (seperti scheduler,
semaphore, dan thread) pada kernel eCos
language Gabungan paket untuk library matematika dan ISO C, yang memungkinkan
aplikasi menggunakan fungsi library C standard dan library
floating-point matematika
net
Paket untuk dukungan networking dasar, termasuk TCP, UDP dan IP,
dan protokol SNMP, serta agen pendukung library berbasis proyek
UCD-SNMP
redboot
Berisi paket untuk RedBoot standalone debug ROM monitor
services Berisi paket untuk alokasi memori dinamis dan dukungan untuk library
kompresi dan dekompresi
compat
cygmon
devs
Hardware Abstraction Layer
HAL adalah komponen utama dalam portabilitas eCos. Ini menyediakan API yang
konsisten terhadap layer atas sistem operasi. Tiap platform perangkat keras
memiliki HAL sendiri untuk mendukung prosesor spesifik dan set periferalnya.
HAL dibangun atas tiga modul : Architecture, Variant, dan Platform. Modul
Architecture mendefinisikan tipe keluarga prosesor, contohnya keluarga Motorola
MPC74xx PowerPC. Modul Variant mendukung fitur prosesor spesifik dalam
keluarga prosesor tersebut. Menggunakan contoh Motorola tadi, modul ini dapat
mendukung MPC7457 dan periferal on-chip spesifik untuk prosesor tersebut.
Modul Platform memperluas dukungan HAL periferal terkait semisal pengendali
interrupt dan devais timer.
Sebagai paket lengkap, HAL juga menyertakan komponen untuk sumberdaya
platform spesifik, loading dan booting, interrupt, context switch, cache startup,
source level debugging, ROM monitor dan beberapa lainnya. Untuk
mempertahankan konfigurabilitas, hanya komponen HAL yang secara aktual
dibutuhkan oleh aplikasi atau platform spesifik yang dibangun ke dalam kernel.
HAL juga menyediakan fasilitas real-time untuk board spesifik, termasuk
exception handler, interrupt handler, dan virtual vector. Exception handler
memungkinkan embedded system memperbaiki dari kondisi exception perangkat
keras semisal overflow, bad memory access, atau operasi pembagi oleh nol.
Kondisi ini harus dicegah karena karena dapat mengacaukan sistem, sehingga
harus ditangani secara benar oleh HAL, kernel, atau aplikasi itu sendiri.
Interrupt penting untuk operasi real-time, namun agar efisien, harus digunakan
untuk mencapai kondisi kerja terbaik prosesor perangkat keras. Terdapat dua
jenis interrupt. Interrupt Service Routine (ISR) digunakan untuk proses
sederhana yang berlangsung cepat. Deferred Service Routines (DSR) digunakan
untuk proses kompleks. Dengan kedua tipe ini, pengguna dapat menyusun
prioritas interrupt sesuai kebutuhan sistem. Virtual vector mendukung ROM
berbasis monitor, memungkinkan debugging aplikasi melalui Ethernet atau kanal
komunikasi serial.
Red Boot ROM Monitor
Red Hat Embedded Debug and Bootstrap (RedBoot) menyediakan lingkungan
untuk bootstrap dan debugging untuk sistem yang berbasiskan eCos. RedBoot
dikembangkan sebagai aplikasi eCos tanpa kernel dan dapat digunakan untuk
melakukan booting aplikasi eCos lain dan juga RTOS lain. Beberapa fitur RedBoot
adalah boot scripting, Command Line Interface (CLI), akses melalui port serial
atau ethernet, dukungan untuk GDB, dukungan untuk flash image, dan bootstrap
melalui jaringan. Meskipun RedBoot merupakan program yang standalone, proses
konfigurasi dan build-nya sama seperti aplikasi eCos.
Paket I/O
Paket I/O di eCos dirancang sebagai framework yang general-purpose untuk
mendukung device driver, dari serial port sampai networking stack. Komponen
dari paket I/O, dikonfigurasi pada sistem seperti komponen-komponen lainnya.
User juga dapat menambahkan driver yang dibuat sendiri. Meskipun driver dapat
dianggap static, pengaksesannya dilakukan melalui sebuah “handle”. Setiap
device pada sistem memiliki nama yang unik dan dapat dipetakan ke sebuah
handle.
Kernel eCos
Kernel eCos dirancang untuk mencapai empat tujuan :
•
Low interrupt latency, waktu yang dibutuhkan untuk merespon sebuah
interrupt dan memulai eksekusi ISR;
•
Low task switching latency, waktu yang dibutuhkan saat sebuah thread
menjadi tersedia ketika eksekusi sebenarnya dimulai;
•
Small memory footprint, sumber daya memory untuk program dan data
dipertahankan minimum dengan memungkinkan semua komponen
mengalokasikan memory sesuai kebutuhan;
•
Deterministic behavior, sepanjang eksekusi, performa kernel harus dapat
diprediksi dan dibatasi sehingga memenuhi kebutuhan aplikasi real-time.
eCos menawarkan fitur menarik untuk memperlancar performa aplikasi, opsi
untuk membangun dengan atau tanpa kernel aktual. Pada aplikasi sederhana
yang tidak membutuhkan scheduling atau multi-tasking, fungsi eCos untuk
mengatur dan menjalankan perangkat keras dapat dibangun tanpa kernel,
meningkatkan kecepatan eksekusi dan mengurangi memory footprint. Pada
banyak aplikasi DSP tradisional tipe pemrosesan ini sudah umum.
Sebuah aplikasi khusus dapat terdiri dari sebuah aliran data konstan yang
diterima dari sebuah perangkat keras semisal A/D converter. Setelah buffer
masukan terisi data, dikirim sinyal ke prosesor dengan interrupt dan data
dipindahkan ke dalam memory prosesor dengan kanal DMA. Waktu eksekusi
pemrosesan data konsisten dengan setiap paket data dan kurang dari waktu yang
dibutuhkan untuk paket lain yang akan diproses. Setelah proses selesai, data
dipindahkan dari memory prosesor ke buffer keluaran menggunaan DMA lain.
Tipe aplikasi ini tidak membutuhkan scheduling dinamis atau multi-tasking dan
memberikan keuntungan dalam hal kecepatan eksekusi yang lebih cepat dan
pemakaian memory yang lebih kecil dengan tidak menggunakan kernel.
Lebih jauh lagi, eCos adalah sistem operasi lengkap dengan fitur kernel dan
komponen inti termasuk : scheduling dan sinkronisasi, interrupt dan exception
handling, counters, clocks, alarms, timers,POSIX dan uITRON compatibility layer,
ROM monitor, RAM dan ROM filesystem, dukungan PCI, TCP/IP networking, dan
fitir tambahan oleh para pengembang.
eCos Scheduler
Dua tipe scheduler tersedia pada eCos : multilevel queue scheduler dan bitmap
scheduler. Multilevel queue scheduler memungkinkan thread diberi nilai prioritas
dari level 0 hingga 31, dengan 0 adalah prioritas tertinggi dan 31 terendah. Pada
tiap level multiple thread dapat dieksekusi dan pengambilalihan prioritas antar
level dimungkinkan, sehingga thread dengan level lebih tinggi dapat dijalankan
ketika thread dengan level lebih rendah sedang dihentikan. Timeslicing juga
didukung dengan level prioritas dan across priority level, yang memungkinkan
adanya penetapan waktu eksekusi sebelum melepaskan sumber daya ke thread
berikutnya. Multilevel queue scheduler mendukung Symmetric Multi-Processing
(SMP).
Bitmap scheduler adalah scheduler yang lebih sederhana dan efisien. Juga
mendukung 32 level prioritas, tapi hanya satu thread yang dapat dijalankan pada
masing-masing level. Pengambilalihan prioritas dimungkinkan, tapi timeslicing
antar thread tidak, dan tidak dibutuhkan karena masing-masing level hanya
mengizinkan thread tunggal. Dan dengan pilihan dengan atau tanpa kernel, eCos
memungkinkan keseimbangan antara fitur dan efisiensi schudelur yang akan
dikonfigurasi oleh pengguna untuk mencocokkan dengan kebutuhan.
Filesystem
Infrastruktur filesystem di eCos diimplementasikan oleh paket FILEIO dan
menyediakan operasi file yang sesuai dengan standard POSIX.
Filesystem yang didukung oleh eCos adalah ramfs, romfs, FAT, dan JFFS2. RAM
Filesystem (ramfs) digunakan untuk melakukan operasi file I/O bukan pada
storage melainkan pada RAM. ROM Filesystem (romfs) adalah filesystem yang
hanya dapat dibaca dan tidak dapat ditulis. File Allocation Table (FAT) merupakan
sebuah filesystem yang sudah umum digunakan, misalnya sebagai filesystem
untuk sistem operasi Windows 9x. Journaling Flash Filesystem version 2 (JFFS2)
adalah filesystem yang umum digunakan pada flash memory.
Networking Stack
Perancangan TCP/IP Stack di eCos memungkinkan stack menjadi modular dan
pada saat ini mendukung dua implementasi yang berbeda, yaitu dari OpenBSD
dari tahun 2000 dan versi yang lebih baru berdasarkan dari FreeBSD.
Web Server
eCos menyediakan sebuah HTTP server yang sederhana untuk digunakan aplikasi.
Server ini secara spesifik dibuat untuk kendali dan pengamatan secara remote
terhadap aplikasi embedded. Karena itu penekanannya adalah pada content yang
dibuat secara dinamik, form handling, dan interface CGI. Server ini juga dapat
mendukung IPv6 apabila konfigurasi eCos memiliki IPv6.
Library
Untuk memfasilitasi aplikasi, eCos menyediakan library untuk C dan untuk fungsi
matematika. C Library menyediakan fungsi-fungsi standard C sesuai spesifikasi
ISO 9899:1990 untuk library standard C, yang secara esensial sama dengan
spesifikasi ANSI C3.159-1989 (C-89). Library matematika menyediakan fungsifungsi untuk operasi matematika.
Compatibility Layer
Untuk memudahkan porting aplikasi ke eCos, eCos menyediakan kompatibilitas
dengan POSIX dan µITRON.
Dukungan untuk POSIX terbagi antara paket POSIX dan FILEIO. Paket POSIX
menyediakan dukungan untuk thread, signal, sinkronisasi, timer, dan message
queue. Paket FILEIO menyediakan dukungan untuk file dan device I/O.
Spesifikasi
µITRON mendefinisikan arsitektur sistem operasi yang sangat
fleksibel dan dirancang khusus untuk aplikasi embedded. Spesifikasi tersebut
dapat diimplementasikan pada banyak platform dan memberikan keuntungan
yang signifikan dengan mengurangi usaha yang diperlukan dalam memahami dan
melakukan porting aplikasi ke arsitektur prosesor yang baru.
Lisensi eCos dan Dukungan Pihak Ketiga
eCos didistribusikan dibawah GNU General Public License (GPL) versi 2 dengan
pengecualian untuk linking (linking exception). Lisensi ini memberikan hak untuk
secara bebas mendapatkan source code, memodifikasi, dan kemudian
mendistribusikannya. Perangkat lunak yang dimodifikasi dari distribusi asli dapat
didistribusikan kembali jika mengidentifikasikan perangkat lunak aslinya dan
modifikasi yang dilakukan. Hasil modifikasi juga dilindungi di bawah GPL. Tetapi
karena ada pengecualian untuk linking, berbeda dengan syarat lisensi GPL yang
standard, aplikasi yang hanya melakukan linking ke eCos tanpa memodifikasi
eCos tidak perlu dilisensi dengan GPL.
Karena dilatarbelakangi lingkungan open-source, eCos menyertakan sejumlah
fungsi tambahan dari lingkungan yang mendukungnya. Fungsi-fungsi ini biasanya
disediakan oleh kontributor pihak ketiga eksternal, sebagai hasil pengembangan
berdasar kebutuhan mereka sendiri. Beberapa diantaranya adalah : POSIX, EL/IX,
dan uITRON Compatibility Layers, ROM Monitor, RAM dan ROM filesystem, PCI,
TCP/IP Networking, Embedded Simple Object Access Protocol (SOAP) Toolkit,
Kaffe Java Virtual Machine, Bluetooth dan Wireless Application Protocol (WAP),
dan Embedded Web Server.
Perbandingan dengan Embedded OS lain
Tabel 2.2, diambil dari ”An Introduction to eCos”, paper yang ditulis oleh Robert
Sgandurra, membandingkan beberapa fitur dasar dari eCos dengan tiga
embedded OS lain.
Tabel 2.2: Perbandingan antara eCos, VxWorks, Linux, dan Real-Time Linux
3 Petunjuk Kompilasi Program
Pada paket eCos untuk Linux, tersedia dua perangkat dalam membangun sistem
operasi eCos, yaitu ecosconfig dengan tampilan text-based dan configtool dengan
tampilan GUI. Pada perancangan ini digunakan ecosconfig untuk membuat
template eCos dan membuat build tree dari konfigurasi eCos, sedangkan
configtool hanya digunakan untuk melakukan konfigurasi.
Proses membangun kernel dan paket dimulai dengan memilih template yang
sesuai dengan target hardware. Pada percobaan kali ini, dipilih template default
yang memasukkan semua paket standard untuk platform i386pc.
Perintah untuk membuat template tersebut adalah :
$ ecosconfig new pc default
Argumen “new” menginstruksikan ecosconfig untuk membentuk sebuah
konfigurasi baru. Argumen “pc” menunjukkan bahwa target hardware yang
digunakan adalah i386pc, dan argumen “default” menunjukkan bahwa semua
paket standard yang tersedia pada template akan dimasukkan dalam file
konfigurasi. Perintah ini akan menghasilkan sebuah file konfigurasi “ecos.ecc”. File
ini merupakan file konfigurasi dari eCos. Untuk edit konfigurasi tersebut,
digunakan perintah:
$ configtool ecos.ecc
Perintah tersebut akan membuka window GUI untuk konfigurasi eCos. Ubahlah
konfigurasi file agar sesuai untuk menampilkan “Hello World!” pada eCos!
Setelah selesai konfigurasi, file “ecos.ecc” disimpan kembali dan selanjutnya
dibuat build tree dengan menggunakan ecosconfig, yaitu dengan perintah :
$ ecosconfig tree
Langkah berikutnya, dibuat library eCos dengan menggunakan perintah :
$ make
Hasilnya adalah static library pada subdirektori “install/lib” yang siap di-link
dengan aplikasi untuk menjadi file image.
Pembuatan File Image
File image yang dibuat nanti akan di load melalui proses boot (native). Pertama
dilakukan proses compile terlebih dahulu hingga diperoleh object file dari source
code yang kita buat. Source code yang dibuat:
#include<stdio.h>
int main()
{
printf("Hello, eCos world!");
return 0;
}
Untuk meng-compile file hello.c menjadi hello.o digunakan perintah:
i386-elf-gcc -I<dir>/include -c hello.c
<dir> di sini merupakan alamat direktori tempat file header yang dibutuhkan
untuk proses compile berada. Pada percobaan, file tersebut berada di
direktori/home/lss/install/include/, maka perintah yang dijalankan:
i386-elf-gcc -I/home/lss/install/include -c hello.c
Setelah source code yang diperlukan di-compile menjadi object file, selanjutnya
semua object code di-link, termasuk dengan library eCos yang sudah di-build
sebelumnya. Perintah yang digunakan adalah :
i386-elf-gcc -o hello.elf -L<dir>/lib hello.o -Ttarget.ld -nostdlib
<dir> di sini merupakan alamat direktori tempat library eCos. Pada percobaan,
file tersebut berada di direktori /home/lss/install/lib/, maka perintah yang
digunakan adalah:
i386-elf-gcc -o hello.elf -L/home/lss/install/lib hello.o -Ttarget.ld
-nostdlib
Hasil dari proses linking ini, “hello.elf”, merupakan file executable dengan format
Executable and Linkable File (ELF).
Karena pada percobaan kali ini digunakan GRUB sebagai boot loader dari eCos,
maka file “hello.elf” tadi diletakkan di dalam direktori /boot/. Langkah berikutnya
adalah menambahkan baris berikut pada file menu.lst yang terdapat
dalam direktori /boot/grub/:
title
root
kernel
eCos
(hd0,4)
/boot/hello.elf
boot
Setelah itu dilakukan proses reboot pada PC yang digunakan. Saat muncul menu
boot loader (GRUB), pilih opsi “eCos”. Beberapa saat kemudian akan muncul teks
“Hello, eCos world!” pada layar monitor.
Buat analisis dari percobaan di atas!
4 Tugas Praktikum
1. Buatlah aplikasi hello world dengan target vmware, output ke monitor
2. Buatlah aplikasi hello world dengan target vmware, output ke file
3. Buatlah aplikasi hello world dengan target PC sesungguhnya, output ke
monitor
4. Buatlah program multi threading. Tunjukkan bahwa program tersebut
mempunyai beberapa thread
5 Detail Tahap Pekerjaan
5.1 Aplikasi “Hello World” pada VMWare, output ke layar
1 Konfigurasi kernel eCos
Pekerjaan dimulai dengan melakukan konfigurasi eCos menggunakan
configtool. Pada cygwin diketik perintah
configtool
sehingga muncul tampilan sebagai berikut:
Untuk membangun kernel dan paket, dipilih template yang sesuai dengan target
hardware. Pada perancangan ini dipilih template default yang memasukkan
semua paket standard untuk platform i386pc. Pada configtool hal ini dapat
dilakukan dengan memilih menu
Build  Template
Sehingga muncul tampilan sebagai berikut:
Pada pilihan Hardware dipilih i386 PC target, sedangkan pada pilihan Packages
dipilih default. Setelah itu klik OK.
Selanjutnya dilakukan konfigurasi eCos
yang diperlukan adalah:
Pada bagian eCos HAL:
- eCos HAL -> i386 Architecture -> i386
- eCos HAL -> i386 Architecture -> i386
- eCos HAL -> i386 Architecture -> i386
checklist)
sesuai dengan rancangan. Konfigurasi
PC Target -> Startup Type (FLOPPY)
PC Target -> Diagnostic Serial Port (2)
PC Target -> Output to PC Screen (di-
Selanjutnya simpan konfigurasi ini dengan nama ecos.ecc. Kemudian lakukan
building tree dengan memilih menu
Build  Library
Tunggu sampai muncul kalimat ”build finished” pada bagian bawah jendela
configtool seperti gambar berikut:
Hasilnya adalah static library pada subdirektori “ecos_install/lib” yang siap di-link
dengan aplikasi untuk menjadi file image.
2 Pembuatan Aplikasi
File image yang dibuat nanti akan di load melalui proses boot (native). Pertama
dilakukan proses compile terlebih dahulu hingga diperoleh object file dari source
code yang kita buat. Source code yang dibuat:
#include<stdio.h>
int main()
{
printf("Hello, eCos world!");
return 0;
}
Untuk meng-compile file hello.c menjadi hello.o digunakan perintah:
i386-elf-gcc -I<dir>/include -c hello.c
<dir> di sini merupakan alamat direktori tempat file header yang dibutuhkan
untuk proses compile berada. Pada percobaan, file tersebut berada di direktori
/home/ELKA/ecos_install/include/, maka perintah yang dijalankan:
i386-elf-gcc -I/home/ ELKA/ecos_install /include -c hello.c
3 Linking
Setelah source code yang diperlukan di-compile menjadi object file, selanjutnya
semua object code di-link, termasuk dengan library eCos yang sudah di-build
sebelumnya. Perintah yang digunakan adalah :
i386-elf-gcc -o hello.elf -L<dir>/lib hello.o -Ttarget.ld –nostdlib
<dir> di sini merupakan alamat direktori tempat library eCos. Pada percobaan,
file tersebut berada di direktori /home/ELKA/ecos_install/lib/, maka perintah yang
digunakan adalah:
i386-elf-gcc -o hello.elf -L/home/ELKA/ecos_install/lib hello.o -Ttarget.ld –nostdlib
Hasil dari proses linking ini, “hello.elf”, merupakan file executable dengan format
Executable and Linkable File (ELF).
Untuk dijalankan pada VMWare, file ini diubah ke floppy image dengan perintah:
i386-elf-objcopy -O binary hello.elf hello.flp
4 Menjalankan image floppy pada vmWare
File flp ini dijadikan sebagai image floppy pada setting VMWare. Proses setting
sebagai berikut:
1. Pada jendela VMWare pilih File New  Virtual machines
Sehingga muncul New Virtual Machine Wizard. Kemudian klik ‘Next’.
Pilih ‘Typical’, kemudian klik ‘Next’.
Pilih ‘Other’, kemudian klik ‘Next’.
Klik ‘Next’.
Pilih ‘Do not use a network connection’, kemudian klik ‘Next’.
Klik ‘Finish’.
2. Pilih ‘Edit virtual machine setting’ sehingga muncul tampilan berikut:
Gunakan semua device yang tersedia kecuali CD-ROM (Klik CD-ROM 
Remove).
3. Klik ’Floppy’, kemudian pilih ’Use Floppy Image’.
4. Pilih file hello.bin sebagai floopy image, kemudian klik OK
5. Klik ’Start this virtual machine’ sehingga muncul ”Hello, eCos World!” pada
layar VMWare sebagai berikut:
5.2 Aplikasi “Hello World” pada vmWare Dengan Output ke
File Teks
1 Konfigurasi eCos
Lakukan konfigurasi pada Configtool sebagai berikut:
- eCos HAL -> i386 Architecture -> i386 PC Target -> Startup Type (FLOPPY)
- eCos HAL -> i386 Architecture -> i386 PC Target -> Diagnostic Serial Port
(0)
- eCos HAL -> i386 Architecture -> i386 PC Target -> Output to PC Screen
(tidak di-checklist)
Simpan konfigurasi ini dengan nama ecos2.ecc. Kemudian lakukan building
tree.
2 Linking
Selanjutnya compile dan link file hello.c dengan static library yang baru saja
di-build, dan konversi file hasil menjadi image floppy. File flp ini dijadikan
sebagai image floppy pada setting VMWare.
3 Perubahan setting vmWare
Pada setting VMWare, lakukan penambahan divais serial. Ini dilakukan dengan
cara memilih ’Edit Virtual Machine Setting’ kemudian klik ’Add’.
Klik ’Next’.
Pilih ’Serial Port’, kemudian klik ’Next’.
Pilih ’Output to file’, kemudian klik ’Next’.
Isi ‘Output file’ dengan nama hello.txt kemudian klik ‘Finish’. Simpan file ini
kemudian klik ’OK’.
Selanjutnya boot VMWare sehingga pada layar muncul tampilan sebagai
berikut:
Selanjutnya buka file hello.txt. Jika semua langkah dilakukan dengan benar
maka file ini akan berisi tulisan ’Hello, eCos World’.
5.3 Aplikasi ”Hello World” pada PC Dengan Boot
Menggunakan Floppy Drive Fisik
Gunakan file hello.flp yang diperoleh pada percobaan pertama. Ubah format
file ini menjadi hello.bin dengan perintah:
i386-elf-objcopy.exe -O binary hello.elf hello.bin
File hello.bin ini diinstal ke floppy dengan perintah:
dd conv=sync if=hello.bin of=/dev/fd0
Setelah terinstal ke floppy, restart PC kemudian masuk ke BIOS dan atur agar
PC di-boot oleh floppy drive.
Selanjutnya PC akan di-boot oleh floppy drive dan pada layar muncul tulisan
’Hello, eCos World!’.
5.4 Aplikasi Multithreading pada VMWare
Source code diambil dari direktori ”examples” pada source code eCos. Listing
source code adalah sebagai berikut:
#include <cyg/kernel/kapi.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/* now declare (and allocate space for) some kernel objects,
like the two threads we will use */
cyg_thread thread_s[2];
/* space for two thread objects */
char stack[2][4096];
/* space for two 4K stacks */
/* now the handles for the threads */
cyg_handle_t simple_threadA, simple_threadB;
/* and now variables for the procedure which is the thread */
cyg_thread_entry_t simple_program;
/* and now a mutex to protect calls to the C library */
cyg_mutex_t cliblock;
/* we install our own startup routine which sets up threads */
void cyg_user_start(void)
{
printf("Entering twothreads' cyg_user_start() function\n");
cyg_mutex_init(&cliblock);
cyg_thread_create(4, simple_program, (cyg_addrword_t) 0,
"Thread A", (void *) stack[0], 4096,
&simple_threadA, &thread_s[0]);
cyg_thread_create(4, simple_program, (cyg_addrword_t) 1,
"Thread B", (void *) stack[1], 4096,
&simple_threadB, &thread_s[1]);
cyg_thread_resume(simple_threadA);
cyg_thread_resume(simple_threadB);
}
/* this is a simple program which runs in a thread */
void simple_program(cyg_addrword_t data)
{
int message = (int) data;
int delay;
printf("Beginning execution; thread data is %d\n", message);
cyg_thread_delay(200);
for (;;) {
delay = 200 + (rand() % 50);
/* note: printf() must be protected by a
call to cyg_mutex_lock() */
cyg_mutex_lock(&cliblock); {
printf("Thread %d: and now a delay of %d clock ticks\n",
message, delay);
}
cyg_mutex_unlock(&cliblock);
cyg_thread_delay(delay);
}
}
Compile dan link file ini menggunakan library pada percobaan pertama.
Kemudian ubah format file menjadi image floppy dan jadikan sebagai image
floppy pada setting VMWare. Selanjutnya VMWare di-boot sehingga pada layar
muncul sebagai berikut:
6 Referensi
●
Contoh
hello
world
di
http://andryongkinata.wordpress.com/2008/01/21/ecos-hello-world/
eCos:
●
Instalasi
software
pengembangan
eCos
di
http://www.ee.itb.ac.id/~waskita/instalasi-ecos-cygwin-windows
PC:
Download