summaryrefslogtreecommitdiff
path: root/kernel-devel
diff options
context:
space:
mode:
authorBenedikt Spranger <b.spranger@linutronix.de>2009-11-24 15:45:14 +0100
committerBenedikt Spranger <b.spranger@linutronix.de>2009-11-24 15:56:44 +0100
commit2a1bd9192c7f9541dc3f9b4f70f57ab8155514ba (patch)
tree9df94a12fba0762a52614decf6b7fa9fdb7aebea /kernel-devel
parente28a6bf75de1d098df46f46d710ebb0aefb21db7 (diff)
character device added
Diffstat (limited to 'kernel-devel')
-rw-r--r--kernel-devel/char-device/Makefile9
-rw-r--r--kernel-devel/char-device/images/fsync.diabin0 -> 1052 bytes
-rw-r--r--kernel-devel/char-device/images/fsync.pngbin0 -> 2506 bytes
-rw-r--r--kernel-devel/char-device/images/ioctl.diabin0 -> 1049 bytes
-rw-r--r--kernel-devel/char-device/images/ioctl.pngbin0 -> 2350 bytes
-rw-r--r--kernel-devel/char-device/images/llseek.diabin0 -> 1051 bytes
-rw-r--r--kernel-devel/char-device/images/llseek.pngbin0 -> 2325 bytes
-rw-r--r--kernel-devel/char-device/images/mmap.diabin0 -> 1112 bytes
-rw-r--r--kernel-devel/char-device/images/mmap.pngbin0 -> 3103 bytes
-rw-r--r--kernel-devel/char-device/images/open.diabin0 -> 1049 bytes
-rw-r--r--kernel-devel/char-device/images/open.pngbin0 -> 2372 bytes
-rw-r--r--kernel-devel/char-device/images/poll.diabin0 -> 1048 bytes
-rw-r--r--kernel-devel/char-device/images/poll.pngbin0 -> 2331 bytes
-rw-r--r--kernel-devel/char-device/images/read.diabin0 -> 1092 bytes
-rw-r--r--kernel-devel/char-device/images/read.pngbin0 -> 2928 bytes
-rw-r--r--kernel-devel/char-device/images/release.diabin0 -> 1073 bytes
-rw-r--r--kernel-devel/char-device/images/release.pngbin0 -> 2400 bytes
-rw-r--r--kernel-devel/char-device/images/syscall.diabin0 -> 1603 bytes
-rw-r--r--kernel-devel/char-device/images/syscall.pngbin0 -> 20721 bytes
-rw-r--r--kernel-devel/char-device/images/write.diabin0 -> 1085 bytes
-rw-r--r--kernel-devel/char-device/images/write.pngbin0 -> 1958 bytes
-rw-r--r--kernel-devel/char-device/pres_char-device_de.tex301
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
new file mode 100644
index 0000000..7938b4d
--- /dev/null
+++ b/kernel-devel/char-device/images/fsync.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/fsync.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/ioctl.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/ioctl.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/llseek.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/llseek.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/mmap.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/mmap.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/open.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/open.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/poll.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/poll.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/read.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/read.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/release.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/release.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/syscall.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/syscall.png
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/write.dia
Binary files 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
--- /dev/null
+++ b/kernel-devel/char-device/images/write.png
Binary files 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}