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/handout_uio-driver_de.tex | 32 +++++++++-------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'kernel-devel/uio-driver/handout_uio-driver_de.tex') 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} -- cgit v1.2.3