RTSYST Opdracht 1: Inleiding QNX.

© Harry Broeders.

Inleiding QNX.

In dit practicum maken we gebruik van het real-time OS QNX Neutrino. Dit real-time OS is speciaal ontworpen om gebruikt te worden voor embedded systemen. Wij draaien QNX op het practicum op een virtuele machine van VMware, de VMware Player, gewoon op PC's (lekker goedkoop) maar je moet je voorstellen dat de ontwikkelde software uiteindelijk als een embedded applicatie moet draaien. QNX Neutrino en de bijbehorende ontwikkelomgeving QNX Momentics zijn gratis te downloaden en ook thuis prima te gebruiken. Ik raad je sterk aan om zelf ook thuis met QNX aan de slag te gaan!

Let op: QNX is niet meer echt real-time als we QNX op een virtuele machine draaien. De volgorde waarin de QNX processen worden uitgevoerd is echter nog wel deterministich (voorspelbaar).

QNX is IEEE POSIX 1003.1 compatible. IEEE POSIX 1003.1 is een standaard voor UNIX systemen. Bijna alles wat je leert over QNX kun je dus ook toepassen op Linux of elk ander UNIX systeem. QNX implementeert ook de real-time faciliteiten uit de IEEE POSIX 1003.1 standaard, de meeste andere UNIX systemen (inclusief Linux) implementeren deze real-time faciliteiten niet. Er zijn wel enkele real-time versies van Linux beschikbaar maar ook deze zijn (tenminste degene die bij mij bekend zijn) niet POSIX compatible. Een ander bekend POSIX compatible RTOS is VxWorks.

In lokaal D1.049 is op elke PC de VMware player met een QNX Neutrino image beschikbaar. Alle files die je daar opslaat blijven echter niet bewaard! Je kunt je files opslaan op een USB memory stick of op je mail.

Doordat QNX POSIX compatible is kun je alle gebruikelijke Linux commando's gebruiken. Een goede inleiding in het gebruik van UNIX (= Linux = QNX) kun je vinden op: http://www.cs.duke.edu/csl/docs/unix_course/intro-1.html. Je kunt onder QNX meerdere virtuele terminals openen. In een terminal window:

Opdracht 1a.

Start de VMware player in lokaal D1.049 en start de QNX 6.3.2 image. Als je deze image voor het eerst start kun je inloggen als root. Daarna moet je het commando ph intypen om de grafische schil op te starten.

Start Firefox (knop rechtsboven) en open deze handleiding.

Open een terminal (knop rechts) en probeer een paar van de bekende Linux commando's zoals pwd, who am i, enz. Maak indien nodig gebruik van de helpfiles. Maak een directory rtsyst met daarin een file hallo.txt met de tekst Hallo:

mkdir rtsyst
cd rtsyst
echo "Hallo" >hallo.txt
ls
cat hallo.txt
cd ..
ls

Je kunt bestanden die je wilt bewaren ook op je eigen USB memory stick opslaan. De image moet echter eerst (eenmalig) zodanig ingesteld worden dat USB apparaten, inclusief memory sticks, automatisch worden herkend door QNX. Als het goed is, dan is dit in 1.049 al gedaan! Zo niet dan gaat dit als volgt:

  • Power off de virtual machine. In de VMware balk: Virtual Machine > Power > Power Off
  • Kies in de VMware balk: Virtual Machine > Virtual Machine Settings...
  • Klik op de Add... knop.
  • Selecteer de USB Controller. Klik op Next >
  • Zet een vinkje bij "Enable high-speed support for USB 2.0 devices", laat het andere vinkje staan en klik op Finish
  • Klik Ok en start de QNX image weer op.
  • Kies in de VMware balk: Virtual Machine > Removable Devices, zoek de stick en klik op Connect (disconnect from host)


    -
  • Start de File Manager (knop rechts).
  • Ga vanuit de root een map omhoog en kies daarna fs. De USB stick moet er nu tussen staan. De naam van de USB stick is bijvoorbeeld: hd10-dos-1

Je kunt nu in een keer dit directory naar je USB stick kopiëren met het cp commando:

cp -r rtsyst /fs/hd10-dos-1/

Voor hd10-dos-1 moet je uiteraard de naam van de USB stick, die je in de File Manager hebt gevonden, invullen.

Verwijder nu het rtsyst directory en zet daarna de files die je op je USB stick hebt opgeslagen weer terug:

rm -r rtsyst
ls
cp -r /fs/hd10-dos-1/rtsyst .
ls
cat rtsyst/hallo.txt

Aan het eind van elk practicum moet je dus zelf je files opslaan en aan het begin van het volgende practicum kun je die files dan weer terugzetten. Omdat je het commando cp -r gebruikt worden ook alle subdirectories meegekopieerd (deep copy).

Tip: QNX kent net zoals Windows en Linux "command completion" (commado's en filenames worden automatisch afgemaakt) alleen gebruikt QNX hiervoor niet de TAB toets maar de ESC toets.

QNX heeft ook veel grafische programma's waaronder een File Manager. Deze programma's kun je via de Launch button (waarschijnlijk heeft Microsoft de Start geregistreerd ;-) of via de rechter knoppenbalk opstarten. Enkele handige sneltoetsen:

Je kunt in QNX software ontwikkelen in C/C++ op verschillende manieren:

Als je ervaring hebt met vi en het prettig vindt om command line tools te gebruiken dan raad ik je aan om vi te gebruiken. Als je ervaring hebt met Eclipse dan raad ik je aan om Momentics te gebruiken. Een korte handleiding voor het gebruik van Momentics kun je hier vinden. Als je geen ervaring hebt met vi of Eclipse dan raad ik je aan om Workspace te gesbruiken.

Het Workspace programma bestaat uit een code editor, html browser en een koppeling met sh, make, gdb en ctags. De kleuren moet je even aan wennen (of aanpassen via Edit, Preferences menu). Tips bij het gebruik van Workspace:

Opdracht 1a (vervolg).

Schrijf een klein C of C++ programma met behulp van Momentics, vi, of Workspace. Een ANSI C programma moet de extensie ".c" krijgen en een ANSI C++ programma de extensie ".cpp". Compileer het programma en voer het uit.

Opdracht 1b.

Download het in de theorie behandelde programma voor het aanmaken van threads in POSIX met parameteroverdracht: pthread.c met de bijbehorende makefile. Laad dit programma in Momentics of Workspace en test het programma. Voeg nu nog een thread toe aan dit programma. Deze thread moet 40x telkens na 5 ms de boodschap "Hallo\n" op het scherm zetten. Pas het programma zodanig aan dat alle 3 de threads dezelfde code (functie) gebruiken.

QNX afsluiten en opstarten.

Het is belangrijk om QNX na afloop netjes af te sluiten. Kies in QNX voor Lauch -> Log Out -> Shut Down. In VMWare Player (na Ctrl+Alt) kan je nu de virtuele machine uitzetten d.m.v. VM -> power -> Power Off. Wanneer je de volgende keer de image opent zal QNX booten. Bij Login vul je "root" in. Een paswoord is niet nodig. Toets daarna "ph" in voor de grafische user interface (photon).

Verder met opdracht 2...