RTSYST Opdracht 1: Inleiding QNX.
© Harry Broeders. Laatste wijziging: 11 mei 2014
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:
- Kun je commando's uitvoeren.
- Kun je help aanroepen door Ctrl+Alt+H. Erg handig! QNX
kent het bekende UNIX
man (manual) commando echter niet (wel
een vergelijkbaar commando use).
- Kun je ook een pop-up menu gebruiken (links klikken op de muis).
- Is de sneltoets voor copy Ctrl+Alt+C omdat Ctrl+C gebruikt wordt om een
programma af te breken (zoals gebruikelijk in Unix). De sneltoets voor
paste is Ctrl+Alt+V. Ctrl+V laat de versie nummer van het shell programma
zien. In alle andere applicaties is copy "gewoon" Ctrl+C en paste
"gewoon" Ctrl+V.
- Kun je scrollen met Ctrl+Alt+pijltje (omhoog of omlaag).
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:
- Alt+Tab, Alt+F4: idem als Windows.
- Alt+F9: minimize window.
- Alt+F10: maximize window.
- Alt+Space: open window menu.
Je kunt in QNX software ontwikkelen in C/C++ op verschillende manieren:
- Met behulp van standaard UNIX/Linux command line tools zoals
vi en gcc/g++.
- Met behulp van de ontwikkelomgeving van QNX genaamd Momentics. Deze IDE
(Integrated Development Environment) is gebaseerd op Eclipse.
- Met behulp van de eenvoudige IDE genaamd Workspace.
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:
- Je kunt in een edit window help aanroepen door tekst te selecteren en
daarna op Ctrl+Alt+H te drukken. Erg handig!
- Je moet voordat je op de Make knop drukt eerst de file saven! Anders zit
je nog steeds de oude versie te compileren. Erg onhandig! Gebruik
voordat je gaat compileren dus altijd Ctrl+Shift+S (Save All).
- Vermijd spaties in het pad naar de file. Workspace werkt
niet goed als er spaties in het pad staan.
Dus /root/rtsyst/opdracht1/test.c werkt prima maar
/root/rtsyst/opdracht 1/test.c niet.
- Handige functietoetsen:
F1: editor window
Ctrl+F1: open nieuw editor window
F2: browser window
Ctrl+F2: open nieuw browser window
F3: open terminal window
Ctrl+F3: open nieuw terminal window
F11: open make window
F12: open gdb window
Ctrl + Shift + M: make
Ctrl + L: hide/show Left pane
Ctrl + B: hide/show Buttom pane
Alt + pijltje naar rechts: volgende edit/browser/terminal venster
Alt + pijltje naar links: vorige edit/browser/terminal venster
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...