diff options
Diffstat (limited to 'kernel-devel/char-device/pres_char-device_de.tex')
| -rw-r--r-- | kernel-devel/char-device/pres_char-device_de.tex | 301 |
1 files changed, 291 insertions, 10 deletions
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} |
