diff options
| author | Benedikt Spranger <b.spranger@linutronix.de> | 2009-11-24 15:45:14 +0100 |
|---|---|---|
| committer | Benedikt Spranger <b.spranger@linutronix.de> | 2009-11-24 15:56:44 +0100 |
| commit | 2a1bd9192c7f9541dc3f9b4f70f57ab8155514ba (patch) | |
| tree | 9df94a12fba0762a52614decf6b7fa9fdb7aebea /kernel-devel | |
| parent | e28a6bf75de1d098df46f46d710ebb0aefb21db7 (diff) | |
character device added
Diffstat (limited to 'kernel-devel')
22 files changed, 300 insertions, 10 deletions
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 Binary files differnew file mode 100644 index 0000000..7938b4d --- /dev/null +++ b/kernel-devel/char-device/images/fsync.dia diff --git a/kernel-devel/char-device/images/fsync.png b/kernel-devel/char-device/images/fsync.png Binary files differnew file mode 100644 index 0000000..fd9c1ce --- /dev/null +++ b/kernel-devel/char-device/images/fsync.png diff --git a/kernel-devel/char-device/images/ioctl.dia b/kernel-devel/char-device/images/ioctl.dia Binary files differnew file mode 100644 index 0000000..70b10bb --- /dev/null +++ b/kernel-devel/char-device/images/ioctl.dia diff --git a/kernel-devel/char-device/images/ioctl.png b/kernel-devel/char-device/images/ioctl.png Binary files differnew file mode 100644 index 0000000..1af77bc --- /dev/null +++ b/kernel-devel/char-device/images/ioctl.png diff --git a/kernel-devel/char-device/images/llseek.dia b/kernel-devel/char-device/images/llseek.dia Binary files differnew file mode 100644 index 0000000..80dbbbd --- /dev/null +++ b/kernel-devel/char-device/images/llseek.dia diff --git a/kernel-devel/char-device/images/llseek.png b/kernel-devel/char-device/images/llseek.png Binary files differnew file mode 100644 index 0000000..03d6dce --- /dev/null +++ b/kernel-devel/char-device/images/llseek.png diff --git a/kernel-devel/char-device/images/mmap.dia b/kernel-devel/char-device/images/mmap.dia Binary files differnew file mode 100644 index 0000000..9b9db8e --- /dev/null +++ b/kernel-devel/char-device/images/mmap.dia diff --git a/kernel-devel/char-device/images/mmap.png b/kernel-devel/char-device/images/mmap.png Binary files differnew file mode 100644 index 0000000..c341443 --- /dev/null +++ b/kernel-devel/char-device/images/mmap.png diff --git a/kernel-devel/char-device/images/open.dia b/kernel-devel/char-device/images/open.dia Binary files differnew file mode 100644 index 0000000..eff00d7 --- /dev/null +++ b/kernel-devel/char-device/images/open.dia diff --git a/kernel-devel/char-device/images/open.png b/kernel-devel/char-device/images/open.png Binary files differnew file mode 100644 index 0000000..bcc7cd4 --- /dev/null +++ b/kernel-devel/char-device/images/open.png diff --git a/kernel-devel/char-device/images/poll.dia b/kernel-devel/char-device/images/poll.dia Binary files differnew file mode 100644 index 0000000..3eb1814 --- /dev/null +++ b/kernel-devel/char-device/images/poll.dia diff --git a/kernel-devel/char-device/images/poll.png b/kernel-devel/char-device/images/poll.png Binary files differnew file mode 100644 index 0000000..ded205b --- /dev/null +++ b/kernel-devel/char-device/images/poll.png diff --git a/kernel-devel/char-device/images/read.dia b/kernel-devel/char-device/images/read.dia Binary files differnew file mode 100644 index 0000000..ca2f245 --- /dev/null +++ b/kernel-devel/char-device/images/read.dia diff --git a/kernel-devel/char-device/images/read.png b/kernel-devel/char-device/images/read.png Binary files differnew file mode 100644 index 0000000..060e565 --- /dev/null +++ b/kernel-devel/char-device/images/read.png diff --git a/kernel-devel/char-device/images/release.dia b/kernel-devel/char-device/images/release.dia Binary files differnew file mode 100644 index 0000000..80884a6 --- /dev/null +++ b/kernel-devel/char-device/images/release.dia diff --git a/kernel-devel/char-device/images/release.png b/kernel-devel/char-device/images/release.png Binary files differnew file mode 100644 index 0000000..9baa687 --- /dev/null +++ b/kernel-devel/char-device/images/release.png diff --git a/kernel-devel/char-device/images/syscall.dia b/kernel-devel/char-device/images/syscall.dia Binary files differnew file mode 100644 index 0000000..7da1df1 --- /dev/null +++ b/kernel-devel/char-device/images/syscall.dia diff --git a/kernel-devel/char-device/images/syscall.png b/kernel-devel/char-device/images/syscall.png Binary files differnew file mode 100644 index 0000000..71b1d79 --- /dev/null +++ b/kernel-devel/char-device/images/syscall.png diff --git a/kernel-devel/char-device/images/write.dia b/kernel-devel/char-device/images/write.dia Binary files differnew file mode 100644 index 0000000..eb0d68b --- /dev/null +++ b/kernel-devel/char-device/images/write.dia diff --git a/kernel-devel/char-device/images/write.png b/kernel-devel/char-device/images/write.png Binary files differnew file mode 100644 index 0000000..89b1db3 --- /dev/null +++ b/kernel-devel/char-device/images/write.png 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} |
