Betriebssystemtechnik (OSE) - SS 2007
AO-Stubs Betriebsystem
Import in Eclipse
Die Dateien des AO-Stubs Betriebssystems liegen im SVN Repository
https://www4.informatik.uni-erlangen.de:8088/i4ose/ose-2007.
Diese URL kann der Repository-Liste von Eclipse hinzugfügt werden,
wie es im Folgenden beschrieben ist (ihr könnt svn natürlich auch weiterhin über die Kommandozeile verwenden):
- Konfiguriert das SVN Plugin so, wie es auf der Tools-Seite beschrieben wird.
- Öffnet die SVN Perspektive
- Wählt im Repository-Browser (linker Rand) [rechte Maus]->"New"->"Repository Location..."
- Textfeld "URL" :
https://www4.informatik.uni-erlangen.de:8088/i4ose/ose-2007
- Textfeld "User" : Benutzernamen
- Dialog schließen
-
Im Repository-Browser wählt ihr nun das Verzeichnis
trunk/aose des ose-2007 Repository aus und
betätigt [rechteMaus]->"Check out as Project"
- Eclipse beenden.
- Das Shell-Skript
after-first-checkout.sh aufrufen.
Einrichtung des Projekts
Ist das Projekt erfolgreich importiert, müssen noch einige Einstellungen vorgenommen werden,
die leider nicht zusammen mit den Projektinformationen gesichert werden:
- Öffne Dialogfenster "Project"->"Properties" des AO-Stubs Projekts
- Wechsle zur Ansicht "C/C++ Make Projekt"
- Die Registerzunge "AspectC++ Make" auswählen
- Textfeld "Repository file" :
<absolute path to workspace>/aose/config/os/ac.repo
Hinweis: Die Datei ac.repo wird
beim ersten Übersetzen generiert. Vorher funktioniert die Auswahl mittels "Browse" logischerweise nicht. Manuell kann aber auch ein Pfad zu einer
nicht-existierenden Datei angegeben werden.
- Textfeld "new prefix to be set" :
config/os
Tipp: Um eine Übersicht der Make Targets zu bekommen, öffnet in eurer
Perspektive die "Make Targets" Ansicht. Darin findet ihr --nach der
Konfigurierung-- unter config/os eine Übersicht. make help gibt außerdem eine kleine Hilfe aus.
Hinweis: Damit ihr das Projekt verwenden könnt, muss die pure::variants Lizenz installiert sein, wie auf der Tools-Seite beschrieben. Die Installation der Lizenz muss einmalig für jeden Benutzer durchgeführt werden.
Struktur
Unterhalb des Wurzelverzeichnisses existieren folgende Unterverzeichnisse:
config |
Familien-Modell. Außerden landen hier die konfigurierten Quelldateien |
model |
Feature- und Komponenten-Modelle aller Subdomänen |
os |
Quelldateien des Betriebssystems |
|
base |
Startup Code, Linker section file |
|
com |
Kommunikation (D5) |
|
debug |
Debugging und Monitoring mit AspectC++ (D7) |
|
devices |
Gerätetreiber (D2) |
|
guard |
Unterbrechungsbehanlung und Kernsychronisation (D4) |
|
make |
Makefiles und Scripts der Build-Umgebung |
|
mem |
Speicherverwaltung (D1) |
|
object |
Utility-Klassen, wie einfache Container und Streams (D6) |
|
thread |
Fadenverwaltung und Synchronisation (D3) |
|
pv_examples |
Ein Dummy-Subsystem, mit dem verschiedene Fähigkeiten von pure::variants demonstriert werden: Generierung von Flags mit Werten, etc.
Einfach mal anschauen und ggfs. benötigte Elemente mit Copy&Paste in das eigene Featuremodell / Familienmodell kopieren. |
|
Die Verzeichnissen mit einer Domänenangabe "gehören" ab jetzt den jeweiligen Gruppen, d.h. diese sind dafür verantwortlich. Alle anderen
Verzeichnise (insbesondere base) "gehören" jedoch allen, hier müsst ihr euch bei Änderungen einigen.
Konfigurierung
Um AO-Stubs zu konfigurieren, müsst ihr das Familien Modell
config/config.vdm öffnen, die gewünschten Merkmale
selektieren und abschließend diese Konfiguration mittels des
"Transform Model" Knopfes auswerten. Dieser Vorgang generiert
unter config das Verzeichnis os, in dem
nun die konfigurierten Quelldateien zu finden sind. Eventuell
ist dieses Verzeichnis erst nach einem "Refresh" der Navigatoransicht
zu sehen.
Übersetzen
Ist das Betriebssystem konfiguriert, kann es anschließend im Verzeichnis
config/os übersetzt werden. Dies kann entweder aus Eclipse
heraus geschehen oder durch einen make Aufruf in diesem
Verzeichnis. Alle wichtigen Make Targets und relevanten Umgebungsvariablen
erhält man durch das make help Kommando.
Simulieren und Debuggen von Testprogrammen
Um ein Testprogramm zu übersetzen, muss man innerhalb des Verzeichnisses
config/os einen make Aufruf starten der als Target
den Pfad zum Testprogramm übergeben bekommt. Zum Beispiel:
make test/com/t_serial_stream
Um den Simulator mit einem Testprogramm zu starten, wird bei einem
make Aufruf an den Namen des Testprogramms die Dateiendung
.sim angehängt. Zum Beispiel: make
test/com/t_serial_stream.sim
Die Ausgabe der "seriellen Schnittstelle" des RXCSimulators, kann man mit dem
Programm simSendRecv.sh aus dem /proj/i4ose/tools/bin
Verzeichniss verfolgen. Damit können auch Zeichen an die "serielle
Schnittstelle" übertragen werden.
Möchte man ein Testprogramm debuggen ruft man make
<testprogramm>.gdb auf, wenn man den GNU Debugger verwenden will
oder make <testprogramm>.ddd um den Data Display Debugger zu
starten.
Überspielen (Download) von Testprogrammen auf den RCX
Das Überspielen eines Testprogramms auf den RCX Baustein erfolgt durch den
Aufruf make <testprogramm>.rcx . Damit der Transfer
ordungsgemäß funktioniert, muss sich der RCX Baustein im
Ausgangszustand befinden und eingeschaltet sein. Der Ausgangszustand kann durch
ein Softwarereset oder durch die Entnahme einer Batterie wieder hergestellt
werden.
Nach dem Start des des Testprogramms, kann man mit dem terminal Programm (in
/proj/i4ose/tools/bin) Zeichen vom RCX Baustein empfangen oder
dorthin senden.
Reduzierung der Turn-Around-Zeiten mit make editmode
Achtet bei der Entwicklung darauf, ob ihr auf dem Original oder auf dem konfigurierten Quellbaum (unter config/os) arbeitet.
Änderungen im konfigurierten Quellbaum sind normalerweise nach der nächsten Konfigurierung verloren. Das kann unter Umständen erwünscht sein
("quick hacks") ist es im allgemeinen aber nicht.
Da es insbesondere bei der aktiven Entwicklung nervig werden kann, wenn man nach jeder kleinen Änderung erst einmal wieder konfigurieren
muss, gibt es das spezielle make target editmode. Dadurch werden alle Dateien unter config/os, die während der
Transformation aus dem Quellbaum kopiert oder umbenannt wurden, ersetzt durch Links auf ihre Originale. Änderungen in der konfigurierten Variante
wirken sich also direkt auf das Original aus. (Das funktioniert natürlich nur mit Dateien, für die es ein Original gibt. Also nicht bei "echt
generierten" Dateien, wie z.B. die Header-Files für "class aliases" oder Flags.)