summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application-devel/debugging-tools/Makefile1
-rw-r--r--application-devel/embedded-devel/Makefile1
-rw-r--r--application-devel/embedded-devel/pres_embedded-devel_de.tex493
-rw-r--r--kernel-devel/char-device/Makefile1
-rw-r--r--kernel-devel/char-device/pres_char-device_de.tex287
-rw-r--r--kernel-devel/module-basics/Makefile1
-rw-r--r--kernel-devel/module-basics/pres_module-basics_de.tex523
-rw-r--r--linux-basics/boot-process/Makefile1
-rw-r--r--linux-basics/boot-process/pres_boot-process_de.tex95
-rw-r--r--realtime/rt-basics/Makefile1
-rw-r--r--realtime/rt-basics/pres_rt-basics_de.tex205
-rw-r--r--realtime/rt-specialties/Makefile1
12 files changed, 0 insertions, 1610 deletions
diff --git a/application-devel/debugging-tools/Makefile b/application-devel/debugging-tools/Makefile
index 43ee821..acf7994 100644
--- a/application-devel/debugging-tools/Makefile
+++ b/application-devel/debugging-tools/Makefile
@@ -1,2 +1 @@
-obj-$(CONFIG_DEBUGGING_TOOLS) += pres_debugging-tools_de.pdf
obj-$(CONFIG_DEBUGGING_TOOLS) += pres_debugging-tools_en.pdf
diff --git a/application-devel/embedded-devel/Makefile b/application-devel/embedded-devel/Makefile
index 336a755..08752ae 100644
--- a/application-devel/embedded-devel/Makefile
+++ b/application-devel/embedded-devel/Makefile
@@ -1,3 +1,2 @@
obj-$(CONFIG_DEVEL_EMBEDDED) += hints_embedded-devel_de.pdf
-obj-$(CONFIG_DEVEL_EMBEDDED) += pres_embedded-devel_de.pdf
obj-$(CONFIG_DEVEL_EMBEDDED) += pres_embedded-devel_en.pdf
diff --git a/application-devel/embedded-devel/pres_embedded-devel_de.tex b/application-devel/embedded-devel/pres_embedded-devel_de.tex
deleted file mode 100644
index e8f2e87..0000000
--- a/application-devel/embedded-devel/pres_embedded-devel_de.tex
+++ /dev/null
@@ -1,493 +0,0 @@
-\input{configpres}
-
-\title{\lq (Embedded) LINUX Applikationsentwicklung\rq}
-\maketitle
-
-\begin{frame}
-\frametitle{Übersicht}
-\tableofcontents
-\end{frame}
-
-\subsection{Der GNU Compiler}
-\subsubsection{Hello world}
-\begin{frame}[fragile]
-\frametitle{Der GNU Compiler}
-\begin{lstlisting}[language=c]
-/* hello.c */
-#include <stdio.h>
-
-int main(void)
-{
- printf("Hello world\n");
- return 0;
-}
-\end{lstlisting}
-\begin{lstlisting}[language=bash]
-# Uebersetzen des Testprogramms
-gcc -o hello hello.c
-\end{lstlisting}
-\end{frame}
-
-\subsubsection{Wichtige Optionen}
-\begin{frame}[fragile]
-\frametitle{Wichtige gcc Optionen}
-\begin{lstlisting}[language=bash]
-# Nur Objectfile erzeugen
-gcc -c -o hello.o hello.c
-
-# Uebersetzen mit Optimierungslevel 3
-gcc -O3 -o hello hello.c
-
-# Ohne Optimierung und mit
-# Debugsymbolen uebersetzen
-gcc -O0 -g hello hello.c
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Wichtige gcc Optionen}
-\begin{lstlisting}[language=bash]
-# Gegen zusaetzliche Bibliothek linken (librt.so)
-gcc -lrt -o hello hello.c
-
-# Suchpfad fuer Bibliotheken hinzufuegen
-gcc -L /mypath -lrt -o hello hello.c
-
-# Suchpfad fuer Includes hinzufuegen
-gcc -I /mypath -o hello hello.c
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Wichtige gcc Optionen}
-\begin{lstlisting}[language=bash]
-# Alle Warnings ausgeben
-gcc -Wall -o hello hello.c
-
-# Warnings als Fehler behandeln
-gcc -Werror -o hello hello.c
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{GCC: Nützliches}
-\begin{lstlisting}[language=bash]
-# Vordefinierte / Interne Makros ausgeben
-$ gcc -E -dM - < /dev/null | cut -c 9- | sort
-[...]
-__SIZEOF_DOUBLE__ 8
-__SIZEOF_FLOAT__ 4
-__SIZEOF_INT__ 4
-__SIZEOF_LONG__ 8
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{GCC: Nützliches}
-\begin{lstlisting}[language=bash]
-# Nur Pre-Prozessor ausfuehren
-$ gcc -C -E hello.c -o hello_pre
-
-# Woher kommt welches Symbol?
-$ gcc -Wl,-y,printf hello.c
-/lib/libc.so.6: definition of printf
-\end{lstlisting}
-Quelle und weitere nuetzliche Tipps: http://elinux.org/GCC\_Tips
-\end{frame}
-
-\subsection{Der Dynamic Loader}
-\begin{frame}
-\frametitle{Der Dynamic Loader: ld-linux.so}
-\begin{alertblock}{Was ist der Dynamic Loader?}
-Der Dynamic Loader: ld-linux.so lädt die dynamischen Bibliotheken, die von einem Programm
-benötigt werden. Er ist Bestandteil der C Bibliothek.
-\end{alertblock}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Der Dynamic Loader: ld-linux.so}
-\begin{lstlisting}[language=bash]
-# Entweder
-./hello
-
-# oder
-/lib/ld-linux-x86-64.so.2 ./hello
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Der Dynamic Loader: Umgebungsvariablen}
-\begin{tabular}{|l|p{5cm}|}
-\hline
-\textbf{Umgebungsvariable} & \textbf{Abkürzung} \\
-\hline
-LD\_LIBRARY\_PATH & Suchpfad für Bibliotheken \\
-\hline
-LD\_PRELOAD & Liste von Bibliotheken, die vor allen anderen zu laden sind \\
-\hline
-LD\_DEBUG & Debug Ausgaben \\
-\hline
-\end{tabular}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Der Dynamic Loader: Umgebungsvariablen}
-\begin{lstlisting}[basicstyle=\ttfamily\fontsize{9}{9}\selectfont]
-$ LD_DEBUG=help ./hello
-Valid options for the LD_DEBUG environment
-variable are:
-
- libs display library search paths
- reloc display relocation processing
- files display progress for input file
- symbols display symbol table processing
- bindings display information about symbol binding
- versions display version dependencies
- all all previous options combined
- statistics display relocation statistics
- unused determined unused DSOs
- help display this help message and exit
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}
-\frametitle{Der Dynamic Loader: Suchreihenfolge}
-\begin{enumerate}
-\item DT\_RPATH dynamic subsection (ELF)
-\item LD\_LIBRARY\_PATH
-\item DT\_RUNPATH dynamic subsection (ELF)
-\item ld.so.cache
-\item /lib bzw. /usr/lib
-\end{enumerate}
-\end{frame}
-
-\subsection{Die Binutils}
-\subsubsection{Übersicht}
-\begin{frame}
-\frametitle{Die Binutils}
-Eine Sammlung von Programmen zum Erstellen / Bearbeiten von Binaries.
-Die wichtigsten Tools sind:
-\begin{itemize}
-\item Der GNU Linker (ld)
-\item Der GNU Assembler (as)
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Weitere Programme der Binutils}
-\begin{itemize}
-\item \textbf{addr2line}: Ordnet Adressen Zeilennummern zu
-\item \textbf{gprof}: Profiler
-\item \textbf{nm}: Listet Symbole in Objectfiles
-\item \textbf{objcopy}: Kopiert und konvertiert Objectfiles
-\item \textbf{objdump}: Listet Informationen zu Objectfiles
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Weitere Programme der Binutils}
-\begin{itemize}
-\item \textbf{ranlib}: Generiert den Index zu einem Archivinhalt
-\item \textbf{readelf}: Zeigt Informationen zu ELF Files
-\item \textbf{size}: Listet die Sektionsgrößen für Object- oder ELF Files
-\item \textbf{strip}: Entfernt Symbole
-\end{itemize}
-\end{frame}
-
-\subsubsection{objdump}
-\begin{frame}[containsverbatim]
-\frametitle{Untersuchen von Binaries mit Objdump}
-\begin{lstlisting}[language=bash]
-jan@hopfropf:~$ objdump -x /bin/ls
-/bin/ls: file format elf64-x86-64
-/bin/ls
-architecture: i386:x86-64, flags 0x00000112:
-EXEC_P, HAS_SYMS, D_PAGED
-start address 0x0000000000402490
-
-Program Header:
- PHDR off 0x0000000000000040 vaddr [...]
- filesz 0x00000000000001f8 memsz [...]
-[...]
-Dynamic Section:
- NEEDED librt.so.1
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Untersuchen von Binaries mit Objdump}
-\begin{lstlisting}[language=bash]
-Version References:
- required from librt.so.1:
- 0x09691a75 0x00 07 GLIBC_2.2.5
-[...]
-Sections:
-Idx Name Size VMA [...]
- 0 .interp 0000001c 000000000040 [...]
- CONTENTS, ALLOC, LOAD, [...]
- 1 .note.ABI-tag 00000020 000000000040 [...]
- CONTENTS, ALLOC, LOAD, [...]
-[...]
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Bibliotheksabhängigkeiten mit objdump bestimmen}
-\begin{lstlisting}[language=bash]
-jan@hopfropf:~$ objdump -x /bin/ls | grep NEEDED
- NEEDED librt.so.1
- NEEDED libselinux.so.1
- NEEDED libacl.so.1
- NEEDED libc.so.6
-\end{lstlisting}
-\end{frame}
-
-\subsubsection{objcopy}
-\begin{frame}[fragile]
-\frametitle{Binaries bearbeiten mit objcopy}
-\begin{lstlisting}[language=bash]
-# 64bit ELF ins SREC Format kopieren
-objcopy -I elf64-x86-64 -O srec hello hello.srec
-# SREC in 64 bit ELF kopieren
-objcopy -I srec -O elf64-x86-64 hello.srec hello
-\end{lstlisting}
-\end{frame}
-
-\subsubsection{addr2line}
-\begin{frame}[containsverbatim]
-\frametitle{Adressen zuordnen mit addr2line}
-\begin{lstlisting}[language=bash]
-objdump -D hello | less
-\end{lstlisting}
-\begin{verbatim}
-[...]
-000000000040050c <main>:
- 40050c: 55 push %rbp
- 40050d: 48 89 e5 mov %rsp,%rbp
-[...]
-\end{verbatim}
-\begin{lstlisting}[language=bash]
-$ addr2line -e hello 40050c
-/home/jan/work/examples/hello.c:4
-\end{lstlisting}
-\end{frame}
-
-\subsection{Bibliotheken}
-\subsubsection{Statische Bibliotheken}
-\begin{frame}[fragile]
-\frametitle{Statische Bibliotheken}
-\begin{lstlisting}
-# Erstellen
-$ gcc -c file1.c file2.c
-$ ar r libhello.a file1.o file2.o
-# Benutzen
-$ gcc -o hello hello.o libhello.a
-\end{lstlisting}
-\end{frame}
-
-\subsubsection{Dynamische Bibliotheken}
-
-\begin{frame}[fragile]
-\frametitle{Dynamische Bibliotheken}
-\begin{lstlisting}
-# Erstellen dynamischer Bibliotheken
-$ gcc -c -fPIC file1.c file2.c
-$ gcc -shared -o libhello.so file1.o file2.o
-# Gegen die Bibliothek linken
-$ gcc -o hello hello.c libhello.so
-# Versuchen Sie nun das Programm zu starten
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Wir erinnern uns an den Dynamic Loader!}
-Also, entweder LD\_LIBRARY\_PATH setzen, oder nach /lib bzw. /usr/lib
-kopieren.
-\end{frame}
-
-\begin{frame}
-\frametitle{\textbf{P}osition \textbf{Independent} \textbf{Code}}
-Die Option -fPIC bewirkt die Erzeugung von ''position independent code''.
-Das heißt, es wird Code erzeugt, der zur Laufzeit an jeder beliebigen virtuellen
-Adresse lauffähig ist.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{SONAME}
-\begin{lstlisting}
-# Erstellen dynamischer Bibliotheken
-$ gcc -c -fPIC file1.c file2.c
-$ gcc -shared -Wl,-soname,libsayhello.so \
- -o libhello.so file1.o file2.o
-\end{lstlisting}
-Die -soname Linker-Option bewirkt, daß beim Linken der Name
-''libsayhello.so'' eingetragen wird. Das heißt der Loader
-sucht beim Starten der Applikation nach einer Bibliothek mit
-dem Namen ''libsayhello.so''.
-\end{frame}
-
-\begin{frame}
-\frametitle{Namensgebung}
-\begin{itemize}
-\item linker name
-\item SONAME
-\item real name
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Namensgebung}
-\begin{verbatim}
-libhello.so.1 -> libhello.so.1.0.2
-# New minor version
-libhello.so.1 -> libhello.so.1.0.3
-# New Major version
-libhello.so.2 -> libhello.so.2.0.1
-\end{verbatim}
-SONAME beeinhaltet die Majornumber. Der Symbolic Link mit
-der Majornumber(SONAME) zeigt normalerweise auf die Bibliotheksversion
-mit der aktuellsten Minornumber (real name).
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Namensgebung}
-\begin{verbatim}
-libhello.so -> libhello.so.1
-\end{verbatim}
-Oft wird auch ein Link ohne Versionsnummer angelegt, der auf die
-aktuellste Majornumber Zeigt. Man spricht hier vom sogenannten
-''linker name''.
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{DT\_RPATH und DT\_RUNPATH}
-\begin{lstlisting}
-$ gcc -Wl,-rpath,/mypath -o hello hello.c \
- libhello.so
-\end{lstlisting}
--rpath erzeugt per Default DT\_RPATH. Um DT\_RUNPATH zu erzeugen,
-benötigt man die Option --enable-new-dtags. Beispiel:
-\begin{lstlisting}
-$ gcc -Wl,--enable-new-dtags \
- -Wl,-rpath,/mypath \
- -o hello hello.c libhello.so
-# Was faellt bei folgendem Kommando auf:
-$ objdump -p hello | grep PATH
-\end{lstlisting}
-\end{frame}
-
-\subsection{Buildprozess automatisieren}
-\subsubsection{Übersicht}
-
-\begin{frame}
-\frametitle{GNU make}
-\begin{alertblock}{Was ist GNU make?}
-GNU make kontrolliert und automatisiert Buildprozesse.
-\end{alertblock}
-\end{frame}
-
-\subsubsection{Anwendungsbeispiele}
-\begin{frame}[containsverbatim]
-\frametitle{Einfaches Beispiel}
-\begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-# Makefile
-
-hello: hello.o
- gcc -o $@ $<
-
-hello.o: hello.c
- gcc -c -o $@ $<
-
-clean:
- rm -rf hello hello.o
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}
-\frametitle{Aufgabe}
-\begin{itemize}
-\item Erstellen Sie ein Beispielprojekt mit einem Hallo Welt Programm und dem
-im Beispiel aufgeführten Makefile
-\item Übersetzen Sie das Programm
-\item Erstellen Sie eine Datei mit dem Namen clean und führen make clean aus
-(Was passiert?!)
-\end{itemize}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Problem}
-\begin{lstlisting}[language=bash]
-$ make
-gcc -c -o hello.o hello.c
-gcc -o hello hello.o
-$ touch clean
-$ make clean
-make: `clean' is up to date.
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{PHONY targets}
-\begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-hello: hello.o
- gcc -o $@ $<
-
-hello.o: hello.c
- gcc -c -o $@ $<
-
-.PHONY: clean
-
-clean:
- rm -rf hello hello.o
-\end{lstlisting}
-Aufgabe: Erweitern Sie Ihr Makefile um das PHONY target und führen Sie erneut
-make clean aus.
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Regeln mit Pattern}
-\begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-hello: hello.o
- gcc -o $@ $<
-
-%.o: %.c
- gcc -c -o $@ $<
-
-.PHONY: clean
-
-clean:
- rm -rf hello hello.o
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Variablen}
-\begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-EXE = hello
-OBJ = $(EXE).o
-
-$(EXE): $(OBJ)
- gcc -o $@ $<
-
-%.o: %.c
- gcc -c -o $@ $<
-
-.PHONY: clean
-
-clean:
- rm -rf $(EXE) $(OBJ)
-\end{lstlisting}
-\end{frame}
-
-\begin{frame}[containsverbatim]
-\frametitle{Pattern substitution}
-\begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill]
-SRC = hello.c hello1.c
-OBJ = $(SRC:%.c=%.o)
-[...]
-\end{lstlisting}
-\end{frame}
-
-\input{tailpres}
diff --git a/kernel-devel/char-device/Makefile b/kernel-devel/char-device/Makefile
index 094719f..f5ce0ab 100644
--- a/kernel-devel/char-device/Makefile
+++ b/kernel-devel/char-device/Makefile
@@ -1,3 +1,2 @@
obj-$(CONFIG_KERNEL_CHAR_DEV) += hints_char-device_de.pdf
-obj-$(CONFIG_KERNEL_CHAR_DEV) += pres_char-device_de.pdf
obj-$(CONFIG_KERNEL_CHAR_DEV) += pres_char-device_en.pdf
diff --git a/kernel-devel/char-device/pres_char-device_de.tex b/kernel-devel/char-device/pres_char-device_de.tex
deleted file mode 100644
index 6568af4..0000000
--- a/kernel-devel/char-device/pres_char-device_de.tex
+++ /dev/null
@@ -1,287 +0,0 @@
-\input{configpres}
-
-\title{Interaktion eines Character Device Treibers}
-\maketitle
-
-\subsection{Character Devices}
-
-\subsubsection{Syscall Interface}
-\begin{frame}
-\frametitle{Syscall Interface}
-\begin{center}
-\includegraphics[width=5cm]{images/syscall.png}
-\end{center}
-\end{frame}
-
-\subsubsection{Struktur}
-\begin{frame}
-\frametitle{Interaktion eines Character Device Treibers}
-\pause
-\begin{itemize}
-\item open
-\pause
-\item release
-\pause
-\item read
-\pause
-\item write
-\pause
-\item fsync
-\pause
-\item llseek
-\pause
-\item poll
-\pause
-\item mmap
-\pause
-\item ioctl
-\pause
-\item \dots
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{open}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-int (*open) (struct inode *, struct file *);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [open:] Erste Operation auf einem Character-Device. Die Funktion muss
-nicht implementiert werden. In diesem Fall schlägt ein Öffnen des Devices nie
-fehl und es gibt keine Benachrichtigung des Treibers.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/open.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{release}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-int (*release) (struct inode *, struct file *);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [release:] Letzte Operation auf einem Character-Device. Die Funktion muss
-nicht implementiert werden. In diesem Fall schlägt ein Öffnen des Devices nie
-fehl und es gibt keine Benachrichtigung des Treibers.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/release.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{read}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [read:] Lesen von Daten des Devices. Die Daten werden mit Hilfe von
-\emph{copy\_to\_user} in den Userspace kopiert.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/read.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{write}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [write:] Schreiben von Daten an das Devices. Die Daten werden mit Hilfe
-von \emph{copy\_from\_user} aus dem Userspace kopiert.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/write.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{fsync}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-int (*fsync) (struct file *, struct dentry *, int datasync);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [fsync:] Das Schreiben aller gecachten Daten eines Devices erzwingen.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/fsync.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{llseek}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-loff_t (*llseek) (struct file *, loff_t, int);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [llseek:] Setzt die aktuelle Position für Lese- und Schreibzugriffe.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/llseek.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{poll}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-unsigned int (*poll) (struct file *, struct poll_table_struct *);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [poll:] Implementiert poll, epoll und select. Wird poll nicht
-implementiert, so muss nicht blockierendes Lesen und Schreiben möglich sein.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/poll.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{mmap}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-int (*mmap) (struct file *, struct vm_area_struct *);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [mmap:] Legt ein Speichermapping des Devices im Kontext des
-Userspace-Prozesses an.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/mmap.png}
-\end{center}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{ioctl}
-\pause
-\begin{itemize}
-\item Prototyp
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Beschreibung
-\pause
-\begin{description}
-\item [ioctl:] Implementiert Device-spezifische Kommandos. Sollte, da in den
-meisten Fällen bessere, standartisierte Schnittstellen existieren, vermieden
-werden.
-\end{description}
-\pause
-\item Datenfluss
-\end{itemize}
-\pause
-\begin{center}
-\includegraphics[width=5cm]{images/ioctl.png}
-\end{center}
-\end{frame}
-
-\input{tailpres}
diff --git a/kernel-devel/module-basics/Makefile b/kernel-devel/module-basics/Makefile
index 82017d4..952b311 100644
--- a/kernel-devel/module-basics/Makefile
+++ b/kernel-devel/module-basics/Makefile
@@ -1,2 +1 @@
-obj-$(CONFIG_KERNEL_MODULES_BASIC) += pres_module-basics_de.pdf
obj-$(CONFIG_KERNEL_MODULES_BASIC) += pres_module-basics_en.pdf
diff --git a/kernel-devel/module-basics/pres_module-basics_de.tex b/kernel-devel/module-basics/pres_module-basics_de.tex
deleted file mode 100644
index e303cca..0000000
--- a/kernel-devel/module-basics/pres_module-basics_de.tex
+++ /dev/null
@@ -1,523 +0,0 @@
-\input{configpres}
-
-\title{Treiber Modul Grundlagen}
-\maketitle
-
-\subsection{Kernel Module}
-
-\subsubsection{Aufbau}
-\begin{frame}[fragile]
-\frametitle{Aufbau eines Treiber Moduls}
-\pause
-\begin{itemize}
-\item Header
-\pause
-\begin{scriptsize}
-\begin{lstlisting}[frame=trBL]
-#include <linux/init.h>
-#include <linux/module.h>
-\end{lstlisting}
-\end{scriptsize}
-\pause
-\item Init
-\pause
-\begin{scriptsize}
-\begin{lstlisting}[frame=trBL]
-static int __init vain_init(void)
-{
- printk(KERN_INFO "vain_init: done\n");
- return 0;
-}
-
-module_init(vain_init);
-\end{lstlisting}
-\end{scriptsize}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau (fort.)}
-\begin{itemize}
-\item Exit
-\pause
-\begin{scriptsize}
-\begin{lstlisting}[frame=trBL]
-static void __exit vain_exit(void)
-{
- printk(KERN_INFO "vain_exit: done\n");
-}
-
-module_exit(vain_exit);
-\end{lstlisting}
-\end{scriptsize}
-\pause
-\item Beschreibung
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-MODULE_AUTHOR("Benedikt Spranger <b.spranger@linutronix.de>");
-MODULE_DESCRIPTION("a more or less useless module");
-MODULE_LICENSE("GPL v2");
-MODULE_VERSION("0815");
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\subsubsection{Rumpf Treiber}
-\begin{frame}[fragile]
-\frametitle{Rumpf Treiber}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain/vain.c}
-\end{tiny}
-\end{frame}
-
-\subsubsection{Makefile}
-\begin{frame}[fragile]
-\frametitle{Makefile}
-\begin{scriptsize}
-\lstinputlisting[language=make]{kernel-devel/module-basics/vain/Makefile}
-\end{scriptsize}
-\end{frame}
-
-\subsubsection{Bauen und Laden}
-\begin{frame}[fragile]
-\frametitle{Bauen, laden und entladen des Moduls}
-\begin{itemize}
-\item Bauen
-\pause
-\begin{tiny}
-\begin{verbatim}
-$ make
-make -C /lib/modules/2.6.30/build M=/path/to/vain modules
-make[1]: Entering directory `/usr/src/linux-2.6.30'
- CC [M] /path/to/vain/vain.o
- Building modules, stage 2.
- MODPOST 1 modules
- CC /path/to/vain/vain.mod.o
- LD [M] /path/to/vain/vain.ko
-make[1]: Leaving directory `/usr/src/linux-2.6.30'
-$
-\end{verbatim}
-\end{tiny}
-\pause
-\item Laden
-\pause
-\begin{tiny}
-\begin{verbatim}
-# insmod ./vain.ko
-vain_init: done
-#
-\end{verbatim}
-\end{tiny}
-\item Entladen
-\pause
-\begin{tiny}
-\begin{verbatim}
-# rmmod vain
-vain_exit: done
-#
-\end{verbatim}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Komplexere Module}
-\pause
-\begin{itemize}
-\item Teil eines Bussystems
-\pause
-\begin{itemize}
-\item PCI
-\pause
-\item Platform
-\pause
-\item USB
-\pause
-\item \dots
-\pause
-\end{itemize}
-\item Teil eines Subsystems\footnote{nicht Teil des Vortrages}
-\pause
-\begin{itemize}
-\item Character-Devices
-\pause
-\item Block-Devices
-\pause
-\item Network-Devices
-\pause
-\item \dots
-\end{itemize}
-\end{itemize}
-\end{frame}
-
-\subsubsection{PCI Treiber Modul}
-\begin{frame}[fragile]
-\frametitle{Aufbau eines PCI Treiber Moduls}
-\pause
-\begin{itemize}
-\item Header
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-#include <linux/init.h>
-#include <linux/module.h>
-|#include <linux/pci.h>|
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Init
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-static int __init vain_pci_init(void)
-{
- int err;
-
- |err = pci_register_driver(&vain_pci_driver);|
-
- if (!err)
- printk(KERN_INFO "vain_pci_init: done\n");
- return err;
-}
-
-module_init(vain_pci_init);
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
-\begin{itemize}
-\item Exit
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-static void __exit vain_pci_exit(void)
-{
- |pci_unregister_driver(&vain_pci_driver);|
- printk(KERN_INFO ``vain_pci_exit: done\n'');
-}
-
-module_exit(vain_pci_exit);
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
-\begin{itemize}
-\item struct pci\_driver
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static struct pci_driver vain_pci_driver = {
- .name = "vain_pci",
- .id_table = vain_pci_ids,
- .probe = vain_pci_probe,
- .remove = __devexit_p(vain_pci_remove),
-};|
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
-\begin{itemize}
-\item struct struct pci\_device\_id
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static struct pci_device_id vain_pci_ids[] __devinitdata = {
- {PCI_VENDOR_ID_ILLEGAL_VENDOR, PCI_DEVICE_ID_ILLEGAL_VENDOR_DEVICE,
- PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
- {0, }
-};|
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
-\begin{itemize}
-\item probe
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static int __devinit vain_pci_probe(struct pci_dev *pdev,
- const struct pci_device_id *ent)
-{
- int ret;
-
- ret = pci_enable_device(pdev);
- if (ret)
- goto err_free;
-
- ret = pci_request_regions(pdev, "vain_pci");
- if (ret)
- goto err_disable_device;
-
- info->base = pci_ioremap_bar(pdev, 0);
- if (!info->base) {
- ret = -ENODEV;
- goto err_rel_regs;
- }
-
- return 0;|
-\end{lstlisting}
-\dots
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
-\begin{itemize}
-\item remove
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static void __devexit vain_pci_remove(struct pci_dev *pdev)
-{
- struct vain_pci_info *info = pci_get_drvdata(pdev);
-
- iounmap(info->base);
- pci_release_regions(pdev);
- pci_disable_device(pdev);
- pci_set_drvdata(pdev, NULL);
-
- kfree (info);
-}|
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{PCI Treiber Hintergrund}
-\includegraphics[width=7cm]{images/PCI_driver.png}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{PCI Rumpf Treiber}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_1.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{PCI Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_2.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{PCI Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_3.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{PCI Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_4.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{PCI Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_5.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{PCI Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_6.c}
-\end{tiny}
-\end{frame}
-
-\subsubsection{Platform Treiber Modul}
-\begin{frame}[fragile]
-\frametitle{Aufbau eines Platform Treiber Moduls}
-\pause
-\begin{itemize}
-\item Header
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-#include <linux/init.h>
-#include <linux/module.h>
-|#include <linux/platform_device.h>
-
-#include <asm/io.h>|
-\end{lstlisting}
-\end{tiny}
-\pause
-\item Init
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-static int __init vain_plat_init(void)
-{
- int err;
-
- |err = platform_driver_register(&vain_plat_driver);|
-
- if (!err)
- printk(KERN_INFO ``vain_plat_init: done\n'');
- return err;
-}
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
-\pause
-\begin{itemize}
-\item Exit
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-static void __exit vain_plat_exit(void)
-{
- |platform_driver_unregister(&vain_plat_driver);|
- printk(KERN_INFO ``vain_plat_exit: done\n'');
-}
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
-\pause
-\begin{itemize}
-\item struct platform\_driver
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static struct platform_driver vain_plat_driver = {
- .driver = {
- .name = "vain_plat",
- .owner = THIS_MODULE,
- },
- .probe = vain_plat_probe,
- .remove = __devexit_p(vain_plat_remove),
-};|
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
-\pause
-\begin{itemize}
-\item probe
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static int __devinit vain_plat_probe(struct platform_device *pdev)
-{
- struct resource *res;
- int err;
-
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (unlikely(!res))
- goto err_free;
-
- mem = request_mem_region(res->start, resource_size(res), pdev->name);
- if (!mem)
- goto err_free;
-
- info->base = ioremap(res->start, resource_size(res));
- if (!info->base)
- goto err_ioremap;
-
- platform_set_drvdata(pdev, info);
-
- return 0;|
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
-\pause
-\begin{itemize}
-\item remove
-\pause
-\begin{tiny}
-\begin{lstlisting}[frame=trBL]
-|static int __devexit vain_plat_remove(struct platform_device *pdev)
-{
- struct vain_plat_info *info = platform_get_drvdata(pdev);
- struct resource *res;
-
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- iounmap(info->base);
- release_mem_region(res->start, resource_size(res));
- platform_set_drvdata(pdev, NULL);
-
- kfree (info);
-
- return 0;
-}|
-\end{lstlisting}
-\end{tiny}
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Platform Treiber Hintergrund}
-\includegraphics[width=7cm]{images/plat_driver.png}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Platform Rumpf Treiber}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_1.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Platform Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_2.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Platform Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_3.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Platform Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_4.c}
-\end{tiny}
-\end{frame}
-
-\begin{frame}[fragile]
-\frametitle{Platform Rumpf Treiber (fort.)}
-\begin{tiny}
-\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_5.c}
-\end{tiny}
-\end{frame}
-
-\input{tailpres}
diff --git a/linux-basics/boot-process/Makefile b/linux-basics/boot-process/Makefile
index 1387084..8dc70e0 100644
--- a/linux-basics/boot-process/Makefile
+++ b/linux-basics/boot-process/Makefile
@@ -1,4 +1,3 @@
obj-$(CONFIG_LINUX_BOOT_PROCESS) += hints_boot-process_de.pdf
-obj-$(CONFIG_LINUX_BOOT_PROCESS) += pres_boot-process_de.pdf
obj-$(CONFIG_LINUX_BOOT_PROCESS) += pres_boot-process_en.pdf
obj-handout-$(CONFIG_LINUX_BOOT_PROCESS) += handout_boot-process_de.pdf
diff --git a/linux-basics/boot-process/pres_boot-process_de.tex b/linux-basics/boot-process/pres_boot-process_de.tex
deleted file mode 100644
index 1904fd5..0000000
--- a/linux-basics/boot-process/pres_boot-process_de.tex
+++ /dev/null
@@ -1,95 +0,0 @@
-\input{configpres}
-
-\title{Der Linux-Boot-Prozess}
-\maketitle
-
-\subsection{Boot Prozess}
-
-\subsubsection{Problematik}
-\begin{frame}
-\frametitle{Aufgaben des Bootloaders}
-\begin{itemize}
-\item Low-Level-Initialisierung:
-\pause
-\item Clocks (CPU, PLLs, Peripherie...)
-\pause
-\item Speicher (DRAM-Controller, NAND-Controller...)
-\pause
-\item serielle Schnittstelle
-\pause
-\end{itemize}
-\end{frame}
-
-\subsubsection{Bootloader}
-\begin{frame}
-\frametitle{Gängige Bootloader}
-\begin{itemize}
-\item U-Boot
-\pause
-\item Redboot
-\pause
-\item Konzept aus IPL+Bootkernel
-\end{itemize}
-\end{frame}
-
-\subsubsection{Struktur}
-\begin{frame}
-\frametitle{Ablauf des Bootprozesses}
-\begin{itemize}
-\item Bootloader initialisiert Hardware
-\pause
-\item Bootloader lädt Kernel
-\pause
-\item Bootloader springt Kernel an
-\pause
-\item Dabei Übergabe von Parametern an Kernel
-\pause
-\item Kernel initialsiert Hardware, Treiber
-\pause
-\item Kernel mountet Root-Filesystem
-\pause
-\item Kernel startet '/sbin/init'
-\pause
-\item 'init' liest '/etc/inittab', startet Skripte
-\end{itemize}
-\end{frame}
-
-\subsubsection{Stolperstellen}
-\begin{frame}
-\frametitle{Bootprobleme: 1. Im Bootloader}
-\begin{itemize}
-\item Bootloader nicht korrekt ins Flash geschrieben
-\pause
-\item falsche DRAM/NAND-Timings
-\pause
-\item Ladeadresse für Kernel nicht korrekt
-\pause
-\item Bei TFTP-Boot: IP-Adresse nicht korrekt
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Bootprobleme: 2. Im Kernel}
-\begin{itemize}
-\item Bootloader hinterlässt falsch initialisierte Hardware
-\pause
-\item Bootloader übergibt falsche Parameter
-\pause
-\item Treiber für Rootfs nicht im Kernel
-\pause
-\item Im Rootfs fehlen Device-Nodes
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Bootprobleme: 3. In den Startskripten}
-\begin{itemize}
-\item Im Rootfs fehlen Device-Nodes
-\pause
-\item Im Rootfs fehlen nötige Programme bzw. symlinks
-\pause
-\item Startskripte können nicht mit jeder Situation umgehen
-\end{itemize}
-\end{frame}
-
-\input{tailpres}
diff --git a/realtime/rt-basics/Makefile b/realtime/rt-basics/Makefile
index c92d852..cc1fbdf 100644
--- a/realtime/rt-basics/Makefile
+++ b/realtime/rt-basics/Makefile
@@ -1,3 +1,2 @@
-obj-$(CONFIG_REALTIME_BASICS) += pres_rt-basics_de.pdf
obj-$(CONFIG_REALTIME_BASICS) += pres_rt-basics_en.pdf
obj-handout-$(CONFIG_REALTIME_BASICS) += handout_rt-basics_de.pdf
diff --git a/realtime/rt-basics/pres_rt-basics_de.tex b/realtime/rt-basics/pres_rt-basics_de.tex
deleted file mode 100644
index 66a78eb..0000000
--- a/realtime/rt-basics/pres_rt-basics_de.tex
+++ /dev/null
@@ -1,205 +0,0 @@
-\input{configpres}
-
-\title{Block \lq Realtime Linux\rq}
-\maketitle
-
-\subtitle{Echtzeit}
-
-\begin{frame}
-\frametitle{Was ist Echtzeit?}
-\begin{itemize}
-\item Korrektheit bedeutet auch Ausführung zum korrekten Zeitpunkt
-\item Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Echtzeit ''anschaulich''}
-\begin{overprint}
-\onslide<1>
-\begin{alertblock}{Wir erinnern uns}
-Nicht Einhalten des korrekten Zeitrahmens führt zu einem Fehler!
-\end{alertblock}
-\onslide<2>
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/nuclear.png}
-\end{figure}
-\end{overprint}
-\end{frame}
-
-\begin{frame}
-\frametitle{Anwendungsbereiche}
-\begin{itemize}
-\item Steuerungs- / Automatisierungstechnik
-\item Multimediasysteme
-\item Luft- und Raumfahrttechnik
-\item Finanzdienstleistung
-\item ...
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Anforderungen}
-\begin{itemize}
-\item Deterministisches Zeitverhalten
-\item Unterbrechbarkeit
-\item Priority Inheritance / Priority Ceiling
-\end{itemize}
-\end{frame}
-
-\subsubsection{Priority Inversion}
-\begin{frame}
-\frametitle{Priority Inversion}
-\begin{figure}[h]
-\centering
-\includegraphics[width=0.8\textwidth]{images/prio_inv.png}
-\end{figure}
-\end{frame}
-
-\subsubsection{Linux und Echtzeit}
-\begin{frame}
-\frametitle{Linux und Echtzeit}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/gpos_vs_rt.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}
-\frametitle{Ansätze}
-\begin{itemize}
-\item Dual-Kernel
-\item In-Kernel / Single Kernel
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Dual-Kernel}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/dual_kernel.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}
-\frametitle{Single-Kernel}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/single_kernel.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}
-\frametitle{RTAI}
-\begin{itemize}
-\item Prof. Paolo Mantegazza, Universität Mailand
-\item Dual-Kernel Ansatz
-\item Echtzeit im Kernelspace
-\item Userspace Echtzeittasks nur eingeschränkt möglich
-\item Oberstes Designziel: Möglichst niedrige Latenzzeiten
-\item Unterstützte Plattformen: x86, x86\_64, einige ARM Plattformen
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{RTAI}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/rtai.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}
-\frametitle{Xenomai}
-\begin{itemize}
-\item Gegründet 2001
-\item Echtzeit im Userpace
-\item Skins bilden API verschiedenster RTOSse nach
-\item Dual-Kernel Ansatz
-\item Unterstützte Plattformen: x86, x86\_64, PowerPC, ARM, ia64
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Xenomai}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/xenomai.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}
-\frametitle{Xenomai / IPIPE}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/ipipe.png}
-\end{figure}
-\end{frame}
-
-\begin{frame}
-\frametitle{Drum prüfe, wer sich ewig bindet...}
-\begin{overprint}
-\onslide<1>
-\begin{figure}[h]
-\centering
-\includegraphics[width=0.8\textwidth]{images/mar01.png}
-\end{figure}
-\onslide<2>
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/mar02.png}
-\end{figure}
-\onslide<3>
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/mar03.png}
-\end{figure}
-\end{overprint}
-\end{frame}
-
-\begin{frame}
-\frametitle{Preempt RT}
-\begin{itemize}
-\item Thomas Gleixner, Ingo Molnar
-\item In-Kernel Ansatz
-\item Große Entwicklergemeinde
-\item Viele Funktionen bereits nach ''Mainline'' Linux übernommen
-\item POSIX Realtime
-\item Hohe Akzeptanz, vollständige Integration in Linux 2006 beschlossen
-\end{itemize}
-\end{frame}
-
-\begin{frame}
-\frametitle{Preempt RT und Mainline}
-\textit{''Controlling a laser with Linux is crazy, but everyone in this room is
-crazy in his own way. So if you want to use Linux to control an industrial
-welding laser, I have no problem with your using Preempt RT''} - Linus Torvalds
-auf dem Kernel Summit 2006
-\end{frame}
-
-\begin{frame}
-\frametitle{Wie macht Preempt RT Linux echtzeitfähig?}
-\begin{overprint}
-\onslide<1>
-\begin{alertblock}{Wir erinnern uns...}
-Unterbrechbarkeit ist eine zentrale Anforderung an ein Echtzeitsystem
-\end{alertblock}
-\onslide<2>
-\begin{itemize}
-\item Locking Primitiven: Spinlocks werden durch RT Mutexe ersetzt, die schlafen
-können. Raw Spinlocks ersetzen die ursprüngliche Spinlock
-\item Interrupt Handler laufen per default in einem Kernelthread
-\end{itemize}
-\end{overprint}
-\end{frame}
-
-\begin{frame}
-\frametitle{Preempt RT}
-\begin{figure}[h]
-\centering
-\includegraphics[height=0.5\textwidth]{images/preempt_rt.png}
-\end{figure}
-\end{frame}
-
-\input{tailpres}
diff --git a/realtime/rt-specialties/Makefile b/realtime/rt-specialties/Makefile
index 11da55f..4d11316 100644
--- a/realtime/rt-specialties/Makefile
+++ b/realtime/rt-specialties/Makefile
@@ -1,4 +1,3 @@
obj-$(CONFIG_REALTIME_SPECIALITIES) += hints_rt-specialties_de.pdf
-obj-$(CONFIG_REALTIME_SPECIALITIES) += pres_rt-specialties_de.pdf
obj-$(CONFIG_REALTIME_SPECIALITIES) += pres_rt-specialties_en.pdf
obj-handout-$(CONFIG_REALTIME_SPECIALITIES) += handout_rt-specialties_de.pdf