summaryrefslogtreecommitdiff
path: root/2015-pruefung.tex
diff options
context:
space:
mode:
Diffstat (limited to '2015-pruefung.tex')
-rw-r--r--2015-pruefung.tex322
1 files changed, 322 insertions, 0 deletions
diff --git a/2015-pruefung.tex b/2015-pruefung.tex
new file mode 100644
index 0000000..c2d75d9
--- /dev/null
+++ b/2015-pruefung.tex
@@ -0,0 +1,322 @@
+\documentclass[addpoints,12pt]{exam}
+
+\usepackage{ngerman}
+\usepackage{listings,color}
+\usepackage{graphicx}
+
+\firstpageheadrule
+\runningheadrule
+\lhead{Manuel Traut\\Sommersemester 2015}
+\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{10. Juli 2015 08:00 Uhr}
+\maketitle
+\begin{center}
+Hochschule Ravensburg-Weingarten
+\vspace{1cm}
+
+Dauer: 60 Minuten, erlaubte Hilfsmittel: handschriftliche Mitschriebe/Notizen
+\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}
+
+\lstset{ %
+ basicstyle=\scriptsize, % the size of the fonts that are used for the code
+ breaklines=true, % sets automatic line breaking
+ frame=single, % adds a frame around the code
+ language=C, % the language of the code
+ numbers=left, % where to put the line-numbers;
+ numbersep=5pt, % how far the line-numbers are from the code
+ numberstyle=\tiny, % the style that is used for the line-numbers
+ tabsize=8, % sets default tabsize to 2 spaces
+}
+
+
+\begin{questions}
+
+\section*{Entwicklungsmodell - Development process}
+
+\question[4] Erkl\"aren Sie an einem Beispiel die Aufgaben eines Linux Kernel
+ Maintainers.
+
+\question[4] Sie wollen Ihren eigenen Treiber in Mainline Linux integriert
+ haben. Was \"ubermitteln Sie auf welchem Weg wohin?
+
+\section*{Tools}
+
+\question Der Linux Kernel wird im Versionskontrollsystem git verwaltet.
+\begin{parts}
+\part[1] Welches Subkommando verwenden Sie um den Quellcode z.B. des Linux
+ Kernels auf Ihren PC zu \"ubertragen?
+\part[6] Wie gehen Sie vor um mit Hilfe von git Ihre Änderungen auf eine neuere
+ Version des Kernels zu portieren?
+\end{parts}
+
+\question
+\begin{parts}
+\part[1] Welches Kommando f\"uhrt zu den Ausgaben auf folgendem Bild?
+\part[1] \"Uber welche Dateien wird der Inhalt / Struktur des Tools gesteuert?
+\end{parts}
+
+\includegraphics[height=0.3\textwidth]{./images/kconfig.png}
+
+\question In der Vorlesung haben wir etliche Funktionen des Kerneltracers
+ 'ftrace' kennen gelernt.
+\begin{parts}
+ \part[1] Beschreiben Sie eine M\"oglichkeit den Trace zu starten/stoppen.
+ \part[2] Nennen Sie 2 Events oder Eventtypen welche getraced werden k\"onnen.
+ \part[1] Beschreiben Sie eine M\"oglichkeit wie man den Tracebuffer auslesen kann
+ \part[6] Erkl\"aren und Begr\"unden Sie die Einfl\"u\ss e von ftrace auf die
+ Systemperformance.
+\end{parts}
+
+\section*{Rootfilesysteme - Rootfilesystems}
+
+\question
+\begin{parts}
+ \part[1] Nennen Sie einen Grund der gegen den Einsatz einer Linuxdistribution
+ spricht.
+ \part[4] Nennen Sie 4 Aufgaben die Sie bei einem 'Linux from scratch' (also
+ ohne Distribution) selber tun m\"u\ss en, welche aber klassischerweise von einer
+ Linuxdistribution gel\"ost w\"aren.
+\end{parts}
+
+\newpage
+
+\section*{Programmierung - Programming}
+
+\question[4] Sie starten ein Linuxsystem. Die letzten Ausgaben lauten:
+'freeing memory, loading init' - Nennen Sie 4 m\"ogliche Ursachen.
+
+\question[4] Beschreiben Sie mit eigenen Worten, was Sie folgender Kernelausgabe
+ entnehmen k\"onnen:
+\begin{verbatim}
+CPU: 0 Not tainted (2.6.37 #9)
+PC is at prepare_namespace+0x170/0x1d4
+LR is at do_unlinkat+0x10c/0x14c
+pc : [<c0009378>] lr : [<c00df338>] psr: 80000013
+sp : c783dfc8 ip : c783df20 fp : c783dfe0
+r10: 00000000 r9 : 00000000 r8 : 00000000
+r7 : 00000013 r6 : c0054a1c r5 : c0022995 r4 : c03969a4
+r3 : 00000000 r2 : 00000000 r1 : c78c7000 r0 : 00000000
+Flags: Nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
+Control: 00093177 Table: 00004000 DAC: 00000017
+Process swapper (pid: 1, stack limit = 0xc783c260)
+Stack: (0xc783dfc8 to 0xc783e000)
+dfc0: c783dfd4 c0396940 c00084fc c783dff4 c783dfe4 c0008610
+dfe0: c0009214 00000000 00000000 c783dff8 c0054a1c c0008508 00000000 00000000
+Backtrace:
+[<c0009208>] (prepare_namespace+0x0/0x1d4) from [<c0008610>]
+(kernel_init+0x114/0x154)
+r5:c00084fc r4:c0396940
+[<c00084fc>] (kernel_init+0x0/0x154) from [<c0054a1c>] (do_exit+0x0/0x660)
+r4:00000000
+Code: e3500000 13a03601 15843000 e3a03000 (e5d31000)
+---[ end trace 4ed5c061b76895d8 ]---
+\end{verbatim}
+
+\newpage
+
+\question
+
+Die folgenden Fragen beziehen sich auf den Quellcode des Kernelmoduls im Anhang.
+
+\begin{parts}
+\part[2] Welche Zeile Quellcode m\"u\ss en Sie l\"oschen damit der Code keine
+ Funktion hat?
+
+\part[4] Welche 'virtuellen Dateien' werden von dem Code angelegt?
+
+\part[4] Sie wollen vom Userspace aus mittels des Kernelmoduls
+ folgende Datei erstellen. Welche Kommandos oder Pseudo-C Code verwenden Sie?
+
+[/tmp/huhu.txt]
+\begin{lstlisting}
+8888
+\end{lstlisting}
+
+\part[6] Suchen Sie sich drei Funktionen aus, erkl\"aren Sie jeweils wann die
+Funktion aufgerufen wird und was Sie tut.
+
+\part[4] Sie wollen dass der Code keine sysfs device Attribute mehr exportiert.
+Nennen Sie alle Bereiche, die gel\"oscht werden k\"onnen.
+\end{parts}
+
+\end{questions}
+
+\vspace{1cm}
+Punkte: \_\_\_\_ von \numpoints
+\hspace{1cm}
+Note:
+
+\newpage
+
+\begin{appendix}
+\begin{lstlisting}
+/*
+ * Example driver for Linux
+ * Copyright (C) 2015, Manuel Traut <manut@mecka.net>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/fs.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+#define DEVICE_NAME "hswgt"
+static int major;
+
+static struct class *dummy;
+
+static struct device hswgt_dev = {
+ .init_name = DEVICE_NAME,
+};
+
+static ssize_t hswgt_show_ro(struct device *hswgt_dev,
+ struct device_attribute *hswgt_attr, char *buf)
+{
+ memset(buf, 8, 4);
+ buf[4] = '\0';
+ return 5;
+}
+
+static ssize_t hswgt_show_rw(struct device *hswgt_dev,
+ struct device_attribute *hswgt_attr, char *buf)
+{
+ printk(KERN_ERR "number of the beast?");
+ memset(buf, 6, 3);
+ buf[3] = '\0';
+ return 4;
+}
+
+static ssize_t hswgt_store_rw(struct device *hswgt_dev,
+ struct device_attribute *hswgt_attr, const char *buf, size_t count)
+{
+ printk(KERN_ERR "what's this good for?");
+ return count;
+}
+
+
+static DEVICE_ATTR(hswgt_ro, S_IRUGO, hswgt_show_ro, NULL);
+static DEVICE_ATTR(hswgt_rw, S_IWUSR|S_IRUGO, hswgt_show_rw, hswgt_store_rw);
+
+static struct attribute *hswgt_dev_attrs[] = {
+ &dev_attr_hswgt_ro.attr,
+ &dev_attr_hswgt_rw.attr,
+ NULL,
+};
+
+static struct attribute_group hswgt_dev_attr_group1 = {
+ .attrs = hswgt_dev_attrs,
+};
+
+static const struct attribute_group *hswgt_dev_attr_groups[] = {
+ &hswgt_dev_attr_group1,
+ NULL,
+};
+
+static int __init hswgt_init(void)
+{
+ int ret = 0;
+
+ pr_notice("%s\n", __func__);
+
+ dummy = class_create(THIS_MODULE, "dummy");
+ device_initialize(&hswgt_dev);
+ hswgt_dev.parent = NULL;
+ hswgt_dev.bus = NULL;
+ hswgt_dev.class = dummy;
+ hswgt_dev.groups = hswgt_dev_attr_groups;
+
+ ret = device_add(&hswgt_dev);
+ if (ret) {
+ pr_err("%s device_add failed: %x\n", __func__, ret);
+ goto failed_dev;
+ }
+
+ return 0;
+
+failed_dev:
+ device_del(&hswgt_dev);
+ class_destroy(dummy);
+
+ return ret;
+}
+
+static void __exit hswgt_exit(void)
+{
+ pr_notice("%s\n", __func__);
+
+ device_del(&hswgt_dev);
+ class_destroy(dummy);
+}
+
+module_init(hswgt_init);
+module_exit(hswgt_exit);
+
+MODULE_AUTHOR("Manuel Traut");
+MODULE_DESCRIPTION("dummy test driver");
+MODULE_VERSION("3");
+MODULE_LICENSE("GPL");
+\end{lstlisting}
+\end{appendix}
+
+
+\end{document}