From 2a1bd9192c7f9541dc3f9b4f70f57ab8155514ba Mon Sep 17 00:00:00 2001 From: Benedikt Spranger Date: Tue, 24 Nov 2009 15:45:14 +0100 Subject: character device added --- kernel-devel/char-device/Makefile | 9 + kernel-devel/char-device/images/fsync.dia | Bin 0 -> 1052 bytes kernel-devel/char-device/images/fsync.png | Bin 0 -> 2506 bytes kernel-devel/char-device/images/ioctl.dia | Bin 0 -> 1049 bytes kernel-devel/char-device/images/ioctl.png | Bin 0 -> 2350 bytes kernel-devel/char-device/images/llseek.dia | Bin 0 -> 1051 bytes kernel-devel/char-device/images/llseek.png | Bin 0 -> 2325 bytes kernel-devel/char-device/images/mmap.dia | Bin 0 -> 1112 bytes kernel-devel/char-device/images/mmap.png | Bin 0 -> 3103 bytes kernel-devel/char-device/images/open.dia | Bin 0 -> 1049 bytes kernel-devel/char-device/images/open.png | Bin 0 -> 2372 bytes kernel-devel/char-device/images/poll.dia | Bin 0 -> 1048 bytes kernel-devel/char-device/images/poll.png | Bin 0 -> 2331 bytes kernel-devel/char-device/images/read.dia | Bin 0 -> 1092 bytes kernel-devel/char-device/images/read.png | Bin 0 -> 2928 bytes kernel-devel/char-device/images/release.dia | Bin 0 -> 1073 bytes kernel-devel/char-device/images/release.png | Bin 0 -> 2400 bytes kernel-devel/char-device/images/syscall.dia | Bin 0 -> 1603 bytes kernel-devel/char-device/images/syscall.png | Bin 0 -> 20721 bytes kernel-devel/char-device/images/write.dia | Bin 0 -> 1085 bytes kernel-devel/char-device/images/write.png | Bin 0 -> 1958 bytes kernel-devel/char-device/pres_char-device_de.tex | 301 ++++++++++++++++++++++- 22 files changed, 300 insertions(+), 10 deletions(-) create mode 100644 kernel-devel/char-device/Makefile create mode 100644 kernel-devel/char-device/images/fsync.dia create mode 100644 kernel-devel/char-device/images/fsync.png create mode 100644 kernel-devel/char-device/images/ioctl.dia create mode 100644 kernel-devel/char-device/images/ioctl.png create mode 100644 kernel-devel/char-device/images/llseek.dia create mode 100644 kernel-devel/char-device/images/llseek.png create mode 100644 kernel-devel/char-device/images/mmap.dia create mode 100644 kernel-devel/char-device/images/mmap.png create mode 100644 kernel-devel/char-device/images/open.dia create mode 100644 kernel-devel/char-device/images/open.png create mode 100644 kernel-devel/char-device/images/poll.dia create mode 100644 kernel-devel/char-device/images/poll.png create mode 100644 kernel-devel/char-device/images/read.dia create mode 100644 kernel-devel/char-device/images/read.png create mode 100644 kernel-devel/char-device/images/release.dia create mode 100644 kernel-devel/char-device/images/release.png create mode 100644 kernel-devel/char-device/images/syscall.dia create mode 100644 kernel-devel/char-device/images/syscall.png create mode 100644 kernel-devel/char-device/images/write.dia create mode 100644 kernel-devel/char-device/images/write.png diff --git a/kernel-devel/char-device/Makefile b/kernel-devel/char-device/Makefile new file mode 100644 index 0000000..88cb315 --- /dev/null +++ b/kernel-devel/char-device/Makefile @@ -0,0 +1,9 @@ +PART=char-device + +all: + pdflatex pres_$(PART)_de.tex +# pdflatex hints_$(PART)_de.tex +# pdflatex handout_$(PART)_de.tex + +clean: + rm -f *.aux *.log *.pdf *.log *.snm *.toc *.vrb *.nav *.out diff --git a/kernel-devel/char-device/images/fsync.dia b/kernel-devel/char-device/images/fsync.dia new file mode 100644 index 0000000..7938b4d Binary files /dev/null and b/kernel-devel/char-device/images/fsync.dia differ diff --git a/kernel-devel/char-device/images/fsync.png b/kernel-devel/char-device/images/fsync.png new file mode 100644 index 0000000..fd9c1ce Binary files /dev/null and b/kernel-devel/char-device/images/fsync.png differ diff --git a/kernel-devel/char-device/images/ioctl.dia b/kernel-devel/char-device/images/ioctl.dia new file mode 100644 index 0000000..70b10bb Binary files /dev/null and b/kernel-devel/char-device/images/ioctl.dia differ diff --git a/kernel-devel/char-device/images/ioctl.png b/kernel-devel/char-device/images/ioctl.png new file mode 100644 index 0000000..1af77bc Binary files /dev/null and b/kernel-devel/char-device/images/ioctl.png differ diff --git a/kernel-devel/char-device/images/llseek.dia b/kernel-devel/char-device/images/llseek.dia new file mode 100644 index 0000000..80dbbbd Binary files /dev/null and b/kernel-devel/char-device/images/llseek.dia differ diff --git a/kernel-devel/char-device/images/llseek.png b/kernel-devel/char-device/images/llseek.png new file mode 100644 index 0000000..03d6dce Binary files /dev/null and b/kernel-devel/char-device/images/llseek.png differ diff --git a/kernel-devel/char-device/images/mmap.dia b/kernel-devel/char-device/images/mmap.dia new file mode 100644 index 0000000..9b9db8e Binary files /dev/null and b/kernel-devel/char-device/images/mmap.dia differ diff --git a/kernel-devel/char-device/images/mmap.png b/kernel-devel/char-device/images/mmap.png new file mode 100644 index 0000000..c341443 Binary files /dev/null and b/kernel-devel/char-device/images/mmap.png differ diff --git a/kernel-devel/char-device/images/open.dia b/kernel-devel/char-device/images/open.dia new file mode 100644 index 0000000..eff00d7 Binary files /dev/null and b/kernel-devel/char-device/images/open.dia differ diff --git a/kernel-devel/char-device/images/open.png b/kernel-devel/char-device/images/open.png new file mode 100644 index 0000000..bcc7cd4 Binary files /dev/null and b/kernel-devel/char-device/images/open.png differ diff --git a/kernel-devel/char-device/images/poll.dia b/kernel-devel/char-device/images/poll.dia new file mode 100644 index 0000000..3eb1814 Binary files /dev/null and b/kernel-devel/char-device/images/poll.dia differ diff --git a/kernel-devel/char-device/images/poll.png b/kernel-devel/char-device/images/poll.png new file mode 100644 index 0000000..ded205b Binary files /dev/null and b/kernel-devel/char-device/images/poll.png differ diff --git a/kernel-devel/char-device/images/read.dia b/kernel-devel/char-device/images/read.dia new file mode 100644 index 0000000..ca2f245 Binary files /dev/null and b/kernel-devel/char-device/images/read.dia differ diff --git a/kernel-devel/char-device/images/read.png b/kernel-devel/char-device/images/read.png new file mode 100644 index 0000000..060e565 Binary files /dev/null and b/kernel-devel/char-device/images/read.png differ diff --git a/kernel-devel/char-device/images/release.dia b/kernel-devel/char-device/images/release.dia new file mode 100644 index 0000000..80884a6 Binary files /dev/null and b/kernel-devel/char-device/images/release.dia differ diff --git a/kernel-devel/char-device/images/release.png b/kernel-devel/char-device/images/release.png new file mode 100644 index 0000000..9baa687 Binary files /dev/null and b/kernel-devel/char-device/images/release.png differ diff --git a/kernel-devel/char-device/images/syscall.dia b/kernel-devel/char-device/images/syscall.dia new file mode 100644 index 0000000..7da1df1 Binary files /dev/null and b/kernel-devel/char-device/images/syscall.dia differ diff --git a/kernel-devel/char-device/images/syscall.png b/kernel-devel/char-device/images/syscall.png new file mode 100644 index 0000000..71b1d79 Binary files /dev/null and b/kernel-devel/char-device/images/syscall.png differ diff --git a/kernel-devel/char-device/images/write.dia b/kernel-devel/char-device/images/write.dia new file mode 100644 index 0000000..eb0d68b Binary files /dev/null and b/kernel-devel/char-device/images/write.dia differ diff --git a/kernel-devel/char-device/images/write.png b/kernel-devel/char-device/images/write.png new file mode 100644 index 0000000..89b1db3 Binary files /dev/null and b/kernel-devel/char-device/images/write.png differ 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