Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
Workshop On eCos
668 views | comments | 1 favorites | 16 downloads | 2 embeds (Stats)
More Info
This slideshow is Public
Total Views: 668 on Slideshare: 634 from embeds: 34
Most viewed embeds (Top 5):
More
Slideshow Transcript
- Slide 1: Workshop On
eCos
R. VLSI - LabTek VIII STEI ITB , 19 Maret 2008
- Slide 2: eCos adalah sebuah embedded real time
kernel yang lengkap
eCos tidak seperti Linux atau MS Windows yang
mempunyai user interface sebagai media interaksi
dengan pemakai dimana pemakai dapat menjalankan
aplikasi yang diinginkan
Aplikasi yang berjalan di eCos harus di lingking
dengan kernel eCos kemudian di burning ke
boot ROM supaya dapat berfungsi
- Slide 3: Tools apa saja yang diperlukan ???
Source code eCos , bisa didapatkan dari :
cvs dari sourceware.org :
http://ecos.sourceware.org/anoncvs.html
running script dari sourceware.org
ftp://ecos.sourceware.org/pub/ecos/ecos-install.tcl
sh ecos-install.tcl
download dari ecoscentric :
http://ecoscentric.com/devzone/snapshots.shtml
download dari gaisler :
ftp://gaisler.com/gaisler.com/ecos/src/
- Slide 4: Configuration Tool :
download dari ecoscentric :
http://ecoscentric.com/devzone/configtool.shtml
download dari gaisler :
ftp://gaisler.com/gaisler.com/ecos/bin/configtool/
Cross Compiler :
download dari gaisler :
ftp://gaisler.com/gaisler.com/bcc/bin/
download dari ecos.sourceware.org :
ftp://ecos.sourceware.org/pub/ecos/gnutools
Cygwin untuk developer yang menggunakan
MS Windows sebagai host , bisa download
langsung install dari cygwin.com :
http://cygwin.com/setup.exe
- Slide 5: Proses Instalasi ......
running script ...... akan mendownload semua kebutuhan
sourcecode dan semua tools yang dibutuhkan kemudian
melakukan proses compiling untuk host tools (termasuk
tools konfigurasi), syarat utamanya adalah ada Tcl dan wget
di komputer kita. berlaku baik di windows dan Unix/Linux
jika sudah mendownload masing-masing modul ekstrak di
lokasi yang diinginkan , jangan lupa menambahkan direktori
file-file eksekusi ( seperti cross compiler dan tool
konfigurasi) pada environment PATH
environment yang perlu ditambahkan juga adalah
ECOS_REPOSITORY untuk menunjukkan lokasi dari
sourcecode eCos
- Slide 6: Configuring eCos
command line : ecosconfig
gui : configtool
- Slide 7: Workflow
select template
build test
adding package
build library
editing configuration
build tree
- Slide 8: ecosconfig
listing modul :
ecosconfig srcdir=/usr/local/ecos/ecosrep/packages/ list
select template :
ecosconfig srcdir=/usr/local/ecos/ecosrep/packages/ new \\
sparc_leon3 net
adding package :
ecosconfig srcdir=/usr/local/ecos/ecosrep/packages/ add \\
CYGPKG_DEVS_ETH_SPARC_LEON3
ecosconfig srcdir=/usr/local/ecos/ecosrep/packages/ add \\
CYGPKG_DEVS_ETH_SMSC_LAN91CXX
checking config :
ecosconfig srcdir=/usr/local/ecos/ecosrep/packages/ check
- Slide 9: ecosconfig
build tree :
ecosconfig srcdir=/usr/local/ecos/ecosrep/packages/ tree
build library : make test :
make make test
that's it
- Slide 10: configtool – select template
- Slide 11: configtool – adding package
- Slide 12: configtool – edit config
- Slide 13: configtool – last three
build lib
build test
make build tree
- Slide 14: drill down deeper
http://ecos.sourceware.org/docs-latest/user-guide/ecos-user-guide.html
- Slide 15: Aplikasi eCos
void cyg_user_start(void)
{
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);
}
void simple_program(cyg_addrword_t data)
{
for (;;) {
}
}
- Slide 16: Building aplikasi eCos
copy makefile dari example dan edit sesuai
dengan aplikasi kita
jalankan :
make INSTALL_DIR=/path/to/ecos/install
/path/to/ecos/install adalah direktori dimana
ecos library berada yang dihasilkan pada waktu build
tree
- Slide 17: Fitur eCos
flag
counter
semaphore
thread
clock
alarm mutex
condition variable
interrupt handling mailboxes
- Slide 18: Thread
prepare
create
control
terminate
- Slide 19: Yang harus disiapkan
entry function :
void thread_entry_function(cyg_addrword_t data)
stack allocation :
static unsigned char \\
mystack[CYGNUM_HAL_STACK_SIZE_MINIMUM];
thread handle
cyg_handle_t threadhandle;
thread structure
cyg_thread threadstructure;
priority level
#define MYPRIORITY 10
- Slide 20: Creation
prototype :
cyg_thread_create(cyg_addrword_t sched_info,
cyg_thread_entry_t* entry,
cyg_addrword_t entry_data,
char* name, void* stack_base,
cyg_ucount32 stack_size,
cyg_handle_t* handle, cyg_thread* thread)
fungsi cyg_thread_create akan menginisialisasi sebuah
thread dalam kondisi suspend bukan run. Supaya thread
berjalan aplikasi harus memanggil cyg_thread_resume
prototype :
cyg_thread_resume(cyg_handle_t handle)
- Slide 21: contoh :
cyg_thread_create(MYPRIORITY,
&thread_entry_function,
&entry_data,
“MYTHREAD”, mystack,
CYGNUM_HAL_STACK_SIZE_MINIMUM,
&threadhandle, &threadstructure);
cyg_thread_resume(threadhandle);
- Slide 22: Control
thread state : resume,suspend
thread priority
thread delay
thread release
- Slide 23: Termination
dari dalam thread
void cyg_thread_exit(void)
dari luar thread void
cyg_thread_kill(cyg_handle_t handle)
menghapus alokasi resource cyg_bool
cyg_thread_delete(cyg_handle_t handle)
- Slide 24: Flag
Flag adalah binary event yang statusnya hanya
set atau unset
Semaphore adalah conting event yang statusnya
akan selalu bertambah setiap di-post dan
berkurang setiap ada thread yang menunggu.
thread yang menunggu flag akan segera return apabila
flag bersangkutan berstatus set, sementara thread yang
menunggu semaphore akan langsung return setiap
semaphore mempunyai nilai lebih dari nol dan akan
mengurangi nilai semaphore
- Slide 25: Inisialisasi
void cyg_flag_init(cyg_flag_t* flag)
Penghapusan
void cyg_flag_destroy(cyg_flag_t* flag)
Manipulasi flag
set bit tertentu dari flag : operasi OR
void cyg_flag_setbits(cyg_flag_t* flag, cyg_flag_value_t value)
clear bit tertentu dari flag :
void cyg_flag_maskbits(cyg_flag_t* flag, cyg_flag_value_t value)
- Slide 26: cek kodisi tertentu dari flag
cyg_flag_poll(cyg_flag_t* flag,
cyg_flag_value_t pattern,
cyg_flag_mode_t mode)
Tunggu flag pada kondisi tertentu tanpa batas waktu
cyg_flag_wait(cyg_flag_t* flag,
cyg_flag_value_t pattern,
cyg_flag_mode_t mode)
Tunggu flag pada kondisi tertentu dengan batas waktu
cyg_flag_timed_wait(cyg_flag_t* flag,
cyg_flag_value_t pattern,
cyg_flag_mode_t mode,
cyg_tick_count_t abstime)
abstime should be cyg_current_time()+number
- Slide 27: Mode Event
CYG_FLAG_WAITMODE_AND : semua kondisi
harus terpenuhi
CYG_FLAG_WAITMODE_OR : salah satu kondisi
sudah cukup
CYG_FLAG_WAITMODE_CLR : clear semua flag
setelah sukses
- Slide 28: Mutex
dengan mutex memungkinkan suatu thread mengunci
penggunaan suatu resource. thread lain harus menunggu
dahulu sampai kuncinya dilepas kembali
Live time
lock
init unlock destroy
trylock
- Slide 29: Prototype
void cyg_mutex_init(cyg_mutex_t* mutex);
cyg_bool_t cyg_mutex_lock(cyg_mutex_t* mutex);
cyg_bool_t cyg_mutex_trylock(cyg_mutex_t* mutex);
void cyg_mutex_unlock(cyg_mutex_t* mutex);
void cyg_mutex_destroy(cyg_mutex_t* mutex);
- Slide 30: Interrupt Handling
eCos mengimplementasikan sistem dua lapis
penanganan interrupt :
ISR : interrupt service rutin yang akan dijalankan
segera saat terjadinya hardware interrupt
DSR : defer service rutin yang akan dijalankan sesaat
setelah thread yang sedang berjalan selesai apabila
flag CYG_ISR_CALL_DSR di set saat return dari ISR
live time
create attach detach delete
- Slide 31: ISR creation
void cyg_interrupt_create(cyg_vector_t vector,
cyg_priority_t priority, cyg_addrword_t data,
cyg_ISR_t* isr, cyg_DSR_t* dsr,
cyg_handle_t* handle, cyg_interrupt* intr);
vector : nomor vektor interrupt
priority : prioritas interup
data : pointer data yang akan dipassing pada waktu
terjadi interrupt boleh diisi NULL
isr : pointer ke ISR handler
dsr : pointer ke DSR handler
handle : handle dari interrupt yang dihasilkan , harus
disiapkan
intr : struktur data interrupt , harus disiapkan
- Slide 32: Controlling Interrupt
attach/detach:
void cyg_interrupt_attach(cyg_handle_t intr);
void cyg_interrupt_detach(cyg_handle_t intr);
global enable/disable :
void cyg_interrupt_disable(void);
void cyg_interrupt_enable(void);
selektif masking :
void cyg_interrupt_mask(cyg_vector_t vector);
void cyg_interrupt_unmask(cyg_vector_t vector);
- Slide 33: Template ISR
cyg_uint32
isr_function(cyg_vector_t vector, cyg_addrword_t data)
{
cyg_bool_t dsr_required = 0;
cyg_interrupt_acknowledge(vectornum);
cyg_interrupt_mask(vectornum);
return dsr_required ?
(CYG_ISR_CALL_DSR | CYG_ISR_HANDLED) :
CYG_ISR_HANDLED;
}
- Slide 34: Template DSR
void
dsr_function(cyg_vector_t vector,
cyg_ucount32 count,
cyg_addrword_t data)
{
//data access etc
//or transfer to other thread
}
- Slide 35: Topik menarik lainnya
POSIX compatibility
filesystem
SSL
Device drivers
Porting
httpd USB
ssh
snmp
ethernet bridging
firewall
- Slide 36: drill down deeper
http://ecos.sourceware.org/docs-latest/ref/ecos-ref.html
- Slide 37: WiMAX driver
packages
ecos.db
devs
eth
idwman
current
cdl
idwman_drivers.cdl
include
sparc if_idwman.h
src
idwman if_idwman.c
leon3
current
cdl
leon3_idwman_drivers.cdl
include
src devs_eth_sparc_idwman_leon3.inl
if_sparc_idwman.c