From 2a1bd9192c7f9541dc3f9b4f70f57ab8155514ba Mon Sep 17 00:00:00 2001
From: Benedikt Spranger <b.spranger@linutronix.de>
Date: Tue, 24 Nov 2009 15:45:14 +0100
Subject: character device added

---
 kernel-devel/char-device/pres_char-device_de.tex | 301 ++++++++++++++++++++++-
 1 file changed, 291 insertions(+), 10 deletions(-)

(limited to 'kernel-devel/char-device/pres_char-device_de.tex')

diff --git a/kernel-devel/char-device/pres_char-device_de.tex b/kernel-devel/char-device/pres_char-device_de.tex
index 07db328..7df54c5 100644
--- a/kernel-devel/char-device/pres_char-device_de.tex
+++ b/kernel-devel/char-device/pres_char-device_de.tex
@@ -1,24 +1,305 @@
-\documentclass{article}
+\documentclass{beamer}
+\usetheme{linutronix}
 \usepackage{german}
 \usepackage[utf8]{inputenc}
+\usepackage{pgf}
+\usepackage{graphicx}
+\usepackage{psfrag}
+\usepackage{listings}
+
+\title{Interaktion eines Character Device Treibers}
+\institute{Linutronix GmbH}
 
 \begin{document}
+\lstset{language=[ANSI]C, moredelim=[is][\color{blue}]{|}{|}}
+\maketitle
+
+% ----- Slide Syscalls ------------------
+\begin{frame}
+\frametitle{Syscall Interface}
+\begin{center}
+\includegraphics[width=5cm]{images/syscall.png}
+\end{center}
+\end{frame}
+
+% ----- Slide Aufbau ------------------
+\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}
+
+% ----- Slide open ------------------
+\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}
+
+% ----- Slide release ------------------
+\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}
+
+% ----- Slide read ------------------
+\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}
 
-\section*{Block \lq Was ist Linux?\rq}
+% ----- Slide write ------------------
+\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}
 
-\subsection*{Lernziele}
+% ----- Slide fsync ------------------
+\begin{frame}[fragile]
+\frametitle{fsync}
+\pause
 \begin{itemize}
-\item Lernziel 1
-\item Lernziel 2
-\item Lernziel 3
+\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}
 
-\subsection*{Unterrichts-Ablauf}
+% ----- Slide llseek ------------------
+\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}
 
-Hinweise zur Präsentation, Zeitplanung, etc.
+% ----- Slide poll ------------------
+\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}
 
-\subsection*{Übungen bei vorhandener Hardware}
+% ----- Slide mmap ------------------
+\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}
 
-Hinweise zu Übungen, Zeitlimit dazu.
+% ----- Slide ioctl ------------------
+\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}
 
 \end{document}
-- 
cgit v1.2.3

