Operační systém RTEMS na systému GRLIB / LEON 3
Autor: Ing. Karel Dudáček kancelář: UL-404 e-mail:
[email protected] tel.: 2486 1
Obsah Operační systém RTEMS na systému GRLIB / LEON 3 Obsah....................................................................................................................................................2 1. Úvod.................................................................................................................................................3 2. Zadání...............................................................................................................................................4 3. Stručný popis GRLIB, RTEMS........................................................................................................5 4. Instalace vývojových prostředků......................................................................................................6 5. Konfigurace systému s procesorem LEON 3...................................................................................7 6. Stručný úvod do operačního systému RTEMS................................................................................8 7. Ukázkové programy.........................................................................................................................9 Jednoduchá aplikace........................................................................................................................9 SD karta a HTTP server...................................................................................................................9 Jednoduchý driver pro framebuffer (tvorba driveru).....................................................................11 8. Závěr...............................................................................................................................................12 9. Odkazy............................................................................................................................................13
2
1.
Úvod
V současnosti jsou vyvíjeny stále komplexnější zařízení. Pro zařízení je ovšem nutné vyvinout také jejich programové vybavení, což mnohdy bývá náročnější než samotný vývoj zařízení. Proto je velkou výhodou pro vývojáře pokud může použít již hotový a otestovaný operační systém a jen jej nakonfigurovat a doplnit specifické části. Jedním z takových operačních systémů je operační systém RTEMS.
3
2.
Zadání
Ověřte možnosti použití os RTEMS na systému s procesorem SPARC / LEON3 se zřetelem na komunikaci po síti.
4
3.
Stručný popis GRLIB, RTEMS...
Knihovna GRLIB je knihovna syntetizovatelných IP jader od firmy Aeroflex Gaisler určená pro tvorbu mikroprocesorových systémů na čipu. Knihovna obsahuje implementaci procesoru LEON, sběrnice AMBA a PCI, paměťových řadičů (včetně DDR2) a mnoha pokročilých periferií, například UART, 100Mb ethernet, VGA řadič, řadič CAN.... Knihovna GRLIB existuje v omezené verzi pod licencí GNU/GPL a v placené plné verzi a v placené fault-tolerant verzi. GPL verze knihovny neobsahuje procesor LEON 4, floating-point arimetické jednotky, některé sběrnicové jednotky (AHB-AHB bridge, pokročilý AHB-PCI bridge...) a některé pokročilé periferie (řadič USB, gigabitový ethernet, šifrovací jednotku AES, MIL-STD1553...). Fault-tolerant verze knihovny obsahuje procesor a periferie se zvýšenou odolností proti chybám se zabezpečením BCH a Reed-Solomonovými kódy pro použití v leteckém a kosmickém průmyslu. Procesor LEON je implementace procesoru SPARC v8. Procesor LEON existuje ve verzi 2, 3 a 4 a v jejich fault-tolerant odnožích. K systémům s procesorem LEON existuje množství vývojových prostředků a ukázkových konfigurací pro běžné vývojové desky s FPGA. Operační systém RTEMS je real-time operační systém vyvinutý firmou OAR Corporation. Většina operačního systému RTEMS je licencována podle licence GNU/GPL. Operační systém RTEMS je portován pro mnoho procesorů (včetně SPARC – LEON) a podporuje mnoho periferních obvodů (řadiče ATA, SD karty, RTC, sériové paměti flash...) a standardních aplikačních rozhranní (POSIX, BSD sockety...). Firma Aeroflex Gaisler poskytuje drivery pro RTEMS pro mnoho periferií z knihovny GRLIB.
5
4.
Instalace vývojových prostředků
Při vývoji budeme pracovat na počítači s operačním systémem Linux (používal jsem Fedora 16). Pro Windows také existují vývojové prostředky, ale výrobce je příliš nedoporučuje. 1. Nainstalujeme vývojové prostředky pro obvody FPGA (např. Xilinx ISE) a v případě potřeby také jejich simulátor (např. Mentor Graphics ModelSim). 2. Stáhneme knihovnu GRLIB a vývojové prostředky pro procesor SPARC/LEON (překladač, simulátor, debugger GRMON apod.) a nainstalujeme je podle návodu. Veškeré prostředky jsou ke stažení na adrese http://gaisler.com/index.php/downloads .Pro vývoj aplikací pro os RTEMS vybereme z nabídky překladač RCC. Pro LEON existuje též plugin do Eclipse který mi však nefungoval správně. 3. Stáhneme a nainstalujeme zdrojové kódy os RTEMS a podle návodu je nainstalujeme. Zdrojové kódy jsou ke stažení na adrese http://gaisler.com/index.php/downloads . Překladač RCC již obsahuje přeložené jádro os RTEMS, proto zdrojové kódy instalujeme podle návodu k RCC, nikoli podle návodu k os RTEMS (v něch je popsána instalace včetně překladu jádra os). 4. Cestu k překladači nastavíme do cest (PATH) v proměnných operačního systému.
6
5.
Konfigurace systému s procesorem LEON 3
Systém s procesorem LEON nakonfigurujeme podle našich potřeb. Popisovat postup konfigurace systému s procesorem LEON není cílem tohoto dokumentu. Pro použití os RTEMS jsou důležitá pouze následující nastavení: •
Předkompilovaný os RTEMS dodaný s RCC používá pro komunikaci s uživatelem první sériový port na sběrnici (uart0) a proto je nutné mít v systému nejméně jeden sériový port (APBUART). (Ve víceprocesorovém systému je třeba pro každý procesor jeden uart.)
•
Jádro os RTEMS potřebuje pro vlastní potřeby první časovač z IP jádra GPTIMER. Jednotlivé časovače v jádře GPTIMER musí generovat samostatná přerušení (generický parametr sepirq musí být 1).
•
Předkompilovaný os RTEMS je linkován pro uložení v paměti od adresy 0x4000 0000, proto musí být operační paměť namapovéna na tuto adresu (asi je to běžná konfigurace v GRLIB).
7
6.
Stručný úvod do operačního systému RTEMS
Operační systém RTEMS je realtime operační systém s podporou symetrických a asymetrických multiprocesorových systémů. Operační systém pracuje na principu jeden proces, více vláken. Operační systém RTEMS se skládá z několika logických vrstev. Nejnižší vrstvu tvoří vrstva pro podporu hardwaru. Ta se skládá z ovladačů periferií a tzv. BSP (Board Support Package). BSP je část programu, která zajišťuje start zařízení a operačního systému a správné vypnutí zařízení a funkce specifické pro konkrétní zařízení. Druhou vrstvu tvoří jádro operačního systému a podpůrné knihovny obsahující například TCP stack nebo souborový systém. Programátorské rozhranní k operačnímu systému tvoří třetí vrstva označovaná jako API Layer. Ta obsahuje několik programátorských rozhranní pro používání operačního systému. Jedná se o rozhranní Classic C s nadstavbou pro programovací jazyk ADA, rozhranní Itron a rozhranní POSIX. Rozhranní POSIX poskytuje standartní rozhranní operačního systému podle normy POSIX 1003.1, tj. rozhranní velmi podobmé operačnímu systému unix nebo linux. Všechny tři výše uvedené vrstvy jsou dohromady označovány jako exekutiva operačního systému RTEMS (RTEMS executive). Čtvrtou logickou vrstvu systému tvoří uživatelská aplikace využívající operační systém skrze jedno nebo více programátorských rozhranní. Exekutiva operačního systému je přeložena do podoby knihoven, které jsou poté použity při tvorbě uživatelských aplikací. Uživatelské aplikace jsou přeloženy a linkovány s těmito knihovnami do podoby spustitelné aplikace. Ta je poté nahrána do zařízení a spuštěna. Operační systém RTEMS nedisponuje dynamickým nahráváním a spouštěním aplikací a proto musí být aplikace staticky linkována s exekutivou výše uvedeným postupem. Pro procesor SPARC / LEON je firmou Aeroflex Gaisler dodávána již přeložená exekutiva os RTEMS. Konfiguraci mnoha vlastností os RTEMS (včetně přidání vlastních ovladačů periferií, volby souborového systému atd.) je možno provádět pomocí maker v uživatelské aplikaci bez nutnosti překladu jádra. Podrobnosti jsou popsány v příručce „RTEMS C User's Guide“ v kapitole 23 „Configuring a System“. Operační systém RTEMS obsahuje ovladače a knihovny pro různé periferia a periferní obvody, například řadiče ATA, ethernetu, flash paměti a SD karty apod. Podrobnosti jsou popsány v příručce „BSP and Device Driver Developement Guide“. Pro periferie z knihovny GRLIB jsou firmou Aeroflex Gaisler dodávány ovladače včetně podpory plug&play. Tyto ovladače jsou popsány v příručce „Gaisler RTEMS driver documentation“. Pro os RTEMS také existuje jednoduchý shell (bez možnosti spouštět programy, RTEMS nemá dynamické nahrávání a spouštění programů). Dále pro operační systém RTEMS existuje mnoho knihoven a rozšíření, například port grafické knihovny MicroWindows/NanoX, šifrovacích SSL knihoven nebo pravděpodobně též interpret jazyka java (není známo, jestli je plně funkční). Seznam knihoven a rozšíření najdete na http://wiki.rtems.org/wiki/index.php/Main_Page . Vzhledem k tomu, že os RTEMS má programátorské rozhranní podle normy POSIX, je možné na něm po mírných úpravách používat některé programy určené pro operační Unix/Linux, příkladem může být http servermongoose. Seznam aplikací použitelných s os RTEMS najdete na RTEMS wiki [6].
8
7.
Ukázkové programy
Pro systém s procesorem LEON3 jsem vytvořil několik ukázek použití os RTEMS. Některé ukázky jsou odvozeny od ukázek distribuovaných s os RTEMS. Zdrojové kódy všech programů jsou přiloženy k tomuto návodu včetně souboru Makefile pro jejich překlad. Přeložené programy jsou ve formátu ELF. Programy do paměti nahrajeme programem GRMON příkazem load a poté spustíme příkazem run. Před každým spuštěním musí být program znovu nahrán do paměti jinak dojde k chybě.
Jednoduchá aplikace Program rtems-hello je jednoduchý program demonstrující konfiguraci systému a práci s tasky v os RTEMS. Init task (Init) vytvoří (rtems_task_create) a spustí (rtems_task_start) dva tasky (tas1, tas2) a sám se ukončí (rtems_task_delete). Task tas1 vypíše na obrazovku svoje identifikační údaje a usne (rtems_task_suspend). Task tas2 vypíše svoje identifikační údaje, zjistí identifikátor tasku tas1 (rtems_task_ident), probudí jej (rtems_task_resume) a ukončí se. Probuzený task tas1 ukončí exekutivu os RTEMS (rtems_shutdown_executive). Výstup programu: Init: Ahoj, ja jsem task Init Init: Vytvoren task tas1 Init: Vytvoren task tas2 Init: Spusten task tas1 Init: Spusten task tas2 Init: rtems_task_delete(SELF) tas1: Ahoj, ja jsem task tas1, id a010002, argument 123 tas1: Ted usnu tas2: Ahoj, ja jsem task tas2, id a010003, argument 456 tas2: Task tas1 ma id a010002 tas2: Probouzim tas1 tas2: rtems_task_delete(SELF) tas1: Jsem probuzen tas1: Provedu rtems_shutdown_executive()
SD karta a HTTP server Tento ukázkový program demonstruje použití SD karty a http serveru mongoose. Na SD kartě jsou uloženy webové stránky které jsou webovým serverem odesílány klientům. Tyto webové stránky též obsahují formulář pro ovládání led diod na desce. Dále webový server dynamicky generuje stránku zobrazující stav spínačů na desce a podrobnosti o spojení. Použití SD karty Operační systém RTEMS umožňuje práci s SD kartou pouze v SPI režimu (nativní režim nepodporuje, protože jeho specifikace není dostupná bez licenčních poplatků). Pro práci s SD kartou musí být v konfiguraci os RTEMS povolen ovladač SPI řadiče, souborový systém FAT (pokud jej SD karta používá) a generický ovladač blokových zařízení: 9
#define CONFIGURE_DRIVER_AMBAPP_GAISLER_SPICTRL #define CONFIGURE_FILESYSTEM_DOSFS #define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK Dále musí být vytvořeny datové struktury obsahující konfigurační údaje pro ovladač SD karty. Poté je SD karta inicializována a připojena (mount) do souborového systému. Připojená SD karta může být v souborovém systému používána běřným způsobem. HTTP server mongoose Server mongoose je jednoduchý HTTP server pro os Windows a Unix/Linux s podporou SSI a CGI a zabezpečeného (SSL) spojení [4]. Tento http server pracuje jako jeden proces s více vlákny a proto může být po drobných úpravách použit i na os RTEMS. Na os RTEMS ovšem není možno použít všechny možnosti serveru – nelze použít SSI a CGI. (Nešlo by použít třeba staticky linkovaný python? [5] Nerozumím tomu.) Dále není možno použít šifrované SSL spojení které je řešeno přes dynamicky linkované knihovny, což os RTEMS nepodporuje. (Nešel by staticky linkovat s SSL knihovnou OpenSSL [6]?) V konfiguraci systému RTEMS je třeba povolit posixová vlákna a semafory (a samozřejmě síť): #define CONFIGURE_MAXIMUM_POSIX_THREADS 20 #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 20 Server mongoose je již obsažen v distribuci os RTEMS, přesto jej však je třeba ještě mírně upravit. Všechny úpravy se provádí v souboru mongoose.c, soubor mongoose.h zůstává bez změn. •
Mezi makra na začátku souboru přidat (v souboru mongoose.c dodávaným s os RTEMS je již tato úprava provedena): #if defined(__rtems__) #define flockfile(x) #define funlockfile(x) #endif /* __rtems__ */
•
(void) 0 (void) 0
Zakázat použití CGI, SSI a SSL definováním příslušných maker: #define NO_SSL #define NO_SSI #define NO_CGI
•
Zvětšit velikost zásobníku pro vytvářená vlákna (jinak dojde k jeho přetečení). Ve funkci start_thread (začíná na řádce 1366) přidat: (void)pthread_attr_setstacksize(&attr,MONGOOSE_STACK_SIZE)
a vhodně definovat makro MONGOOSE_STACK_SIZE určující velikost zásobníku v bytech. (V ukázce je definováno v souboru mongoose.h !) #define MONGOOSE_STACK_SIZE 40960 Server se spustí funkcí mg_start, funkcí mg_set_option se nastaví jeho vlastnosti (například port, na kterém má server naslouchat, nebo cesta, na které se nachází statické stránky). Pro stránky, které mají být dynamicky generovány se funkcí mg_set_uri_callback nastaví obslužné procedury (může být použita jedna procedura pro více stránek, viz mongoose.h). Pro odesílání dat klientovi slouží funkce mg_printf. Statiské stránky používané ukázkovou aplikací jsou v příloze ve složce „web“. 10
Jednoduchý driver pro framebuffer (tvorba driveru) Operační systém RTEMS umožňuje snadnou tvorbu ovladačů pro různé periferie. Několik uživatelských ovladačů je možno vytvořit bez překladu jádra. S periferiemi se pracuje obdobně jako v os Unix/Linux – pro každou periferii je vytvořen speciální soubor zažízení v souborovém systému. Z pohledu uživatele se poté s periferií pracuje stejně jako s běžným souborem. Při standardních souborových operacích (otevření, zavření, řízení (ioctl), čtení, zápis) nad tímto souborem jsou operačním systémem volány příslušné funkce ovladače. Postup tvorby a použití ovladače je demonstrován na ovladači pro VGA řadič (Gaisler SVGACTRL). Program inicializuje vga řadič a vykreslí na obrazovku osm barevných pruhů. 1. Jsou vytvořeny funkce pro inicializaci, otevření, zavření, řízení (ioctl), čtení a zápis do periferie. Funkce mají prototyp (xxx je název funkce): rtems_device_driver frame_buffer_xxx( rtems_device_major_number major, rtems_device_minor_number minor, void *arg ); U funkcí pro čtení a zápis jsou data předávána v paměti, jejíž adresa je předávána v argumentu arg. Data jsou uložena ve struktuře rtems_libio_rw_args_t která je definována v souboru
. 2. Adresy těchto funkcí jsou uloženy do tabulky. 3. Driver je zaregistrován funkcí rtems_io_register_driver, této funkci je předána výše popsaná tabulka funkcí. Funkce rtems_io_register_driver také zavolá funkci pro inicializaci periferie. 4. Pro zařízení je vytvořen speciální soubor zařízení funkcí rtems_io_register_name. 5. Se souborem zařízení je nyní možné pracovat standartními funkcemi pro práci se soubory (open, read/write, close, ioctl). Pro os RTEMS provozovaný na systémech GRLIB / LEON byl firmou Aeroflex Gaisler vytvořen driver manager umožňující automatické zavedení zvolených ovladačů na základě plug&play informací sběrnice (mimo jiné automatické nalezení adresy registrů periferie). Driver kompatibilní s driver managerem se mi nepovedlo vytvořit (postup tvorby takových driverů je v dokumentaci nedostatečně popsán).
11
8.
Závěr
Bylo prakticky ověřeno, že operační systém RTEMS je na systémech s procesorem LEON snadno použitelný. Os RTEMS poskytuje mnohé z funkcí obvyklých u pokročilých operačních systémů, například plnohodnotné BSD sockety, shell, práce s periferiemi přes souborový systém, má ovšem i své slabiny, například místy nedostatečnou dokumentaci.
12
9. 1. 2. 3. 4. 5. 6.
Odkazy Aeroflex Gaisler: Operační systém RTEMS: RTEMS wiki: HTTP server mongoose: Python pro RTEMS: OpenSSL pro RTEMS:
http://gaisler.com/index.php http://www.rtems.org/ http://wiki.rtems.org/wiki/index.php/Main_Page http://code.google.com/p/mongoose/ http://wiki.rtems.org/wiki/index.php/Python http://wiki.rtems.org/wiki/index.php/OpenSSL
13