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: