Projekt: System- und Rechnerarchitektur
- Semester:
- Sommersemester
- Anrechenbar im:
- Master
- Leistungspunkte
- 6
- Dozent:
- Daniel Lohmann
- Betreuer:
- Lars Wrenger, Dominik Töllner
- E-Mail:
- psra@sra.uni-hannover.de
- Zeit/Raum:
-
- Montag: 15:00 - 16:30 Uhr
- Donnerstag: 14:00 - 15:30 Uhr, (Rechnerübung ohne neue Lehrinhalte)
- Details: Siehe Semesterplan
Wichtiger Hinweis zur Anmeldung: Für Studierende der Elektrotechnik und Informationstechnik gibt es für Labore ein verpflichtendes Anmeldesystem. Wir stellen in diesem Labor Plätze für Elektrotechnik-Studierende über das Anmeldesystem zur Verfügung. Studierende der Informatik nutzen dieses Anmeldesystem bitte nicht, sondern nehmen einfach an der ersten Veranstaltung teil.
Inhalt
In diesem Labor erwartet euch eine Einführung in die interessante Welt der system- und hardwarenahen Softwareentwicklung. Außerdem erlernt ihr die Fertigkeiten, um euch an der Entwicklung von Open-Source-Projekten – im Speziellen des Linux-Kernels – zu beteiligen.
Dabei vertieft ihr nicht nur den versierten Umgang mit den notwendigen Werkzeugen wie GCC, Git, GDB oder QEMU, sondern arbeitet auch mit echter Hardware. So werdet ihr einen Linux-Treiber für ein selbst gebautes USB-Gerät entwicklen. Daneben werden in diesem Labor auch echte Beiträge zu Open-Source-Projekten entstehen. Zum Abschluss der Veranstaltung wird in einem kleinen Wettkampf (CTF) das Verständnis von Hardware und Systemsoftware weiter trainiert und auf die Probe gestellt.
Folgende Themen werden behandelt:
- Erweiterter Umgang und Funktionsweise von verteilten Versionskontrollsystemen (Git)
- Funktionsweise der Konfigurations- und Übersetzungssysteme des Linux-Kernels
- Fehlersuche und -behebung in Systemsoftware (Vorgehensweise, QEMU, KGDB, GDB, etc.)
- Arbeitsmethoden der Open-Source-Community (Was ist ein Patch? Wie bekomme ich einen Patch akzeptiert?)
- Umgang mit Hardware (Entwicklung eines Linux-Treibers für ein USB-Gerät mit eigenem Protokoll)
- Reverse-Engineering, Analyse von Binärdateien
Vorkenntnisse
Da wir in diesem Labor tief in die systemnahe Softwareentwicklung einsteigen (Linux-Kernel, Treiber-Entwicklung), sind folgende Vorkenntnisse notwendig:
- Solide Programmierkenntnisse in C
- Grundlegende Unix-Kenntnisse (Shell, Coreutils)
- Grundlagen Git (add, commit, push, pull)
- Grundlagen Compiler (Programme kompilieren, Buildsysteme in Grundzügen kennen, im Speziellen GCC und make)
- Grundlagen von Betriebssystemen
- Was ist ein Kernel?
- Was ist ein Treiber?
- Was ist ein Thread?
Falls ihr euch diesbezüglich unsicher seid, schreibt uns gerne eine Email an psra@sra.uni-hannover.de.
Aufgaben
Die Aufgaben werden in Zweiergruppen bearbeitet.
- Aufgabe 1: Kernel Debugging
- Aufgabe 2: Fehler im Linux-Kernel finden und beheben
- Aufgabe 3: Auf zur ersten Open-Source-Contribution!
- Aufgabe 4: Temperatursensor: Von der Hardware bis zum Treiber
- Aufgabe 5: MeltUP: Flaggenfang!
Vorläufiger Semesterplan
Woche | Mo 15:00 | Do 14:00 |
---|---|---|
10.04. | Ostern | - |
17.04. | Ü1Arbeitsumgebung & Kernel-Debugging | RÜ |
24.04. | Ü2Git / Kernelentwicklung | A1Abgabe 1 |
01.05. | Tag der Arbeit | RÜ |
08.05. | Ü3Open-Source-Entwicklung | T2Teilabgabe 2 |
15.05. | - | Himmelfahrt |
22.05. | Ü4Treiberentwicklung | A2Abgabe 2 |
29.05. | Pfingsten | Pfingsten |
05.06. | - | RÜ |
12.06. | Ü5Reverse Engineering / Binärcodeanalyse | A4Abgabe 4 T3Teilabgabe 3 |
19.06. | Ü+Meltdown | RÜ |
26.06. | - | RÜ |
03.07. | - | RÜ |
10.07. | - | RÜ |
17.07. | Ü6Vorstellung der Upstream-Patches A3Abgabe 3 A5Abgabe 5 | - |
In der Tafelübung (ÜXÜbung X) wird die jeweils nächste Aufgabe vorgestellt und die nötigen Inhalte vermittelt. Jeden Donnerstag gibt es eine betreute Rechnerzeit (RÜ). In den Rechnerübungen werden keine neuen Inhalte vermittelt – sie müssen daher nicht unbedingt besucht werden. Bei Fragen könnt ihr euch auch außerhalb der Rechnerzeiten jederzeit an einen der Betreuer wenden. Die Abgabetermine (AXAbgabe X) sind entweder zu den Rechnerübungsterminen oder in der Tafelübung. Zu einigen Aufgaben gibt es Teilabgaben (TXTeilabgabe X). Zu diesen Terminen muss jeweils ein bestimmter Teil der Aufgabe erfüllt sein.
Evaluation
Literatur
- Git. Verteilte Versionsverwaltung für Code und Dokumente
-
Open Source Press2011978-3941841420.
[BibTex]
- Hacking: die Kunst des Exploits
-
dpunkt-Verlag20089783898645362.
[BibTex]
Artikel auf LWN.net
Anmeldung und weitere Infos
Für diese Veranstaltung ist eine Online-Anmeldung über Stud.IP erforderlich. Bitte registrieren Sie sich (falls noch nicht geschehen) für Stud.IP und tragen Sie sich dort in die entsprechende Veranstaltung ein.