From 6fb0950420424ff27f6aa89429a763409b088ed6 Mon Sep 17 00:00:00 2001 From: Manuel Traut Date: Wed, 26 Jan 2011 18:49:31 +0100 Subject: added kernel devel Signed-off-by: Manuel Traut --- kernel-devel/uio-driver/Makefile | 4 +- kernel-devel/uio-driver/handout_uio-driver_de.tex | 32 ++++++-------- kernel-devel/uio-driver/pres_uio-driver_en.tex | 52 ++++++----------------- 3 files changed, 27 insertions(+), 61 deletions(-) (limited to 'kernel-devel/uio-driver') 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} -- cgit v1.2.3