Friedrich-Alexander-Universität UnivisSuche FAU-Logo
Techn. Fakultät Willkommen am Department Informatik FAU-Logo
Logo I4
Lehrstuhl für Informatik 4
Betriebssystemtechnik
 
  Vorlesung
    - UnivIS-Infos
    - Inhalt
    - Voraussetzungen
    - Prüfungen
    - Folien
 
  Übungen
    - Inhalt
    - Tipps
       * Teamarbeit mit svn
       * Tools
       * AOStuBS-System
    - Aufgaben
       * A 1
       * A 2
       * A 3
       * A 4
       * A 5
       * A 6
       * A 7
 
  Evaluation
Department Informatik  >  Informatik 4  >  Lehre  >  SS 2008  >  Betriebssystemtechnik  >  Übungen  >  Das AOStuBS-System

Das AOStuBS-System

Import in Eclipse

Die Dateien des AOStuBS-Betriebssystems liegen im SVN-Repository https://www4.informatik.uni-erlangen.de:8088/i4ose/ose-2008. 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).

  1. Die SVN-Perspektive öffnen (Window, Open Perspective, SVN Repository Exploring).
  2. Im Repository-Browser (linker Rand) [rechte Maustaste] -> "New" -> "Repository Location..." wählen.
  3. Textfeld "URL": https://www4.informatik.uni-erlangen.de:8088/i4ose/ose-2008
  4. Textfeld "User": Benutzername
  5. Textfeld "Password": ggf. Passwort eingeben und "Save Password" aktivieren.
  6. Dialog schließen (Finish).
  7. Dem Sicherheitszertifikat vertrauen (Trust).
  8. Im Repository-Browser nun das ose-2008-Repository auswählen und [rechte Maustaste], Find/Check Out As..., Check out as project configured using the New Project Wizard, Finish, im Wizard dann "Standard Make C++ Project" wählen. Dann Next, Projektnamen (z. B. ose-2008) angeben, dann Finish.
  9. Die C/C++-Perspektive öffnen (Window, Open Perspective, C/C++).
  10. Eclipse beenden.
  11. Das Shell-Skript after-first-checkout.sh aufrufen.
  12. Die Datei .project im Hauptprojektverzeichnis öffnen und folgende Zeile als erste im Abschnitt <natures> einfügen: <nature>com.ps.consul.eclipse.core.ConsulNature</nature>

Einrichtung des Projekts

Ist das Projekt erfolgreich importiert, müssen noch einige Einstellungen vorgenommen werden, die leider nicht zusammen mit den Projektinformationen gesichert werden:

  1. Dialogfenster "Project" -> "Properties" des AOStuBS-Projekts öffnen.
  2. Zur Ansicht "C/C++ Make Projekt" wechseln.
  3. Die Registerzunge "AspectC++ Make" auswählen.
  4. Textfeld "Repository file": <absolute path to workspace project>/aostubs/config/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.
  5. Textfeld "new prefix to be set": config/aostubs.
  6. Mit OK bestätigen.
  7. Rechte Maustaste auf das Projekt und "Add/Remove AspectC++ Support" wählen. Nun sollte bei Project, Properties AspectC++ Project und AspectC++ Make Project auf der linken Seite erscheinen.
  8. Make-Targets einstellen: Per "Window, Show View, Make Targets" die Make-Targets-View anzeigen und dort bei dem ose-2008-Projekt unter aostubs/config mit der rechten Maustaste ein neues Target für all anlegen (funktioniert erst, nachdem mindestens einmal transformiert wurde). Damit das ACDT und die Join-Point-Visualisierung funktioniert, müsst ihr make immer über das Eclipse-Make-Target aufrufen!

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 Hier landet die konfigurierte Variante, d. h. die zu der Variante gehörenden Quelldateien plus evtl. generierte Dateien (z. B. Flagfiles oder Klassenaliasfiles)
model Feature- (.xfm) und Komponenten-Modelle (.ccfm) aller Subdomänen, dazu der Konfigurationsraum und die evtl. vordefinierten Varianten (.vdm).
aostubs Quelldateien des Betriebssystems
base Startup-Code, Linkerfile
app Applikation
com Kommunikation
devices Allgemeine Gerätetreiber
display Gerätetreiber des Displays und die Ausgabebibliothek
interrupt Unterbrechungsbehandlung und Kernsynchronisation
library Utility-Klassen, z. B. einfache Container und Streams
make Makefiles und Scripts der Build-Umgebung
sound Gerätetreiber der Soundinfrastruktur und die Soundausgabebibliothek
thread Fadenverwaltung und Fadensynchronisation

Die Verzeichnisse mit dem entsprechenden Domänennamen "gehören" ab jetzt den jeweiligen Gruppen, d. h. diese sind dafür verantwortlich. Alle anderen Verzeichnisse (insbesondere base) "gehören" jedoch allen, hier müsst ihr euch bei Änderungen einigen.

Konfigurierung

Um AOStuBS zu konfigurieren, müsst ihr das Variantenmodell aostubs/model/aostubs.vdm öffnen, die gewünschten Merkmale selektieren und abschließend diese Konfiguration mittels des "Transform Model"-Knopfes auswerten. Dieser Vorgang generiert unter aostubs/ das Verzeichnis config, 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 aostubs/config/ übersetzt werden. Dies kann z. B. durch einen make-Aufruf in diesem Verzeichnis geschehen. Alle wichtigen Make-Targets und relevanten Umgebungsvariablen erhält man durch make help.

Testprogramme

