Betriebssystemtechnik (OSE) - SS 2003
Aufgabe 4: Subsystemimplementierung
In dieser Aufgabe soll die Implementierung der Programmfamilie
durchgeführt werden.
| Ausgabetermin |
Vorgabe |
(spätester) Abgabetermin |
| 10.06.2003 |
-- |
30.06.2003 |
Bearbeitung und Abgabe
Die Bearbeitung erfolgt wieder in der Gruppe. Bis zum o.g. Datum ist
die Implementierung eures jeweiligen Subsystems und einer Reihe von
Testprogrammen abzuschließen. Funktionstüchtige
Zwischenstände sind umgehend einzuchecken.
Im Rahmen der Tafelübungen werde ich jede Gruppe nach dem
aktuellen Stand der Entwicklung befragen. Auch kurze Demonstrationen
sind denkbar.
Entwicklungsumgebung
Anders als bisher wird euer Code nun für die Zielplattform
übersetzt. Dies geschieht in mehreren Schritten:
- AspectC++ transformiert den Code und fügt dabei Debugging-
und Monitoringoperationen ein.
- SOSP zerlegt den Code, um "Function-Level Linking" zu
realisieren.
- Ein Cross-Compiler (g++ für Hitachi H8) erzeugt den Code
für die RCX Plattform.
Vor der Übersetzung muss das OSE System jedoch konfiguriert
werden. Dazu reicht wie bisher ein make im ose-X
Verzeichnis. Daraufhin startet consulat, wo ihr
nach dem Auswählen der gewünschten Features 'Edit/Generate'
ausführen müsst.
Nach dem Konfigurieren kann consulat verlassen
werden. Das Erstellen des Systems als Bibliothek erfolgt dann durch
make lib. Sofern alles gut geht, landet die fertige
Bibliothek in ose-X/compile/libose.a.
Wichtig ist, dass eure Dateien
die Endung .h (Header-Dateien), .cc (C++ Funktionsimplementierungen),
.ah (Aspekt-Header-Dateien), .s oder .S (Assemblerdateien) haben.
Testprogramme
Für jede Arbeitsgruppe wurde ein Verzeichnis
ose-X/tst/Subsystemname eingerichtet (am besten einfach den
kompletten Baum nochmal auschecken). Dort sollen die
Testprogramme für das jeweilige Subsystem abgelegt
werden. Außderdem soll für jedes Testprogramm eine
Feature-Liste (Testprog.feat) eingecheckt werden.
Unter ose-X/tst/init/empty.cc und empty-X.feat liegt ein leeres
Testprogramm, dass sich übersetzen, binden und ausführen
lässt. Dazu sind folgende Schritte durchzuführen:
- cd ose-X
- cp tst/init/empty-X.feat ose.feat
- make + Edit/Generate + File/Exit
- make lib
- make tst/init/empty.sim
Die letzte Anweisung übersetzt das Testprogramm, bindet es mit
der OSE-Bibliothek und startet den RCX-Simulator. Der Simulator kennt
die Option "--help". Die Pfade sind dem Makefile zu entnehmen. Weitere
Flags für den Simulatoraufruf können dem Makefile in der
Umgebungsvariablen RCXFLAGS übergeben werden. Auch das Debuggen
mit dem Cross-gdb unter /proj/i4vs/pub/cross-gdb-5.2.1 ist möglich.
(Option -gdb)
Mit make tst/init/empty.coff kann man sich das gebundene
Testprogramm erstellen lassen, ohne den Simulator zu starten. Mit
Hilfe der Werkzeuge unter /proj/i4vs/pub/cross-gcc-3.2.2 kann der Code
dann zum Beispiel disassembliert werden.
Init u. Platform Features
Die Platform-Unterstützung beschränkt sich noch auf das
Minimum. Daher müssen die Features ...
- platform_RCS
- platform_Hitachi_H8
- platform_GNU_C++
... immer gewählt werden.
In der Domäne 'init' muss
'init_RunMain' gewählt werden, da das Laden von Anwendungen noch
lange nicht unterstützt wird. Achtung: die Konstruktoren und
Destruktoren globaler Objekte werden noch nicht
ausgeführt. Dieses Feature wird aber demnächst realisiert
(siehe sys/init/README).
Wann geht es auf die 'echte' Hardware?
Sorry, es hat sich alles etwas verzögert. Ich werde die
notwendigen Treiber und Tools, die nötig sind, um die Programme
auf die Lego-Roboter zu laden, im Laufe dieser Woche installieren. In
der Übung am 17.6. bekommt ihr dann alle notwendigen Hinweise.
Ein letzter Hinweis
Wie wir gesehen haben, gibt es starke Abhängigkeiten zwischen den
Gruppen. Seid daher rücksichtsvoll und checkt nichts ein, was
nicht funktioniert. Das gilt insbesondere dann, wenn es sich um Dinge
handelt, die an sehr wichtige oder obligatorische Features
geknüpft sind. Sollte einer anderen Gruppe ein Fehler unterlaufen
sein oder liefert sie nicht, was von ihr erwartet wird, setzt euch
möglichst schnell mit den Gruppenmitgliedern in Verbindung.