summaryrefslogtreecommitdiff
path: root/kernel-devel/uio-driver
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2011-01-26 18:49:31 +0100
committerManuel Traut <manut@linutronix.de>2011-01-26 18:49:31 +0100
commit6fb0950420424ff27f6aa89429a763409b088ed6 (patch)
tree3f981148144a4f5e2ddfc66a00134e3158867d7e /kernel-devel/uio-driver
parentf020c2ca1ef336cee116ec3df47a984289c2c18e (diff)
added kernel devel
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'kernel-devel/uio-driver')
-rw-r--r--kernel-devel/uio-driver/Makefile4
-rw-r--r--kernel-devel/uio-driver/handout_uio-driver_de.tex32
-rw-r--r--kernel-devel/uio-driver/pres_uio-driver_en.tex52
3 files changed, 27 insertions, 61 deletions
diff --git a/kernel-devel/uio-driver/Makefile b/kernel-devel/uio-driver/Makefile
index 4663d52..d641258 100644
--- a/kernel-devel/uio-driver/Makefile
+++ b/kernel-devel/uio-driver/Makefile
@@ -1,7 +1,7 @@
all:
for pdf in `ls -1 *.tex` ; do \
- pdflatex $$pdf; \
- pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
+ TEXINPUTS=`pwd`/../..:.:..:$(TEXINPUTS) pdflatex $$pdf; \
done
clean:
diff --git a/kernel-devel/uio-driver/handout_uio-driver_de.tex b/kernel-devel/uio-driver/handout_uio-driver_de.tex
index 546c7fe..f25b538 100644
--- a/kernel-devel/uio-driver/handout_uio-driver_de.tex
+++ b/kernel-devel/uio-driver/handout_uio-driver_de.tex
@@ -1,12 +1,6 @@
-\documentclass{lxarticle}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{lxheaders}
-\usepackage{lxextras}
+\input{confighandout}
-\begin{document}
-
-\section*{Linux-Treiber im Userspace}
+\subsection{Linux-Treiber im Userspace}
Das ab Linux 2.6.23 im stabilen Kernel verfügbare Userspace-I/O-Framework
(UIO) ermöglicht, bestimmte Treiber fast vollständig in den Userspace zu
@@ -64,7 +58,7 @@ einkompiliert wird, muss dieser Lizenz genügen, das heißt, der Sourcecode muss
(meist illegale) Tricks angewandt, um dieser Bedingung der GPL zu entgehen und
ihren Kernelcode unter Verschluss zu halten.
-\subsection*{UIO löst Probleme}
+\subsubsection{UIO löst Probleme}
Die geschilderte Problematik führte bereits vor längerer Zeit zu Überlegungen,
zumindest Teile eines Treibers in den Userspace zu verlagern. I/O-Hardware
@@ -118,7 +112,7 @@ Eintreffen des nächsten Interrupts nicht fertig wird, so ist das zumindest
softwaretechnisch kein Problem: Anhand des gelesenen Werts beim nächsten
\cmd{read()} erkennen Sie, wie viele Interrupts Sie verpasst haben.
-\subsection*{GPL oder nicht GPL}
+\subsubsection{GPL oder nicht GPL}
Der Linux-Kernel einschließlich aller enthaltenen Module ist unter der GPL
lizensiert. Programme im Linux-Userspace unterliegen solchen Einschränkungen
@@ -151,7 +145,7 @@ zu verhindern, bewusst gegen die GPL zu verstoßen oder ganz auf Linux zu
verzichten. Durch UIO wird an dieser Stelle ein gangbarer und legaler Ausweg
geschaffen.
-\subsection*{Konventionelle Treiber...}
+\subsubsection{Konventionelle Treiber...}
Bisherige Gerätetreiber sind vollständig im Kernel integriert. Die
Schnittstelle zum Userspace besteht typischerweise aus einer Gerätedatei, auf
@@ -225,7 +219,7 @@ Aufnahme in den offiziellen Mainline-Kernel haben. Dadurch haben die
Programmierer dann während der gesamten Laufzeit des Produkts zusätzlich das
Problem, diesen wackligen Treiber out-of-tree warten zu müssen.
-\subsection*{...und UIO-Treiber}
+\subsubsection{...und UIO-Treiber}
Sieht man sich Gerätetreiber etwas genauer an, so stellt man fest, dass es
stets wiederkehrende Aufgabenstellungen gibt. Zum einen hat die Hardware
@@ -301,7 +295,7 @@ in der Regel root-Rechte des Anwenders erfordert und bei Fehlern zu einem
völlig unbrauchbaren System führt. Bei einem UIO-Treiber unterscheidet sich
ein Update des Treibers durch nichts von einem Update der Anwender-Applikation.
-\subsection*{Wartungsvertrag}
+\subsubsection{Wartungsvertrag}
Ein Treiber will gewartet sein. Bei industriellen Geräten findet man oft die
Situation, dass ein Gerät über einen längeren Zeitraum mit der selben
@@ -341,7 +335,7 @@ Linux-Kernel-Mailingliste um die Aufnahme desselben zu bitten. Die Mühe lohnt
sich: Zukünftige Kernel haben die Unterstützung für ihr Produkt schon
eingebaut, Versionskonflikte oder das mühsame Kernel-Patchen entfällt.
-\subsection*{Los geht's...}
+\subsubsection{Los geht's...}
Wie sieht nun ein UIO-Treiber konkret aus? Betrachten wir dazu einen Treiber
für eine PCI-Karte. Die folgenden Beispiele sind Auszüge aus dem bereits
@@ -463,7 +457,7 @@ Ausführliche Dokumentation findet sich auch in den Kernel-Quellen in
\cmd{Documentation/DocBook/uio-howto.tmpl}; mit \cmd{make htmldocs} erstellt
man daraus eine lesbare Form.
-\subsection*{Testen mit lsuio}
+\subsubsection{Testen mit lsuio}
Hat man einen UIO-Kerneltreiber geladen, so führt der erste Weg ins Verzeichnis
\cmd{/sys/class/uio/uio0}, wo man überprüft, ob alle Dateien die erwarteten
@@ -492,7 +486,7 @@ Durch Überprüfen der Dateien \cmd{name} und \cmd{version} in den Verzeichnisse
unterhalb von \cmd{/sys/class/uio} kann man diese Informationen auf sichere
Weise gewinnen.
-\subsection*{Weiter geht's im Userspace}
+\subsubsection{Weiter geht's im Userspace}
Der Userspace-Teil des Treibers wird zunächst über das sysfs den Namen des
zuständigen Device-Files ermitteln. Im Folgenden wird der Einfachkeit halber
@@ -549,7 +543,7 @@ steht Experimenten kaum etwas im Weg. Sie können jedenfalls keine
schlimmeren Abstürze verursachen als beim Programmieren jeder anderen
Anwender-Applikation.
-\subsection*{UIO oder nicht UIO}
+\subsubsection{UIO oder nicht UIO}
Sollen jetzt in Zukunft alle Treiber mittels UIO realisiert werden? Sicher
nicht. UIO eignet sich sehr gut für Hardware, die Interrupts erzeugt, deren
@@ -578,7 +572,7 @@ weite Verbreitung von X.org bereits ein anderer Standard etabliert, der im
beispielsweise schnelle A/D-Wandler, könnten DMA benötigen. Die Zukunft wird
zeigen, ob an dieser Stelle Nachfrage besteht.
-\subsection*{Fazit}
+\subsubsection{Fazit}
Durch das seit Kernel-Version 2.6.23 in Linux verfügbare
Userspace I/O-Framework wird es besonders für Industriebetriebe erheblich
@@ -599,4 +593,4 @@ Realtime-Preemption-Patch einspielt, so erhält man ein einfach zu
programmierendes und vollständig aus Open Source-Software bestehendes System
für die Automatisierungstechnik.
-\end{document}
+\input{tailhandout}
diff --git a/kernel-devel/uio-driver/pres_uio-driver_en.tex b/kernel-devel/uio-driver/pres_uio-driver_en.tex
index ca9ff44..b16045f 100644
--- a/kernel-devel/uio-driver/pres_uio-driver_en.tex
+++ b/kernel-devel/uio-driver/pres_uio-driver_en.tex
@@ -1,23 +1,15 @@
-\documentclass{beamer}
-\usetheme{linutronix}
-\usepackage{german}
-\usepackage[utf8]{inputenc}
-\usepackage{pgf}
-\usepackage{graphicx}
+\input{configpres}
\title{The Userspace I/O Framework (UIO)}
-\institute{Linutronix GmbH}
-
-\begin{document}
-
\maketitle
-% ----- Slide "Desperate programmer" ------------------
+\subsection{The Userspace I/O Framework (UIO)}
+
\begin{frame}
\includegraphics[width=11cm]{images/hjk-desperate.jpg}
\end{frame}
-% ----- Slide "Linux device drivers" ------------------
+\subsubsection{Linux device drivers}
\begin{frame}
\frametitle{Linux device drivers}
\pause
@@ -28,7 +20,6 @@
\end{itemize}
\end{frame}
-% ----- Slide "Standard devices" -----------------------
\begin{frame}
\frametitle{Standard devices}
\pause
@@ -46,7 +37,6 @@
\end{itemize}
\end{frame}
-% ----- Slide "Problematic devices" -------------------
\begin{frame}
\frametitle{Problematic devices}
\pause
@@ -66,17 +56,15 @@
\end{itemize}
\end{frame}
-% ----- Slide "In-kernel driver" ------------------
\begin{frame}
\includegraphics[width=11cm]{images/konventioneller-treiber_en.png}
\end{frame}
-% ----- Slide "UIO driver" ------------------
\begin{frame}
\includegraphics[width=11cm]{images/uio-treiber_en.png}
\end{frame}
-% ----- Slide "How UIO works" --------------------------
+\subsubsection{Structure}
\begin{frame}
\frametitle{How UIO works}
\pause
@@ -96,7 +84,6 @@
\end{itemize}
\end{frame}
-% ----- Slide "Kernel: interrupt handler" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: interrupt handler}
\begin{verbatim}
@@ -113,7 +100,6 @@ irqreturn_t my_handler(int irq, struct uio_info *dev_info)
\end{verbatim}
\end{frame}
-% ----- Slide "Kernel: probe() function" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: probe() function}
\begin{verbatim}
@@ -128,7 +114,6 @@ int pci_probe(struct pci_dev *dev,
\end{verbatim}
\end{frame}
-% ----- Slide "Kernel: struct uio_info" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: struct uio\_info}
\begin{verbatim}
@@ -148,7 +133,6 @@ struct uio_info {
\end{verbatim}
\end{frame}
-% ----- Slide "Kernel: struct uio_mem" --------------------------
\begin{frame}[fragile]
\frametitle{Kernel: struct uio\_mem}
\begin{verbatim}
@@ -162,7 +146,7 @@ struct uio_mem {
\end{verbatim}
\end{frame}
-% ----- Slide "Userspace part of driver" --------------
+\subsubsection{Userspace}
\begin{frame}
\frametitle{Userspace: Overview}
\pause
@@ -181,7 +165,6 @@ struct uio_mem {
\end{itemize}
\end{frame}
-% ----- Slide "Hello UIO world" --------------
\begin{frame}[fragile]
\frametitle{Hello UIO world}
\pause
@@ -196,7 +179,7 @@ while (read(fd, &irq_cnt, 4)) {
\end{verbatim}
\end{frame}
-% ----- Slide "Performance considerations" --------------
+\subsubsection{Performance}
\begin{frame}
\frametitle{Performance considerations}
\pause
@@ -207,12 +190,11 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "ioctl vs. UIO" ------------------
\begin{frame}
\includegraphics[width=10cm]{images/ioctl-vs-uio_en.png}
\end{frame}
-% ----- Slide "Publish your driver!" --------------
+\subsubsection{Publish your driver}
\begin{frame}
\frametitle{Publish your driver!}
\pause
@@ -241,7 +223,7 @@ while (read(fd, &irq_cnt, 4)) {
\includegraphics[width=11cm]{images/greg-kernel-org.jpg}
\end{frame}
-% ----- Slide "Legal issues" --------------------------
+\subsubsection{Legal issues}
\begin{frame}
\frametitle{Legal issues}
\pause
@@ -254,7 +236,7 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "Tools" --------------------------
+\subsubsection{Tools}
\begin{frame}
\frametitle{Tools}
\pause
@@ -265,7 +247,6 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "OSADL" --------------------------
\begin{frame}
\frametitle{OSADL}
\pause
@@ -278,7 +259,7 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "Future" --------------------------
+\subsubsection{Future Development}
\begin{frame}
\frametitle{Future}
\pause
@@ -289,13 +270,4 @@ while (read(fd, &irq_cnt, 4)) {
\end{itemize}
\end{frame}
-% ----- Slide "Thanks for listening!" ----------
-\begin{frame}
-\frametitle{Thanks for listening!}
-\pause
-\begin{itemize}
-\item Questions ?
-\end{itemize}
-\end{frame}
-
-\end{document}
+\input{tailpres}