TINI
TINI (Tiny InterNet Interface) je ugradbeni procesor tvrtke Dallas Semiconductor. Programira se putem Java programskog jezika. Uključuje Ethernet sučelje i TCP/IP podršku. Veličine je 72-pinske SIMM krtice. Na slici 4. prikazana je TINI pločica s priključnom pločom na kojoj se nalaze priključci za napajanje te serijsku, mrežnu i 1-Wire vezu.
Slika 4.
TINI računalo i ploča s napajanjem, serijskom vezom, mrežnim,
1-Wire i ostalim priključcima
Na osnovnoj TINI pločici (TINI board) nalaze se :
DS80C390 procesor
Ethernet kontroler
512kB FLASH ROM
1MB RAM-a podržanog baterijom (proširiv do 2 MB)
dva integrirana serijska priključka i podrška za dva dodatna (naponski nivoi su standarni RS-232 ili +5V)
dva integrirana CAN (Controler Area Network) kontrolera
I2C (Inter Integrated Circuit) priključak
paralelni priključak
interna i eksterna 1-Wire sabirnica
sat stvarnog vremena (Real Time Clock)
JDK 1.1 (Java Development Kit) API (Application Program Interface) i firmware (operativni sustav) koji omogućuje višezadaćni, višenitni TINI operativni sustav s punom podrškom za TCP/IP, garbage collection, serijsku vezu, PPP (Point to Point Protocol) i drugo
sučelje koje omogućuje pristup hardverskim sredstvima korištenjem asemblerskog jezika
slush - sistemska ljuska koja daje UNIX-oliko sučelje s TTY, Telnet i FTP serverima
Za rad TINI pločice nužno je dovesti vanjsko napajanje od 5V+/-5%. TINI je, nakon instaliranja osnovnog softvera, spreman za spajanje na Internet, a vrlo je jednostavno uključiti niz senzora i dobivene proslijediti na obradu lokalnom programu ili na Internet.
Hardver TINI-a
Na slici 5. dan je shematski prikaz hardverske arhitekture.
Slika 5. TINI hardverska arhitektura
Osnovna tri čipa čine DS80C390 procesor, 512 Kb Flash ROM u kojem se nalazi firmware i Ethernet kontroler. TINI pločica je zapravo Java računalo koje implementira Java VM (Virtual Machine) Java API verzija 1.1, sukladno SUN Embedded Java platformi tvrtke Sun Microsystems.
390 Procesor
Procesor je optimiziran za Java okružje (Java enviroment), podržava 24-bitno adresiranje, 32 bitnu matematičku jedinicu, brzine veće od 60 MHz i druge mogućnosti koje donosi Java okružje. Najbliži prethodnik je 8051 od koga je brži otprilike 2.5 puta jer obavlja osnovne operacije u 4 umjesto 12 strojnih ciklusa. Bitna je razlika i u tome što ima integrirane CAN kontrolere, dva serijska ulaza/izlaza i više vanjskih prekida (external interrupts).
CAN Bus Controller
Dva ugrađena kontrolera mogu raditi na na dvije odvojene sabirnice različitim brzinama. Svaki ima registre za primanje i slanje po 15 poruka dužina od 11 do 29 bita.
ROM
TINI-eva ROM memorija je podijeljena na 8 banaka veličine 64k svaka. Nulta (tj. početna) banka u sebi sadrži program (bootstrap loader) za učitavanje inicijalizacijskog niza. Banke od 1 do 6 sadrže Java API i TINI firmware. Banka 7 sadrži korisnikov program koji će se izvršiti prilikom uključivanja sustava. Tu se npr. smjesti korisnička ljuska Slush koja daje sistemske alate kao i FTP i Telnet servise.
Softver TINI-a
Slika 6. TINI softverska arhitektura
TINI softver se može prema slici 6. podijeliti na :
- izvršni kod u Flash ROM-u (operativi sustav, TCP/IP stog , Java VM, API paketi)
- mrežni protokoli višeg nivoa (FTP, Telnet, DHCP)
- Java, odnosno TINI izvršne datoteke i
- softver za razvoj aplikacija koji se nalazi na osobnom računalu.
Razvojni softver je Java Development Kit s dodatnim paketima napisanim od strane tvtke Dallas Semiconductor i drugim javno dostupnim paketima. Važno je napomenuti da je gotovo cjelokupan postojeći softver napisan u Java programskom jeziku. Razvojne platforme su dostupne ne samo za Windows nego i za druge platforme (Linux, Mac, Solaris) koje imaju Java Development Kit i komunikaciju putem standarne serijske RS-232 veze.
Slush - naredbena linija i sučelje operativnog sustava
TINI, nakon uspješne instalacije, omogućuje komandnu liniju, slush, sličnu UNIX sustavima. Slush se starta tijekom inicijalizacije sustava, i kreira programsku nit koja održava server i prima nadolazeće zahtijeve FTP i Telne klijenata s Interneta. Kada se koristi bez mrežnog kontrolera, pristup je omogućen korišenjem standardnog terminalnog TTY prijavljivanja (login). Slush troši vrlo malo procesorskog vremena, a nakon uspješnog logiranja administratora ili korisnika, omogućuje servise kao što su održavanje sustava, nadogradnja, pokretanje i zaustavljanje programa. Moguće je proširiti funkcionalnost postojeće komandne linije dodavanjem novih korisničkih naredbi.
Sistemske datoteke
Slush kreira nekoliko sistemskih datoteka koje smješta u etc direktorij: .tininet, .startup, i .passwd. U datoteci .tininet nalazi se ime lokalnog računala (hostname) i ime lokalne domene (domain name). U datoteci .passwd se nalazi korisničko ime računa (login), kriptirana lozinka (password) i korisnički ID broj. Slush uspostavi u početku dva korisnička računa:
korisnik root za administratora
korisnik guest za ostale korisnike
koji se mogu mijenjati. Kako se radi o Java VM, TINI OS razlikuje mala i velika slova. Administrator može u datoteku /etc/.startup upisati naredbu koja će se izvršiti prilikom inicijalizacije sustava. Programi će se izvršavati kao da su pokrenuti iz komandne linije osim što će se odvijati u pozadinskom procesu (background).
Kad se počne izvoditi slush, pritiskom na tipku '5' (na telnet terminalu s kojeg pristupamo TINI-u) preskače se .startup datoteka i pokreće Serial Server. Slush je postavljen tako da koristi port serial0 na 115200 bita. Te i druge postavke mogu se izmijeniti u izvornom kodu Slush.java koji onda treba ponovo prevesti - kompilirati.
Serijski server
Serijski server, odnosno serijski servis, omogućuje TTY login, tj standardni terminalni pristup. U početnom (root) direktoriju može se kreirati home direktorij. Ako je napravljen, onda se po logiranju korisnik nalazi u njemu, inače je u početnom. Korisnik može u home direktoriju napraviti .login datoteku iz koje će se izvršavati upisane naredbe kao da ih je korisnik upisao u komandnoj liniji.
Telnet server
Telnet server, ili Telnet servis, "sluša" na portu 23 zahtjeve za spajanjem i započinje potrebne procedure za svaki pojedini zahtjev. Neke opcije se mogu mijenjati naredbama za postavljanje varijabli okružja (environment variables) kao u sljedećim primjerima:
setenv TELNET_ALLOW_ROOT [true/false] - dozvoljava ili ne login administratoru
setenv HISTORY [size] - postavlja veličinu naredbenog bufera
setenv TELNET_TIMEOUT [Number of ms] - zatvaranje telenet veze nakon number milisekundi
setenv TELNET_WELCOME [file] - pozdravna poruka
setenv BROADCASTS [true/false] - dozvoljava ili ne obavijesti
Ove varijable imaju efekte nakon ponovnog pokretanja servera.
FTP Server
FTP Server, ili FTP servis, "sluša" na portu 21 zahtjeve za spajanjem i započinje potrebne procedure. Također je moguće mijenjati opcije servera kao u sljedećim primjerima:
setenv FTP_ALLOW_ROOT [true/false] - dozvoljava ili ne login administratoru
setenv FTP_TIMEOUT [Number of ms] - postavlja vrijeme isteka rada ukoliko je server neaktivan. 0 označava beskonačno. Početna vrijednost je beskonačno.
setenv FTP_ALLOW_ANON [true/false] - dozvoljava ili ne anoniman login
setenv FTP_LOG_ANON [file] - log datoteka za anoniman login
setenv FTP_WELCOME [file] - pozdravna poruka
setenv FTP_CONNECT [file] - pozdravna poruka nakon spajanja
Ove varijable imaju efekte nakon ponovnog pokretanja servera.
Naredbe u naredbenoj liniji
Slush ima nekoliko naredbi ugrađenih u osnovnoj distribuciji softvera. Mogu se dodavati nove ili brisati postojeće tako da se editira Slush.java datoteka prije prevođenja u bajt kod. Dinamičko dodavanje i oduzimanje naredbi bit će implementirano u budućim verzijama. Za pomoć se može u svakom trenutku upisati help ili help ime_naredbe. Slush ima mogućnosti prosljeđivanja (redirect) standardnog ulaza i izlaza pomoću '<' i '>' oznaka. Oznaka '>&' definira prosljeđivanje standardnog izlaza i grešaka (stdout i stderr) prema lokalnoj datoteci. Karakter '&' se koristi za pokretanje Java programa u pozadini, dok slush naredbe ne mogu raditi u pozadini. Standardni izlaz se može prosljediti u null datoteku (virtualna datoteka koja ne zauzima memoriju) ili na serijski izlaz:
java MyProg.tini > null
java MyProg.tini > S0
S0 je oznaka za serial0, tj. prvi serijski izlaz na kojemu se ovo jedino i može izvesti. Za ovo je potrebno imati i administratorske privilegije i ne koristiti istovremeno serijski server.
Primjeri pokretanja programa:
java MyProg.tini < file.in >& file.out &
java MyProg.tini &
ls > 50
TINI OS
Sam TINI OS (operativni sustav u travnju 2001. verzija 1.02) omogućuje servise kao što su pokretanje programa prilikom inicijalizacije sustava ili u neko određeno vrijeme (task scheduling), datotečni sustav (file system), upravljanjem memorijom i izlazno/ulaznim sredstvima. Kako TINI OS realizira Java VM, sposoban je izvršavati nekoliko Java programa, odnosno procesa istovremeno. S izuzetkom garbage collectora (programska nit niskog prioriteta koja oslobođa RAM memoriju od procesa i objekata koji više nisu potrebni), svi procesi su Java programi koji imaju jednakopravni pristup procesorskom vremenu od 4 ms. To omogućuje TINI-u izvođenje i kompleksnih programa u okviru memorijskih izvora.
Java je viši programski jezik, sličan po sintaksi C++ i C-u, objektno orijentiran. Platformski je neovisan. Izvorni kod (.java) prevede u tzv. bajt kod (.class) koji je onda spreman za izvršavanje na Java računalu, tj. računalu koji ima Java okružje (Runtime enviroment). Međutim, da bi se dobivena izvršna datoteka pripremila za izvođenje na TINI-u, potrebno ju je dodatnim paketima koji se pozivaju, povezati u jednu .tini datoteku, što se radi uz pomoć softvera priloženog s TINI OS-om.
Trenutno verzija TINI OS-a i sama ploča ne podržavaju sve Java API mogućnosti, a ovdje je popis nekih važnijih:
- TINI ne dozvoljava više od 24 spajanja putem socketa
- TINI ne podržava serijalizaciju (svojstvo Java objekata)
- maksimalna veličina bilo kojeg polja ili (native) modula ne može preći 64k
- maksimalan broj procesa je 8, sa 16 programskih niti (threads) po procesu. Prilikom inicijalizacije sustava (boot) jedan proces zauzima garbage collector, a drugi je slush koji je ujedno prvi Java program koji se starta u Java VM
- postoji limit od 64 mjesta (stack cell) u memoriji za lokalne varijable. 32 bitne varijable (kao što su int, char, byte ) zauzimaju jedno mjesto u memoriji, a 64 bitne (long, double) uzimaju 2 mjesta
- class datoteka (kompilirani Java program) može imati maksimalno 255 statičnih varijabli (static field) i 255 ostalih varijabli (method field) uključujući i sva naslijeđena polja od vršnih klasa (superclasses)
- sve programske niti imaju isti prioritet i jednako procesorsko vrijeme na raspolaganju. Tako Thread.setPriority() metoda neće izazvati pogrešku, ali neće ni promjeniti prioritet
- izvršna datoteka (class file) može imati maksimalno 127 metoda uključujući metode od vršnih klasa i 255 sistemskih metoda (native methods)
- samo jedna locale varijabla je podržana, dok se druge implementiraju u Java programima
- PPP trenutno ne podržava višestruka sučelja
- direktoriji mogu sadržavati samo 254 datoteke, a pokušaj upisivanja više vraća IOException grešku
- ime pojedine datoteke može biti maksimalno dugačko 247 znakova
Mogućnosti primjene TINI-a
U kratkom vremenu razvijene su neke primjene TINI-a koje su pokazale lakoću spajanja različitih sustava na Internet. Većina primjera radi u stvarnom vremenu (real time) i dolaze s dokumentacijom i izvornim kodom:
- primjeri Web Servera koji prate
senzore koji mjere promjene fizičkih veličina u okolini (Environmental sensors) kao što su:
- termometri koji prate promjene temperature u kući
- termometri koji prate promjene temperature u tvornici sireva
- promjena položaja nekih predmeta, npr. vrata i prozora
- promjena napona baterija ili padovi napona u pojedinim sustavima
mreže za transport roba i energije koji uključuju
- temperaturno mjerenje površine puteva
- brojanje prolaska vozila
- upravljanje porukama i oznakama
- automatizirane postaje za mjerenje težine
digitalne slike
- prilagodnici za ulazno/izlana sučelja (Port Adapters)
prilagodnici za različita sučelja:
- Ethernet na RS-232
- Ethernet na 1-Wire
- CBus prema drugim (ne 1-Wire) mežama
- Ethernet na CAN
- TINI kao Java kontroler u automatizaciji