\documentclass[addpoints,12pt]{exam}

\usepackage{german}
\usepackage{listings,color}
\usepackage{graphicx}

\firstpageheadrule
\runningheadrule
\lhead{Manuel Traut\\SoSe 2012}
\chead{Hochschule Ravensburg-Weingarten\\Linux-Kernelprogrammierung}
\rhead{MatrNr:\\Datum:}

\firstpagefootrule
\runningfootrule
\firstpagefooter{Page \thepage\ of \numpages}
{}
{Punkte: \makebox[.5in]{\hrulefill}\\
von \pointsonpage{\thepage} Punkten}

\runningfooter{Page \thepage\ of \numpages}
{}
{}

\pagestyle{headandfoot}

\pointsinrightmargin
\pointpoints{Punkt}{Punkte}

\begin{document}


\begin{coverpages}
\begin{titlepage}
\title{Pr\"ufung Linux-Kernelprogrammierung}
\author{Dozent: Manuel Traut}
\date{19. Juli 2012 10:30 Uhr\\Raum H238}
\maketitle
\begin{center}
Hochschule Ravensburg-Weingarten
\vspace{1cm}

Dauer: 60 Minuten, erlaubte Hilfsmittel: keine
\end{center}

\vspace{2cm}
Name:\enspace\hrulefill
\vspace{2cm}
MatrNr:\enspace\hrulefill
\begin{center}
\begin{lstlisting}
              a8888b.
             d888888b.
             8P"YP"Y88      (((((((())))))))))
             8|o||o|88      ||VIEL ERFOLG !!||
             8'    .88      ((((((((((((()))))
             8`._.' Y8.
            d/      `8b.
          .dP   .     Y8b.
         d8:'   "   `::88b.
        d8"           `Y88b
       :8P     '       :888
        8a.    :      _a88P
      ._/"Yaa_ :    .| 88P|
      \    YP"      `| 8P  `.
      /     \._____.d|    .'
      `--..__)888888P`._.'
\end{lstlisting}
\end{center}
\end{titlepage}
\end{coverpages}


\begin{questions}

\section{Entwicklungsmodell}

\question[1] Was versteht man unter dem Begriff 'Kernelpatch'?

\question[3] F\"ur die Linuxkernelentwicklung wurde das
 Versionskontrollsystem git entwickelt. Nennen Sie mind. 4 gravierende
 Unterschiede zu Versionskontrollsystemen wie cvs oder svn.

\question Im Linuxsourcetree gibt es einen Ordner 'staging'.
\begin{parts}
\part[1] Was findet man in diesem Ordner?
\part[2] Was ist zu beachten?
\end{parts}

\question[4] Beschreiben Sie die Aufgaben und die Verantwortung eines Linux
Kernelmaintainers.

\section{Tools}

\question
\begin{parts}
\part[1] Welches Tool ist auf folgendem Bild zu sehen?
\part[3] Warum ist es nicht denkbar die Linux-sourcen ohne ein solches Tool zu
	compilieren?
\part[4] Welche Einstellungen können mit Hilfe dieses Tools konfiguriert werden?
	(beschreiben Sie Kategorien)
\end{parts}

\includegraphics[height=0.3\textwidth]{./images/kconfig.png}

\question [6] Ein von Ihnen entwickelter Kerneltreiber funktioniert nicht wie
erwartet. Welche Debugingm\"oglichkeiten haben Sie?

Nennen Sie mindestens zwei und beschreiben Sie Vor- und Nachteile

\section{Plumbing Layer}

\question [2] Sie starten ein Linuxsystem. Die letzten Ausgaben lauten:
               'freeing memory, loading init'
              Nennen Sie 2 m\"ogliche Ursachen.

\question [2] In 3.4-rc2 wurde die sogenannte x32 system call ABI Patche
  gemerged. Welche Funktionalit\"at haben diese eingef\"uhrt?
  (grobe Beschreibung)

\section{Programmierung}

\question Zusammenspiel des Linuxtreibermodels:

Denken Sie dabei an die Strukturen 'Bus', 'Device' und 'Driver';
Beschreiben Sie:
\begin{parts}
\part [1] Wie kann die Zust\"andigkeit eines Treibers f\"ur ein Ger\"at
  ausgedr\"uckt werden?
\part [2] Was wird typischerweise in einer register\_* Funktion gemacht?
\part [3] Wozu dient eine *probe Funktion?
\end{parts}

\question Sie wollen einen SPI LED Baustein (erm\"oglicht das Steuern von 16
LEDs - an, aus, Helligkeit - mittels SPI Kommandos) an Ihr embedded Linux
Board anschliessen. Alle Treiber f\"ur Ihr Board sind bereits im Mainline Linux
enthalten. Allerdings gibt es noch keine Unterst\"utzung f\"ur Ihren LED
Baustein. Sie haben ein Datenblatt vom Hersteller des LED Bausteins, der die
unterst\"utzen SPI Befehle beschreibt. Was tun Sie nun?
\begin{parts}
\part [10] Beschreiben Sie 2 M\"oglichkeiten, wie Sie den LED Baustein per
           Software integrieren k\"onnten. Nennen Sie jeweils Vor- und
           Nachteile. Markieren Sie die M\"oglichkeit welche Sie f\"ur am
           sinnvollsten erachten und f\"ur die Beantwortung der nachfolgenden
           Fragen als Basis nutzen.

\part [3] Welche Dateien im Linuxkernel werden Sie modifizieren / anlegen ?
\part [2] Wie k\"onnen die LEDs vom Kernel aus geschalten werden?
\part [5] Wie k\"onnen die LEDs vom Userspace aus geschalten werden?
           Skizzieren Sie auch den Weg durch beteiligten Kernelsubsysteme.
\end{parts}

\question Das Kernelsubsystem 'Userspace-IO' (UIO) kann zur Entwicklung eigener
  Treiber verwendet werden.
\begin{parts}
\part [3] Welche Einschr\"ankungen gelten?
\part [2] Mu\ss \space der komplette Quellcode des Treibers ver\"offentlicht werden?
\part [2] Sie wollen Ihren Treiber in Mainline Linux integriert haben, wie gehen
	Sie vor?
\end{parts}

\section{Rootfilesystem}

\question Sie haben ein System mit 256 MB NAND Flash und sollen ein
  GNU/Linux Userspace (ohne Xorg, etc) einrichten. Es sollen g\"angige Tools
  f\"ur Netzwerk, Bluetooth und Audio vorhanden sein.

\begin{parts}
\part [2] Wie erstellen Sie das Rootfilesystem ? (Tools, Steps, Pseudocode)
\part [6] Sie haben einen u-boot Bootloader und k\"onnen aus Flash und von SD
           Card booten. Das Rootfilesystem soll zuk\"unftig auf einem ubifs
           liegen. Wie gehen Sie vor? (Tools, Steps, Befehle)
\end{parts}
\end{questions}

\vspace{1cm}
Punkte: \_\_\_\_ von \numpoints
\hspace{1cm}
Note:

\end{document}