Wenn ihr eigene Testprogramme schreibt, passt auf, dass ihr in main() nichts auf dem Stack anlegt, was nach dem ersten Dispatch noch gebraucht wird. Legt z. B. die Threadobjekte global an. Außerdem dürft ihr in main() noch keine Interrupts freigeben, sondern erst im Threadcode (dies passiert allerdings standardmäßig sowieso in kickoff()). Weiterhin müsst ihr für Testfälle, die Interrupts verwenden, auf jeden Fall einen Thread anlegen, auf dessen Stack ihr den Test ausf&uuhl;rt.

Hintergrund: AOStuBS läuft den Startup-Code und main() auf dem Interrupt-Stack ab, den der GBA hat (im Gegensatz zu x86). Das bedeutet, dass der erste Interrupt alle bis dato auf diesem Stack angelegte Daten überschreiben kann. Auf den System-Stack bzw. den entsprechenden Thread-Stack wird erst nach dem ersten Dispatch gewechselt.

AspectC++-Join-Point-Visualisierung

Wenn ihr euer Projekt wie oben beschrieben korrekt eingestellt habt, kann das ACDT die Join Points visualisieren. Dazu z. B. eine Aspektheader-Datei im konfigurierten Quellbaum öffnen und die Cross References View aktivieren: Window, Show View, Other, AC++ Cross References.

Simulieren und Debuggen von Testprogrammen

Um ein Testprogramm zu übersetzen, muss man innerhalb des Verzeichnisses aostubs/config/ 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.

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 GBA

Unter Windows, für den GBA mit Flash-Cartridge

Der Bootloader auf dem Cartridge-GBA bietet einem die verschiedenen geflashten ROMs zum Auswählen an, die man dann booten kann. Man kann also gleich mehrere verschiedene AOStuBS-Versionen (z. B. Varianten) flashen, um sie danach direkt auszuprobieren.

  • Sich als User ose auf der faui47n einloggen (Anmeldung "an diesen Computer", also lokal!). Das Passwort wird in der Übung bekannt gegeben.
  • XG2Flash starten. Dazu befindet sich ein Link auf dem Desktop.
  • Den GBA im link mode starten. Dazu sofort nach dem Anschalten die Start- und Select-Tasten gleichzeitig drücken. Nach dem GBA-Logo darf dann kein Bootloader wie im "normalen" Modus erscheinen.
  • Auf Refresh klicken.
  • Auf Rom klicken.
  • Nach Add Game bzw. Remove Game auf Flash klicken.

Unter Linux, für den GBA mit XPort

Das Überspielen eines Testprogramms auf den XPort erfolgt durch den Aufruf make <testprogramm>.download. Dieses Make-Target wird von uns bereitgestellt und ruft entsprechende Tools in /proj/i4ose/ auf. Der GBA bzw. der XPort-Baustein muss hierfür am lokalen Parallelport des flashenden PCs angeschlossen sein.

Reduzierung der Turn-Around-Zeiten mit make editmode

Achtet bei der Entwicklung darauf, ob ihr auf dem Original oder auf dem konfigurierten Quellbaum (unter aostubs/config) arbeitet. Änderungen im konfigurierten Quellbaum sind normalerweise nach der nächsten Konfigurierung verloren (weil der konfigurierte Baum dann überschrieben wird). 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 (im Original-Quellbaum) erst einmal wieder konfigurieren muss, gibt es das spezielle Make-Target editmode. Dadurch werden alle Dateien unter aostubs/config, 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. den Header-Files für "class aliases" oder Flags.)

Der Workflow sieht also in etwa folgendermaßen aus:

  • In aostubs/model/aostubs.vdm eine Variante zusammenklicken und transformieren.
  • Falls die Transformation prinzipiell passt (richtige Dateien unter aostubs/config vorhanden), weitermachen mit dem nächsten Schritt. Ansonsten die entsprechenden Featuremodelle und/oder Familienmodelle anpassen und den Schritt wiederholen.
  • make editmode in aostubs/config ausführen.
  • Die konfigurierte Variante kompilieren und direkt in aostubs/config verbessern, bis die Kompilierung funktioniert und alles tut, wie es soll.
  • Durch den Editmode wurden auch die (nichtkonfigurierten) Originaldateien unter aostubs/aostubs geändert, sodass ihr diese nun per SVN einchecken könnt.

Hinweise zu PCM-Sound auf dem GBA

Die Wave-Files, die abgespielt werden sollen, müssen in einem bestimmten Format vorliegen, welches z. B. in Audacity unter Linux folgendermaßen erzeugt werden kann: Das Projekt auf 16 KHz einstellen (links unten), Exportieren, Optionen, Andere, Raw (Headerless), Signed 8 Bit PCM.

Alternativ das Tool SoX verwenden, um eine Wave- oder MP3-Datei umzuwandeln: sox quelle.mp3/wav -c 1 -1 -s -r 16000 ziel.raw (1 Kanal (= Mono), 1 Byte pro Sample, Signed, 16KHz) bzw. statt der Option -1 die Option -b angeben (abhängig von der installierten SoX-Version).

Die erzeugte Raw-Datei kann nun in etwa folgendermaßen zum System hinzugelinkt werden; entsprechende Symbole für Start und Ende werden auch erzeugt: /proj/i4ose/tools/bin/arm-elf-objcopy tetris.raw --input binary --output elf32-littlearm --binary-architecture arm --rename-section .data=.text tetris.o

  Impressum   Datenschutz Stand: 2008-07-14 14:41   DL, WH