summaryrefslogtreecommitdiff
path: root/pruefung.tex
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2017-07-11 18:39:31 +0200
committerManuel Traut <manut@linutronix.de>2017-07-11 18:39:31 +0200
commit1003ad45790088f8964d305f0cb047c39a60e9d3 (patch)
treea7ada2781aa49bbe3769c11d0420d2e1a57e51ea /pruefung.tex
parent450bcad95211029a92accb87e99b004909354984 (diff)
add pruefung 2015 and 2011
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'pruefung.tex')
-rw-r--r--pruefung.tex322
1 files changed, 0 insertions, 322 deletions
diff --git a/pruefung.tex b/pruefung.tex
deleted file mode 100644
index c2d75d9..0000000
--- a/pruefung.tex
+++ /dev/null
@@ -1,322 +0,0 @@
-\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}