[FE training-materials-updates] More stuff about the misc subsystem

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Fri Sep 27 13:03:05 CEST 2013

Repository : git://git.free-electrons.com/training-materials.git

On branch  : kernel-ng
Link       : http://git.free-electrons.com/training-materials/commit/?id=00893a04af1ff6843863c7b506bb2499f2900ce2


commit 00893a04af1ff6843863c7b506bb2499f2900ce2
Author: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
Date:   Fri Sep 27 13:02:40 2013 +0200

    More stuff about the misc subsystem
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>


 .../kernel-misc-subsystem.tex                      |   77 +++++++++++++++++++-
 1 file changed, 76 insertions(+), 1 deletion(-)

diff --git a/slides/kernel-misc-subsystem/kernel-misc-subsystem.tex b/slides/kernel-misc-subsystem/kernel-misc-subsystem.tex
index 0f92015..7f84221 100644
--- a/slides/kernel-misc-subsystem/kernel-misc-subsystem.tex
+++ b/slides/kernel-misc-subsystem/kernel-misc-subsystem.tex
@@ -1,4 +1,79 @@
-\subsection{The misc subsystem}
+\section{The misc subsystem}
+\begin{frame}{Why a {\em misc} subsystem?}
+  \begin{itemize}
+  \item The kernel offers a large number of {\bf frameworks} covering
+    a wide range of device types: input, network, video, audio,
+    etc.
+    \begin{itemize}
+    \item Those frameworks allow to factorize common functionality
+      between drivers and offer a consistent API to userspace
+      applications.
+    \end{itemize}
+  \item However, there are some devices that {\bf really do not fit in any
+    of the existing frameworks}.
+    \begin{itemize}
+    \item Highly customized devices implemented in a FPGA, or other
+      weird devices for which implementing a complete framework is not
+      useful.
+    \end{itemize}
+  \item The drivers for such devices could be implemented directly as
+    raw {\em character drivers}.
+  \item But there is a subsystem that makes this work a little bit
+    easier: the {\bf misc subsystem}.
+    \begin{itemize}
+    \item It is really only a {\bf thin layer} above the {\em character
+        driver} API.
+    \end{itemize}
+  \end{itemize}
+\begin{frame}{Misc subsystem diagram}
+  \begin{center}
+    \includegraphics[width=\textwidth]{slides/kernel-misc-subsystem/misc-subsystem-diagram.pdf}
+  \end{center}
+\begin{frame}[fragile]{Misc subsystem API (1/2)}
+  \begin{itemize}
+  \item The misc subsystem API mainly provides two functions, to
+    register and unregister one {\em misc device}:
+    \begin{itemize}
+    \item \code{int misc_register(struct miscdevice * misc);}
+    \item \code{int misc_deregister(struct miscdevice *misc);}
+    \end{itemize}
+  \item A {\em misc device} is described by a \code{miscdevice}
+    structure:
+    \begin{minted}[fontsize=\footnotesize]{c}
+struct miscdevice  {
+        int minor;
+        const char *name;
+        const struct file_operations *fops;
+        struct list_head list;
+        struct device *parent;
+        struct device *this_device;
+        const char *nodename;
+        umode_t mode;
+  \end{itemize}
+\begin{frame}[fragile]{Misc subsystem API (2/2)}
+  The main fields to be filled in the \code{struct miscdevice} are:
+  \begin{itemize}
+  \item \code{minor}, the minor number for the device, or
+    \code{MISC_DYNAMIC_MINOR} to get a minor number automatically
+    assigned.
+  \item \code{name}, name of the device, which will be used to create
+    the device node if {\em devtmpfs} is used.
+  \item \code{fops}, pointer to the \code{file_operations}, that
+    describe which functions implement the {\em read}, {\em write},
+    {\em ioctl}, etc. operations.
+  \item \code{parent}, the \code{struct device} that represents the
+    hardware device exposed by this driver.
+  \end{itemize}
 {Output-only serial port driver}

More information about the training-materials-updates mailing list