summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ogness <john.ogness@linutronix.de>2017-12-19 10:33:06 +0100
committerJohn Ogness <john.ogness@linutronix.de>2017-12-19 10:33:06 +0100
commite05f453245fa5e2f4f75dd42445d822608c91296 (patch)
tree94359d04de85a1e2e29a108e7ed75d4673a012d2
parentbbdbb0189029258a972068661e27df2b1add4519 (diff)
kernel-devel/char device: add english version
Signed-off-by: John Ogness <john.ogness@linutronix.de>
-rw-r--r--kernel-devel/char-device/Makefile4
-rw-r--r--kernel-devel/char-device/pres_char-device_en.tex211
2 files changed, 214 insertions, 1 deletions
diff --git a/kernel-devel/char-device/Makefile b/kernel-devel/char-device/Makefile
index 88cdbc6..094719f 100644
--- a/kernel-devel/char-device/Makefile
+++ b/kernel-devel/char-device/Makefile
@@ -1 +1,3 @@
-obj-$(CONFIG_KERNEL_CHAR_DEV) += hints_char-device_de.pdf pres_char-device_de.pdf
+obj-$(CONFIG_KERNEL_CHAR_DEV) += hints_char-device_de.pdf
+obj-$(CONFIG_KERNEL_CHAR_DEV) += pres_char-device_de.pdf
+obj-$(CONFIG_KERNEL_CHAR_DEV) += pres_char-device_en.pdf
diff --git a/kernel-devel/char-device/pres_char-device_en.tex b/kernel-devel/char-device/pres_char-device_en.tex
new file mode 100644
index 0000000..f02658f
--- /dev/null
+++ b/kernel-devel/char-device/pres_char-device_en.tex
@@ -0,0 +1,211 @@
+\input{configpres}
+
+\title{Character Device Driver Interaction}
+\maketitle
+
+\subsection{Character Devices}
+
+\begin{frame}
+\frametitle{Syscall Interface}
+\begin{center}
+\includegraphics[width=5cm]{images/syscall.png}
+\end{center}
+\end{frame}
+
+\begin{frame}
+\frametitle{Character Device Driver Interaction}
+\begin{itemize}
+\item open
+\item release
+\item read
+\item write
+\item fsync
+\item llseek
+\item poll
+\item mmap
+\item ioctl
+\item \dots
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{open}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+int (*open) (struct inode *, struct file *);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [open:] The first operation on a character device. The function implementation is optional. If not implemented, it will always succeed and the driver is not informed of the open.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/open.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{release}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+int (*release) (struct inode *, struct file *);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [release:] The last operation on a character device. The function implementation is optional. If not implemented, it will always succeed and the driver is not informed of the release.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/release.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{read}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [read:] Read data from the character device. The data is copied to userspace using the \emph{copy\_to\_user} function.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/read.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{write}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [write:] Write data to the character device. The data is copied from usersapce using the \emph{copy\_from\_user} function.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/write.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{fsync}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+int (*fsync) (struct file *, struct dentry *, int datasync);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [fsync:] Flush all cached data to the device.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/fsync.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{llseek}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+loff_t (*llseek) (struct file *, loff_t, int);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [llseek:] Set the current position for read and write access.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/llseek.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{poll}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+unsigned int (*poll) (struct file *, struct poll_table_struct *);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [poll:] Implements poll, epoll, and select functionality. If it is not implemented, blocking I/O is not possible.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/poll.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{mmap}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+int (*mmap) (struct file *, struct vm_area_struct *);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [mmap:] Creates a mapping of the device memory for the userspace process context.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/mmap.png}
+\end{center}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{ioctl}
+\begin{itemize}
+\item Prototype
+\begin{tiny}
+\begin{lstlisting}[frame=trBL]
+int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+\end{lstlisting}
+\end{tiny}
+\item Description
+\begin{description}
+\item [ioctl:] Implements device-specific commands. This should be avoided since better, standard interfaces for most cases already exist.
+\end{description}
+\item Data Flow
+\end{itemize}
+\begin{center}
+\includegraphics[width=5cm]{images/ioctl.png}
+\end{center}
+\end{frame}
+
+\input{tailpres}