summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2011-01-26 18:49:31 +0100
committerManuel Traut <manut@linutronix.de>2011-01-26 18:49:31 +0100
commit6fb0950420424ff27f6aa89429a763409b088ed6 (patch)
tree3f981148144a4f5e2ddfc66a00134e3158867d7e
parentf020c2ca1ef336cee116ec3df47a984289c2c18e (diff)
added kernel devel
Signed-off-by: Manuel Traut <manut@linutronix.de>
-rw-r--r--Makefile8
-rw-r--r--handout_master.tex4
-rw-r--r--kernel-devel/Makefile2
-rw-r--r--kernel-devel/TODO3
-rw-r--r--kernel-devel/char-device/Makefile4
-rw-r--r--kernel-devel/char-device/pres_char-device_de.tex30
-rw-r--r--kernel-devel/driver-basics/Makefile9
-rw-r--r--kernel-devel/driver-basics/handout_driver-basics_de.tex17
-rw-r--r--kernel-devel/driver-basics/pres_driver-basics_de.tex24
-rw-r--r--kernel-devel/kernel-basics/Makefile4
-rw-r--r--kernel-devel/kernel-basics/handout_kernel-basics_de.tex20
-rw-r--r--kernel-devel/kernel-basics/pres_kernel-basics_de.tex28
-rw-r--r--kernel-devel/kernel-best-practices/Makefile4
-rw-r--r--kernel-devel/kernel-build/Makefile4
-rw-r--r--kernel-devel/kernel-build/handout_kernel-build_de.tex29
-rw-r--r--kernel-devel/linux-mm-basics/Makefile4
-rw-r--r--kernel-devel/linux-mm-basics/pres_linux-mm-basics_en.tex39
-rw-r--r--kernel-devel/module-basics/Makefile4
-rw-r--r--kernel-devel/module-basics/pres_module-basics_de.tex53
-rw-r--r--kernel-devel/section.tex1
-rw-r--r--kernel-devel/uio-driver/Makefile4
-rw-r--r--kernel-devel/uio-driver/handout_uio-driver_de.tex32
-rw-r--r--kernel-devel/uio-driver/pres_uio-driver_en.tex52
-rw-r--r--pres_master.tex6
24 files changed, 126 insertions, 259 deletions
diff --git a/Makefile b/Makefile
index cdb2d11..6fcc4a6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-SUBDIRS = application-devel flash-memory frameworks
-#kernel-devel linux-basics realtime protocols
+SUBDIRS = application-devel flash-memory frameworks kernel-devel
+#linux-basics realtime protocols
default:
make all
@@ -18,8 +18,8 @@ book::
touch tailpres.tex
mv tailhandout.tex _tailhandout.tex
touch tailhandout.tex
- #pdflatex pres_master.tex
- #pdflatex pres_master.tex
+ pdflatex pres_master.tex
+ pdflatex pres_master.tex
pdflatex handout_master.tex
pdflatex handout_master.tex
rm configpres.tex confighandout.tex tailpres.tex tailhandout.tex
diff --git a/handout_master.tex b/handout_master.tex
index f5ccb3a..d9fdf1d 100644
--- a/handout_master.tex
+++ b/handout_master.tex
@@ -9,4 +9,8 @@
\section{Flashspeicher}
\input{./flash-memory/mtd/handout_mtd_de.tex}
\input{./flash-memory/ubi/handout_ubi_de.tex}
+\section{Treiberentwicklung}
+\input{./kernel-devel/kernel-basics/handout_kernel-basics_de.tex}
+\input{./kernel-devel/kernel-build/handout_kernel-build_de.tex}
+\input{./kernel-devel/uio-driver/handout_uio-driver_de.tex}
\input{tailmasterhandout}
diff --git a/kernel-devel/Makefile b/kernel-devel/Makefile
index c0c47ad..0a202ea 100644
--- a/kernel-devel/Makefile
+++ b/kernel-devel/Makefile
@@ -1,4 +1,4 @@
-SUBDIRS = `ls -1 | grep -v *.tex | grep -v Makefile`
+SUBDIRS = `ls -1 | grep -v *.tex | grep -v Makefile | grep -v TODO`
all clean::
for dir in $(SUBDIRS) ; do \
diff --git a/kernel-devel/TODO b/kernel-devel/TODO
new file mode 100644
index 0000000..3f5e022
--- /dev/null
+++ b/kernel-devel/TODO
@@ -0,0 +1,3 @@
+- driver_basics, see hint file
+- best_practices, see hint file
+- some handouts
diff --git a/kernel-devel/char-device/Makefile b/kernel-devel/char-device/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/char-device/Makefile
+++ b/kernel-devel/char-device/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/char-device/pres_char-device_de.tex b/kernel-devel/char-device/pres_char-device_de.tex
index 7df54c5..6568af4 100644
--- a/kernel-devel/char-device/pres_char-device_de.tex
+++ b/kernel-devel/char-device/pres_char-device_de.tex
@@ -1,20 +1,11 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
-\usepackage{psfrag}
-\usepackage{listings}
+\input{configpres}
\title{Interaktion eines Character Device Treibers}
-\institute{Linutronix GmbH}
-
-\begin{document}
-\lstset{language=[ANSI]C, moredelim=[is][\color{blue}]{|}{|}}
\maketitle
-% ----- Slide Syscalls ------------------
+\subsection{Character Devices}
+
+\subsubsection{Syscall Interface}
\begin{frame}
\frametitle{Syscall Interface}
\begin{center}
@@ -22,7 +13,7 @@
\end{center}
\end{frame}
-% ----- Slide Aufbau ------------------
+\subsubsection{Struktur}
\begin{frame}
\frametitle{Interaktion eines Character Device Treibers}
\pause
@@ -49,7 +40,6 @@
\end{itemize}
\end{frame}
-% ----- Slide open ------------------
\begin{frame}[fragile]
\frametitle{open}
\pause
@@ -78,7 +68,6 @@ fehl und es gibt keine Benachrichtigung des Treibers.
\end{center}
\end{frame}
-% ----- Slide release ------------------
\begin{frame}[fragile]
\frametitle{release}
\pause
@@ -107,7 +96,6 @@ fehl und es gibt keine Benachrichtigung des Treibers.
\end{center}
\end{frame}
-% ----- Slide read ------------------
\begin{frame}[fragile]
\frametitle{read}
\pause
@@ -135,7 +123,6 @@ ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
\end{center}
\end{frame}
-% ----- Slide write ------------------
\begin{frame}[fragile]
\frametitle{write}
\pause
@@ -163,7 +150,6 @@ von \emph{copy\_from\_user} aus dem Userspace kopiert.
\end{center}
\end{frame}
-% ----- Slide fsync ------------------
\begin{frame}[fragile]
\frametitle{fsync}
\pause
@@ -190,7 +176,6 @@ int (*fsync) (struct file *, struct dentry *, int datasync);
\end{center}
\end{frame}
-% ----- Slide llseek ------------------
\begin{frame}[fragile]
\frametitle{llseek}
\pause
@@ -217,7 +202,6 @@ loff_t (*llseek) (struct file *, loff_t, int);
\end{center}
\end{frame}
-% ----- Slide poll ------------------
\begin{frame}[fragile]
\frametitle{poll}
\pause
@@ -245,7 +229,6 @@ implementiert, so muss nicht blockierendes Lesen und Schreiben möglich sein.
\end{center}
\end{frame}
-% ----- Slide mmap ------------------
\begin{frame}[fragile]
\frametitle{mmap}
\pause
@@ -273,7 +256,6 @@ Userspace-Prozesses an.
\end{center}
\end{frame}
-% ----- Slide ioctl ------------------
\begin{frame}[fragile]
\frametitle{ioctl}
\pause
@@ -302,4 +284,4 @@ werden.
\end{center}
\end{frame}
-\end{document}
+\input{tailpres}
diff --git a/kernel-devel/driver-basics/Makefile b/kernel-devel/driver-basics/Makefile
new file mode 100644
index 0000000..d641258
--- /dev/null
+++ b/kernel-devel/driver-basics/Makefile
@@ -0,0 +1,9 @@
+all:
+ for pdf in `ls -1 *.tex` ; do \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ done
+
+clean:
+ rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out
+
diff --git a/kernel-devel/driver-basics/handout_driver-basics_de.tex b/kernel-devel/driver-basics/handout_driver-basics_de.tex
deleted file mode 100644
index 4c391b2..0000000
--- a/kernel-devel/driver-basics/handout_driver-basics_de.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\documentclass{article}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-
-\begin{document}
-
-\section*{Titel}
-
-\subsection*{Abschnitt1}
-
-Text
-
-\subsection*{Abschnitt2}
-
-Text
-
-\end{document}
diff --git a/kernel-devel/driver-basics/pres_driver-basics_de.tex b/kernel-devel/driver-basics/pres_driver-basics_de.tex
deleted file mode 100644
index 07db328..0000000
--- a/kernel-devel/driver-basics/pres_driver-basics_de.tex
+++ /dev/null
@@ -1,24 +0,0 @@
-\documentclass{article}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-
-\begin{document}
-
-\section*{Block \lq Was ist Linux?\rq}
-
-\subsection*{Lernziele}
-\begin{itemize}
-\item Lernziel 1
-\item Lernziel 2
-\item Lernziel 3
-\end{itemize}
-
-\subsection*{Unterrichts-Ablauf}
-
-Hinweise zur Präsentation, Zeitplanung, etc.
-
-\subsection*{Übungen bei vorhandener Hardware}
-
-Hinweise zu Übungen, Zeitlimit dazu.
-
-\end{document}
diff --git a/kernel-devel/kernel-basics/Makefile b/kernel-devel/kernel-basics/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/kernel-basics/Makefile
+++ b/kernel-devel/kernel-basics/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/kernel-basics/handout_kernel-basics_de.tex b/kernel-devel/kernel-basics/handout_kernel-basics_de.tex
index 057f4bc..38d3a08 100644
--- a/kernel-devel/kernel-basics/handout_kernel-basics_de.tex
+++ b/kernel-devel/kernel-basics/handout_kernel-basics_de.tex
@@ -1,12 +1,6 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
-\usepackage{lxextras}
+\input{confighandout}
-\begin{document}
-
-\section*{Kernel-Grundlagen}
+\subsection{Kernel-Grundlagen}
Der Linux-Kernel ist moderner Betriebssystemkern, der sich unter anderem
durch folgende Eigenschaften auszeichnet:
@@ -31,7 +25,7 @@ auch in vielen anderen Bereichen wie dem Cluster-Computing (Google, Rendern
von Spielfilm-Effekten in Hollywood) werden die Aufgaben heute fast
ausschließlich mit Linux gelöst.
-\subsection*{Aufbau des Kernels}
+\subsubsection{Aufbau des Kernels}
Der Sourcecode des Kernels ist recht übersichtlich in Subsysteme gegliedert.
Die Grenzen der einzelnen Subsysteme sind keinesfalls scharf definiert, aber
@@ -70,7 +64,7 @@ Treiber-Baums im \cmd{sysfs} kommt automatisch allen Treibern zugute.
Diese übergeordneten Treiberfunktionen werden als \emph{Driver Core}
bezeichnet.
-\subsection*{Kernel Maintainer}
+\subsubsection{Kernel Maintainer}
Jedes Subsystem wird normalerweise von einem, manchmal auch mehreren
Programmierern betreut. Diese Betreuer bezeichnet man als \emph{Maintainer}.
@@ -93,7 +87,7 @@ Thema zuständige Mailingliste. Fragen oder Änderungsvorschläge sollte man
\emph{immer} an die Mailingliste senden und nicht persönlich an den
Maintainer!
-\subsection*{Entwicklungsprozess}
+\subsubsection{Entwicklungsprozess}
Änderungen am Linux-Kernel erfolgen ausschließlich durch \emph{Patche}. Ein
Patch ist eine durch das Programm \cmd{diff} Textdatei, die die Änderungen
@@ -121,7 +115,7 @@ Informationen dazu findet man in den Kernelquellen unter
\cmd{Documentation/SubmittingPatches}
-\subsection*{Kernel-Konfiguration}
+\subsubsection{Kernel-Konfiguration}
Der Kernel ist durch eine Vielzahl an Optionen (mehrere 1000) in weiten
Bereichen konfigurierbar. Die Konfiguration wird im Hauptverzeichnis der
@@ -139,4 +133,4 @@ Das Kernel-Buildsystem stellt ein eigenes Subsystem dar und hat einen eigenen
Maintainer. Es handhabt den kompletten Build-Prozess des Kernels und
unterstützt dabei auch explizit Cross-Compiling.
-\end{document}
+\input{tailhandout}
diff --git a/kernel-devel/kernel-basics/pres_kernel-basics_de.tex b/kernel-devel/kernel-basics/pres_kernel-basics_de.tex
index 8b6161e..372ada2 100644
--- a/kernel-devel/kernel-basics/pres_kernel-basics_de.tex
+++ b/kernel-devel/kernel-basics/pres_kernel-basics_de.tex
@@ -1,22 +1,13 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
-\usepackage{lxextras}
+\input{configpres}
\title{Kernel-Grundlagen}
-\institute{Linutronix GmbH}
-
-\begin{document}
-
\maketitle
+\subsection{Grundlagen}
-% ----- Slide ------------------
+\subsubsection{Kernel Eigenschaften}
\begin{frame}
-\frametitle{Kernel-Eigenschaften}
+\frametitle{Kernel Eigenschaften}
\begin{itemize}
\item Freie Software (GPL Version 2)
\pause
@@ -42,14 +33,14 @@
\end{itemize}
\end{frame}
-% ----- Slide ------------------
+\subsubsection{Aufbau}
\begin{frame}
\frametitle{Aufbau des Kernels}
\centering
\includegraphics[width=0.8\textwidth]{images/Subsystems.png}
\end{frame}
-% ----- Slide ------------------
+\subsubsection{Maintainer}
\begin{frame}
\frametitle{Kernel Maintainer}
\begin{itemize}
@@ -65,7 +56,7 @@
\end{itemize}
\end{frame}
-% ----- Slide ------------------
+\subsubsection{Entwicklungsprozess}
\begin{frame}
\frametitle{Entwicklungsprozess}
\begin{itemize}
@@ -81,7 +72,7 @@
\end{itemize}
\end{frame}
-% ----- Slide ------------------
+\subsubsection{Konfiguration}
\begin{frame}
\frametitle{Kernel-Konfiguration}
\begin{itemize}
@@ -99,5 +90,4 @@
\end{itemize}
\end{frame}
-
-\end{document}
+\input{tailpres}
diff --git a/kernel-devel/kernel-best-practices/Makefile b/kernel-devel/kernel-best-practices/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/kernel-best-practices/Makefile
+++ b/kernel-devel/kernel-best-practices/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/kernel-build/Makefile b/kernel-devel/kernel-build/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/kernel-build/Makefile
+++ b/kernel-devel/kernel-build/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/kernel-build/handout_kernel-build_de.tex b/kernel-devel/kernel-build/handout_kernel-build_de.tex
index f0e5fae..bd28a31 100644
--- a/kernel-devel/kernel-build/handout_kernel-build_de.tex
+++ b/kernel-devel/kernel-build/handout_kernel-build_de.tex
@@ -1,14 +1,8 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
-\usepackage{lxextras}
+\input{confighandout}
-\begin{document}
+\subsection{Kernel konfigurieren und kompilieren}
-\section*{Kernel konfigurieren und kompilieren}
-
-\subsection*{Vorarbeiten}
+\subsubsection{Vorarbeiten}
Bevor man einen Kernel konfigurieren kann, sollte man wissen, was man will.
Das hört sich zunächst nach einer trivialen Binsenweisheit an, kann aber
@@ -32,7 +26,7 @@ beispielsweise keine Gerätedateien unterstützt. Will man Linux von einem
USB-Stick booten, so wird man diesen dazu beispielsweise mit einem
ext2-Dateisystem versehen.
- \subsection*{Kernel-Konfiguration}
+\subsubsection{Kernel-Konfiguration}
Mit diesen Informationen versehen, kann man jetzt die Konfiguration beginnen.
Dies erfolgt durch Eingabe von
@@ -54,7 +48,7 @@ Man sollte bei der Konfiguration zuerst grundlegende Dinge wie den
Prozessortyp angeben, da untergeordnete Eigenschaften oder Treiber davon
abhängig sein können.
-\subsection*{Module, ja oder nein?}
+\subsubsection{Module, ja oder nein?}
Bei üblichen Kerneln für Desktop-Systeme wird man immer einen Großteil der
Treiber als Module kompilieren. Solche Rechner besitzen viele Schnittstellen,
über die man später die Hardware erweitern kann, und kann den Kernel bereits
@@ -83,7 +77,7 @@ Einzelfall ab. Bei Embedded Systems kommt dies aber durchaus öfter vor.
Aus verständlichen Gründen dürfen Treiber, die zum Booten und Mounten des
Rootfs benötigt werden, niemals als Module gebaut werden!
-\subsection*{initrd}
+\subsubsection{initrd}
Die Kernel von Distributionen haben das Problem, dass sie auf möglichst vielen
unterschiedlichen Rechnern booten müssen. Würde man die Treiber für alle
@@ -100,7 +94,7 @@ aus dem Speicher entfernt werden. Dieses Verfahren nennt man \emph{initrd}
Wenn man einen Kernel für ein bestimmtes Board selbst kompiliert, braucht man
nie eine initrd, da man ja genau die richtigen Treiber fest einkompilieren kann.
-\subsection*{initramfs}
+\subsubsection{initramfs}
Ein anderes Verfahren, bei dem der Kernel zunächst eine RAM-Disk anlegt, ist
\emph{initramfs}. Im Unterschied zu initrd wird diese aber nicht aus einem
@@ -125,7 +119,7 @@ Eine weitere Anwendung sind Firmware-Updates. So könnten die Startskripte
des initramfs beispielsweise auf einem Server nachschauen, ob Updates
vorhanden sind, und diese dann anwenden.
-\subsection*{Kernel kompilieren}
+\subsubsection{Kernel kompilieren}
Nach abgeschlossener Kernel-Konfiguration kompiliert man den Kernel einfach
durch Eingabe von
@@ -168,7 +162,7 @@ Hauptverzeichnis der Kernelquellen, so ergibt sich folgender Aufruf:
./makearm -j3
\end{lstlisting}
-\subsection*{Kernel installieren}
+\subsubsection{Kernel installieren}
Einen Kernel für den lokalen Rechner (also den, auf dem man auch kompiliert
hat) installiert man einfach durch Eingabe von
@@ -217,7 +211,7 @@ Root-Filesystem per NFS aus diesem Verzeichnis gemountet, so stehen die Module
sofort und ohne Reboot zur Verfügung. Diese Vorgehensweise hat sich bei der
Entwicklung von Treibern für Embedded Systems sehr bewährt.
-\subsection*{Kontrollfragen}
+\subsubsection{Kontrollfragen}
\begin{enumerate}
\item Beschreiben Sie Unterschiede zwischen initrd und initramfs.
@@ -226,5 +220,4 @@ Entwicklung von Treibern für Embedded Systems sehr bewährt.
\item Nennen Sie eine Anwendung von initramfs.
\end{enumerate}
-
-\end{document}
+\input{tailhandout}
diff --git a/kernel-devel/linux-mm-basics/Makefile b/kernel-devel/linux-mm-basics/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/linux-mm-basics/Makefile
+++ b/kernel-devel/linux-mm-basics/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/linux-mm-basics/pres_linux-mm-basics_en.tex b/kernel-devel/linux-mm-basics/pres_linux-mm-basics_en.tex
index 8ff0da7..f46c91d 100644
--- a/kernel-devel/linux-mm-basics/pres_linux-mm-basics_en.tex
+++ b/kernel-devel/linux-mm-basics/pres_linux-mm-basics_en.tex
@@ -1,23 +1,16 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
+\input{configpres}
-\title{Linux Memory Management basics}
-\institute{Linutronix GmbH}
+\title{Linux Memory Management}
+\maketitle
-\begin{document}
+\subsection{Linux Memory Management}
-\maketitle
\begin{frame}
\frametitle{Overview}
\tableofcontents
\end{frame}
-\section{Basics}
-\subsection{Overview}
+\subsubsection{Basics}
\begin{frame}
\frametitle{Overview}
\begin{itemize}
@@ -76,7 +69,7 @@ Possible settings are:
\end{itemize}
\end{frame}
-\subsection{The stack}
+\subsubsection{The stack}
\begin{frame}
\frametitle{The stack}
\begin{itemize}
@@ -90,8 +83,7 @@ Possible settings are:
\end{itemize}
\end{frame}
-\subsection{The heap}
-
+\subsubsection{The heap}
\begin{frame}
\frametitle{The heap: Userland handling}
\begin{itemize}
@@ -121,8 +113,8 @@ guarantee that the memory really is available.
\end{itemize}
\end{frame}
-\section{Do's and Dont's}
-\subsection{The heap}
+\subsection{Do's and Dont's}
+\subsubsection{The heap}
% fragmentation
% check return value
% ulimit (limit memory consumption)
@@ -176,8 +168,8 @@ file locks (-x) unlimited
\end{verbatim}
\end{frame}
-\section{Realtime}
-\subsection{General}
+\subsection{Realtime}
+\subsubsection{General}
\begin{frame}[fragile]
\frametitle{Locking the memory}
\begin{verbatim}
@@ -188,7 +180,8 @@ if(mlockall(MCL_CURRENT|MCL_FUTURE) == -1) {
}
\end{verbatim}
\end{frame}
-\subsection{Stack}
+
+\subsubsection{Stack}
\begin{frame}[fragile]
\frametitle{Stack prefaulting}
\begin{verbatim}
@@ -203,7 +196,7 @@ void stack_prefault(void) {
\end{verbatim}
\end{frame}
-\subsection{Heap}
+\subsubsection{Heap}
\begin{frame}
\frametitle{Allocations from Realtime context}
\begin{itemize}
@@ -241,7 +234,7 @@ static void reserve_process_memory(int size)
\end{verbatim}
\end{frame}
-\section*{sources}
+\subsection*{sources}
\begin{frame}
\frametitle{sources}
\begin{thebibliography}{1}
@@ -250,4 +243,4 @@ static void reserve_process_memory(int size)
\end{thebibliography}
\end{frame}
-\end{document}
+\input{tailpres}
diff --git a/kernel-devel/module-basics/Makefile b/kernel-devel/module-basics/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/module-basics/Makefile
+++ b/kernel-devel/module-basics/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/module-basics/pres_module-basics_de.tex b/kernel-devel/module-basics/pres_module-basics_de.tex
index 533a668..2adbf59 100644
--- a/kernel-devel/module-basics/pres_module-basics_de.tex
+++ b/kernel-devel/module-basics/pres_module-basics_de.tex
@@ -1,20 +1,11 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
-\usepackage{psfrag}
-\usepackage{listings}
+\input{configpres}
\title{Treiber Modul Grundlagen}
-\institute{Linutronix GmbH}
-
-\begin{document}
-\lstset{language=[ANSI]C, moredelim=[is][\color{blue}]{|}{|}}
\maketitle
-% ----- Slide Aufbau ------------------
+\subsection{Kernel Module}
+
+\subsubsection{Aufbau}
\begin{frame}[fragile]
\frametitle{Aufbau eines Treiber Moduls}
\pause
@@ -44,7 +35,6 @@ module_init(vain_init);
\end{itemize}
\end{frame}
-% ----- Slide Aufbau (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Aufbau (fort.)}
\begin{itemize}
@@ -74,7 +64,7 @@ MODULE_VERSION("0815");
\end{itemize}
\end{frame}
-% ----- Slide Rumpf Treiber ------------------
+\subsubsection{Rumpf Treiber}
\begin{frame}[fragile]
\frametitle{Rumpf Treiber}
\begin{tiny}
@@ -82,7 +72,7 @@ MODULE_VERSION("0815");
\end{tiny}
\end{frame}
-% ----- Slide Makefile ------------------
+\subsubsection{Makefile}
\begin{frame}[fragile]
\frametitle{Makefile}
\begin{scriptsize}
@@ -90,7 +80,7 @@ MODULE_VERSION("0815");
\end{scriptsize}
\end{frame}
-% ----- Slide build ------------------
+\subsubsection{Bauen und Laden}
\begin{frame}[fragile]
\frametitle{Bauen, laden und entladen des Moduls}
\begin{itemize}
@@ -132,7 +122,6 @@ vain_exit: done
\end{itemize}
\end{frame}
-% ----- Slide Komplexere Module ------------------
\begin{frame}
\frametitle{Komplexere Module}
\pause
@@ -163,7 +152,7 @@ vain_exit: done
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber ------------------
+\subsubsection{PCI Treiber Modul}
\begin{frame}[fragile]
\frametitle{Aufbau eines PCI Treiber Moduls}
\pause
@@ -199,7 +188,6 @@ module_init(vain_pci_init);
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
\begin{itemize}
@@ -219,7 +207,6 @@ module_exit(vain_pci_exit);
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
\begin{itemize}
@@ -238,7 +225,6 @@ module_exit(vain_pci_exit);
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
\begin{itemize}
@@ -256,7 +242,6 @@ module_exit(vain_pci_exit);
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
\begin{itemize}
@@ -290,7 +275,6 @@ module_exit(vain_pci_exit);
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines PCI Treiber Moduls (fort.)}
\begin{itemize}
@@ -314,13 +298,11 @@ module_exit(vain_pci_exit);
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber Hintergrund ------------------
\begin{frame}
\frametitle{PCI Treiber Hintergrund}
\includegraphics[width=7cm]{images/PCI_driver.png}
\end{frame}
-% ----- Slide PCI Rumpf Treiber ------------------
\begin{frame}[fragile]
\frametitle{PCI Rumpf Treiber}
\begin{tiny}
@@ -328,7 +310,6 @@ module_exit(vain_pci_exit);
\end{tiny}
\end{frame}
-% ----- Slide PCI Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{PCI Rumpf Treiber (fort.)}
\begin{tiny}
@@ -336,7 +317,6 @@ module_exit(vain_pci_exit);
\end{tiny}
\end{frame}
-% ----- Slide PCI Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{PCI Rumpf Treiber (fort.)}
\begin{tiny}
@@ -344,7 +324,6 @@ module_exit(vain_pci_exit);
\end{tiny}
\end{frame}
-% ----- Slide PCI Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{PCI Rumpf Treiber (fort.)}
\begin{tiny}
@@ -352,7 +331,6 @@ module_exit(vain_pci_exit);
\end{tiny}
\end{frame}
-% ----- Slide PCI Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{PCI Rumpf Treiber (fort.)}
\begin{tiny}
@@ -360,7 +338,6 @@ module_exit(vain_pci_exit);
\end{tiny}
\end{frame}
-% ----- Slide PCI Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{PCI Rumpf Treiber (fort.)}
\begin{tiny}
@@ -368,7 +345,7 @@ module_exit(vain_pci_exit);
\end{tiny}
\end{frame}
-% ----- Slide Platform Treiber ------------------
+\subsubsection{Platform Treiber Modul}
\begin{frame}[fragile]
\frametitle{Aufbau eines Platform Treiber Moduls}
\pause
@@ -404,7 +381,6 @@ static int __init vain_plat_init(void)
\end{itemize}
\end{frame}
-% ----- Slide Platform Treiber ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
\pause
@@ -423,7 +399,6 @@ static void __exit vain_plat_exit(void)
\end{itemize}
\end{frame}
-% ----- Slide Platform Treiber ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
\pause
@@ -445,7 +420,6 @@ static void __exit vain_plat_exit(void)
\end{itemize}
\end{frame}
-% ----- Slide Platform Treiber ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
\pause
@@ -479,7 +453,6 @@ static void __exit vain_plat_exit(void)
\end{itemize}
\end{frame}
-% ----- Slide Platform Treiber ------------------
\begin{frame}[fragile]
\frametitle{Aufbau eines Platform Treiber Moduls (fort.)}
\pause
@@ -507,13 +480,11 @@ static void __exit vain_plat_exit(void)
\end{itemize}
\end{frame}
-% ----- Slide PCI Treiber Hintergrund ------------------
\begin{frame}
\frametitle{Platform Treiber Hintergrund}
\includegraphics[width=7cm]{images/plat_driver.png}
\end{frame}
-% ----- Slide Platform Rumpf Treiber ------------------
\begin{frame}[fragile]
\frametitle{Platform Rumpf Treiber}
\begin{tiny}
@@ -521,7 +492,6 @@ static void __exit vain_plat_exit(void)
\end{tiny}
\end{frame}
-% ----- Slide Platform Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Platform Rumpf Treiber (fort.)}
\begin{tiny}
@@ -529,7 +499,6 @@ static void __exit vain_plat_exit(void)
\end{tiny}
\end{frame}
-% ----- Slide Platform Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Platform Rumpf Treiber (fort.)}
\begin{tiny}
@@ -537,7 +506,6 @@ static void __exit vain_plat_exit(void)
\end{tiny}
\end{frame}
-% ----- Slide Platform Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Platform Rumpf Treiber (fort.)}
\begin{tiny}
@@ -545,7 +513,6 @@ static void __exit vain_plat_exit(void)
\end{tiny}
\end{frame}
-% ----- Slide Platform Rumpf Treiber (fort.) ------------------
\begin{frame}[fragile]
\frametitle{Platform Rumpf Treiber (fort.)}
\begin{tiny}
@@ -553,4 +520,4 @@ static void __exit vain_plat_exit(void)
\end{tiny}
\end{frame}
-\end{document}
+\input{tailpres}
diff --git a/kernel-devel/section.tex b/kernel-devel/section.tex
new file mode 100644
index 0000000..4b78c2f
--- /dev/null
+++ b/kernel-devel/section.tex
@@ -0,0 +1 @@
+\section{Kernelprogrammierung}
diff --git a/kernel-devel/uio-driver/Makefile b/kernel-devel/uio-driver/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/uio-driver/Makefile
+++ b/kernel-devel/uio-driver/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/uio-driver/handout_uio-driver_de.tex b/kernel-devel/uio-driver/handout_uio-driver_de.tex
index 546c7fe..f25b538 100644
--- a/kernel-devel/uio-driver/handout_uio-driver_de.tex
+++ b/kernel-devel/uio-driver/handout_uio-driver_de.tex
@@ -1,12 +1,6 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
-\usepackage{lxextras}
+\input{confighandout}
-\begin{document}
-
-\section*{Linux-Treiber im Userspace}
+\subsection{Linux-Treiber im Userspace}
Das ab Linux 2.6.23 im stabilen Kernel verfügbare Userspace-I/O-Framework
(UIO) ermöglicht, bestimmte Treiber fast vollständig in den Userspace zu
@@ -64,7 +58,7 @@ einkompiliert wird, muss dieser Lizenz genügen, das heißt, der Sourcecode muss
(meist illegale) Tricks angewandt, um dieser Bedingung der GPL zu entgehen und
ihren Kernelcode unter Verschluss zu halten.
-\subsection*{UIO löst Probleme}
+\subsubsection{UIO löst Probleme}
Die geschilderte Problematik führte bereits vor längerer Zeit zu Überlegungen,
zumindest Teile eines Treibers in den Userspace zu verlagern. I/O-Hardware
@@ -118,7 +112,7 @@ Eintreffen des nächsten Interrupts nicht fertig wird, so ist das zumindest
softwaretechnisch kein Problem: Anhand des gelesenen Werts beim nächsten
\cmd{read()} erkennen Sie, wie viele Interrupts Sie verpasst haben.
-\subsection*{GPL oder nicht GPL}
+\subsubsection{GPL oder nicht GPL}
Der Linux-Kernel einschließlich aller enthaltenen Module ist unter der GPL
lizensiert. Programme im Linux-Userspace unterliegen solchen Einschränkungen
@@ -151,7 +145,7 @@ zu verhindern, bewusst gegen die GPL zu verstoßen oder ganz auf Linux zu
verzichten. Durch UIO wird an dieser Stelle ein gangbarer und legaler Ausweg
geschaffen.
-\subsection*{Konventionelle Treiber...}
+\subsubsection{Konventionelle Treiber...}
Bisherige Gerätetreiber sind vollständig im Kernel integriert. Die
Schnittstelle zum Userspace besteht typischerweise aus einer Gerätedatei, auf
@@ -225,7 +219,7 @@ Aufnahme in den offiziellen Mainline-Kernel haben. Dadurch haben die
Programmierer dann während der gesamten Laufzeit des Produkts zusätzlich das
Problem, diesen wackligen Treiber out-of-tree warten zu müssen.
-\subsection*{...und UIO-Treiber}
+\subsubsection{...und UIO-Treiber}
Sieht man sich Gerätetreiber etwas genauer an, so stellt man fest, dass es
stets wiederkehrende Aufgabenstellungen gibt. Zum einen hat die Hardware
@@ -301,7 +295,7 @@ in der Regel root-Rechte des Anwenders erfordert und bei Fehlern zu einem
völlig unbrauchbaren System führt. Bei einem UIO-Treiber unterscheidet sich
ein Update des Treibers durch nichts von einem Update der Anwender-Applikation.
-\subsection*{Wartungsvertrag}
+\subsubsection{Wartungsvertrag}
Ein Treiber will gewartet sein. Bei industriellen Geräten findet man oft die
Situation, dass ein Gerät über einen längeren Zeitraum mit der selben
@@ -341,7 +335,7 @@ Linux-Kernel-Mailingliste um die Aufnahme desselben zu bitten. Die Mühe lohnt
sich: Zukünftige Kernel haben die Unterstützung für ihr Produkt schon
eingebaut, Versionskonflikte oder das mühsame Kernel-Patchen entfällt.
-\subsection*{Los geht's...}
+\subsubsection{Los geht's...}
Wie sieht nun ein UIO-Treiber konkret aus? Betrachten wir dazu einen Treiber
für eine PCI-Karte. Die folgenden Beispiele sind Auszüge aus dem bereits
@@ -463,7 +457,7 @@ Ausführliche Dokumentation findet sich auch in den Kernel-Quellen in
\cmd{Documentation/DocBook/uio-howto.tmpl}; mit \cmd{make htmldocs} erstellt
man daraus eine lesbare Form.
-\subsection*{Testen mit lsuio}
+\subsubsection{Testen mit lsuio}
Hat man einen UIO-Kerneltreiber geladen, so führt der erste Weg ins Verzeichnis
\cmd{/sys/class/uio/uio0}, wo man überprüft, ob alle Dateien die erwarteten
@@ -492,7 +486,7 @@ Durch Überprüfen der Dateien \cmd{name} und \cmd{version} in den Verzeichnisse
unterhalb von \cmd{/sys/class/uio} kann man diese Informationen auf sichere
Weise gewinnen.
-\subsection*{Weiter geht's im Userspace}
+\subsubsection{Weiter geht's im Userspace}
Der Userspace-Teil des Treibers wird zunächst über das sysfs den Namen des
zuständigen Device-Files ermitteln. Im Folgenden wird der Einfachkeit halber
@@ -549,7 +543,7 @@ steht Experimenten kaum etwas im Weg. Sie können jedenfalls keine
schlimmeren Abstürze verursachen als beim Programmieren jeder anderen
Anwender-Applikation.
-\subsection*{UIO oder nicht UIO}
+\subsubsection{UIO oder nicht UIO}
Sollen jetzt in Zukunft alle Treiber mittels UIO realisiert werden? Sicher
nicht. UIO eignet sich sehr gut für Hardware, die Interrupts erzeugt, deren
@@ -578,7 +572,7 @@ weite Verbreitung von X.org bereits ein anderer Standard etabliert, der im
beispielsweise schnelle A/D-Wandler, könnten DMA benötigen. Die Zukunft wird
zeigen, ob an dieser Stelle Nachfrage besteht.
-\subsection*{Fazit}
+\subsubsection{Fazit}
Durch das seit Kernel-Version 2.6.23 in Linux verfügbare
Userspace I/O-Framework wird es besonders für Industriebetriebe erheblich
@@ -599,4 +593,4 @@ Realtime-Preemption-Patch einspielt, so erhält man ein einfach zu
programmierendes und vollständig aus Open Source-Software bestehendes System
für die Automatisierungstechnik.
-\end{document}
+\input{tailhandout}
diff --git a/kernel-devel/uio-driver/pres_uio-driver_en.tex b/kernel-devel/uio-driver/pres_uio-driver_en.tex
index ca9ff44..b16045f 100644
--- a/kernel-devel/uio-driver/pres_uio-driver_en.tex
+++ b/kernel-devel/uio-driver/pres_uio-driver_en.tex
@@ -1,23 +1,15 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
+\input{configpres}
\title{The Userspace I/O Framework (UIO)}
-\institute{Linutronix GmbH}
-
-\begin{document}
-
\maketitle
-% ----- Slide "Desperate programmer" ------------------
+\subsection{The Userspace I/O Framework (UIO)}
+
\begin{frame}
\includegraphics[width=11cm]{images/hjk-desperate.jpg}
\end{frame}
-% ----- Slide "Linux device drivers" ------------------
+\subsubsection{Linux device drivers}
\begin{frame}
\frametitle{Linux device drivers}
\pause
@@ -28,7 +20,6 @@
\end{itemize}
\end{frame}
-% ----- Slide "Standard devices" -----------------------
\begin{frame}
\frametitle{Standard devices}
\pause
@@ -46,7 +37,6 @@
\end{itemize}
\end{frame}
-% ----- Slide "Problematic devices" -------------------
\begin{frame}
\frametitle{Problematic devices}
\pause
@@ -66,17 +56,15 @@
\end{itemize}
\end{frame}
-% ----- Slide "In-kernel driver" ------------------
\begin{frame}
\includegraphics[width=11cm]{images/konventioneller-treiber_en.png}
\end{frame}
-% ----- Slide "UIO driver" ------------------
\begin{frame}
\includegraphics[width=11cm]{images/uio-treiber_en.png}
\end{frame}
-% ----- Slide "How UIO works" --------------------------
+\subsubsection{Structure}
\begin{frame}
\frametitle{How UIO works}
\pause
@@ -96,7 +84,6 @@
\end{itemize}
\end{frame}
-% ----- Slide "Kernel: interrupt handler" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: interrupt handler}
\begin{verbatim}
@@ -113,7 +100,6 @@ irqreturn_t my_handler(int irq, struct uio_info *dev_info)
\end{verbatim}
\end{frame}
-% ----- Slide "Kernel: probe() function" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: probe() function}
\begin{verbatim}
@@ -128,7 +114,6 @@ int pci_probe(struct pci_dev *dev,
\end{verbatim}
\end{frame}
-% ----- Slide "Kernel: struct uio_info" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: struct uio\_info}
\begin{verbatim}
@@ -148,7 +133,6 @@ struct uio_info {
\end{verbatim}
\end{frame}
-% ----- Slide "Kernel: struct uio_mem" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: struct uio\_mem}
\begin{verbatim}
@@ -162,7 +146,7 @@ struct uio_mem {
\end{verbatim}
\end{frame}
-% ----- Slide "Userspace part of driver" --------------
+\subsubsection{Userspace}
\begin{frame}
\frametitle{Userspace: Overview}
\pause
@@ -181,7 +165,6 @@ struct uio_mem {
\end{itemize}
\end{frame}
-% ----- Slide "Hello UIO world" --------------
\begin{frame}[fragile]
\frametitle{Hello UIO world}
\pause
@@ -196,7 +179,7 @@ while (read(fd, &irq_cnt, 4)) {
\end{verbatim}
\end{frame}
-% ----- Slide "Performance considerations" --------------
+\subsubsection{Performance}
\begin{frame}
\frametitle{Performance considerations}
\pause
@@ -207,12 +190,11 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "ioctl vs. UIO" ------------------
\begin{frame}
\includegraphics[width=10cm]{images/ioctl-vs-uio_en.png}
\end{frame}
-% ----- Slide "Publish your driver!" --------------
+\subsubsection{Publish your driver}
\begin{frame}
\frametitle{Publish your driver!}
\pause
@@ -241,7 +223,7 @@ while (read(fd, &irq_cnt, 4)) {
\includegraphics[width=11cm]{images/greg-kernel-org.jpg}
\end{frame}
-% ----- Slide "Legal issues" --------------------------
+\subsubsection{Legal issues}
\begin{frame}
\frametitle{Legal issues}
\pause
@@ -254,7 +236,7 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "Tools" --------------------------
+\subsubsection{Tools}
\begin{frame}
\frametitle{Tools}
\pause
@@ -265,7 +247,6 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "OSADL" --------------------------
\begin{frame}
\frametitle{OSADL}
\pause
@@ -278,7 +259,7 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "Future" --------------------------
+\subsubsection{Future Development}
\begin{frame}
\frametitle{Future}
\pause
@@ -289,13 +270,4 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "Thanks for listening!" ----------
-\begin{frame}
-\frametitle{Thanks for listening!}
-\pause
-\begin{itemize}
-\item Questions ?
-\end{itemize}
-\end{frame}
-
-\end{document}
+\input{tailpres}
diff --git a/pres_master.tex b/pres_master.tex
index 3053985..b0fff19 100644
--- a/pres_master.tex
+++ b/pres_master.tex
@@ -13,4 +13,10 @@
\input{./flash-memory/ubi/pres_ubi_de.tex}
\input{./frameworks/section}
\input{./frameworks/middleware/pres_middleware.tex}
+\input{./kernel-devel/section.tex}
+\input{./kernel-devel/char-device/pres_char-device_de.tex}
+\input{./kernel-devel/kernel-basics/pres_kernel-basics_de.tex}
+\input{./kernel-devel/linux-mm-basics/pres_linux-mm-basics_en.tex}
+\input{./kernel-devel/module-basics/pres_module-basics_de.tex}
+\input{./kernel-devel/uio-driver/pres_uio-driver_en.tex}
\input{tailmasterpres}