\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{ven. nov. 11 09:57:32 CET 2011}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={udev},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Gestion des périphériques dynamiques},
CreationDate={D:20111111095732},
ModDate={D:20111111095732},
Keywords={Linux;Linux configuration}
}}
\begin{document}
 
\begin{center}
{\Huge udev }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Gestion des périphériques dynamiques}
 
\vspace{10mm}
 
\vspace{1cm}{\huge Description }
 
\
 
\hspace{1mm}  \textbf{udev} fournis un système d'évènements périphériques, de gestion des permissions des nœuds périphériques, et peut créer des liens symboliques additionnels dans /dev, ou renommer des interfaces réseaux. Le kernel assigne simplement des noms de périphériques basés sur l'ordre de découverte.
\vspace{5mm} \\
\hspace{1mm}  \textbf{udevd} reçois les uevents directement du kernel quand un périphérique est ajouté ou enlevé du système, ou quand son état change. Quand udev reçois un évènement périphérique, il regarde si des règles dans sa configuration correspondent, peut fournir des informations additionnelles à stocker dans la base de données udev, ou des informations pour créer des noms de liens. Tous les processus d'information de périphériques sont stockés dans la base de données udev et envoyés au souscripteur d'évent.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Configuration }
 
\
 
\hspace{1mm}  Les fichiers de configuration sont dans \textbf{/etc/udev} et \textbf{/lib/udev}. Toutes les lignes vides, ou commençant par '\#' seront ignorés
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Fichier de configuration }
 
\
 
\hspace{1mm}  Le fichier de configuration principal est \textbf{/etc/udev/udev.conf}. Il consiste de variables permettant à l'utilisateur d'écraser les valeurs
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} udev]{par défaut. Les variables sont :}
\item[\hspace{1mm} udev\_root]{Spécifie où placer les nœuds de périphériques dans le système de fichier (défaut /dev)}
\item[\hspace{1mm} udev\_log]{Le logging priority.}
\end{description}
 
\vspace{1cm}{\huge Fichiers de règles }
 
\
 
\hspace{1mm}  Les règles par défaut de \textbf{udev} sont lues depuis les fichiers dans \textbf{/lib/udev/rule.d/}, les fichiers personnalisés dans \textbf{/etc/udev/rules.d/}, et les fichiers temporaires dans \textbf{/dev/.udev/rules.d/}. Tous les fichiers de règles sont triés et traités dans l'ordre lexical, sans regarder dans quel répertoire ils sont. Les fichiers dans \textbf{/etc/udev/rules.d} ont une précédence sur les fichiers de même nom dans /lib/udev/rules.d.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les fichiers de règles doivent se terminer par \textbf{.rules}, sinon ils sont ignorés. Chaque ligne dans un fichier de règle contient au moins une paire de clé/valeur. Il y'a 2 types de clé, les clés de correspondance et les clés d'assignement. Si toutes les clés de correspondance correspondent avec leurs valeurs, la règle s'applique et les clés d'assignement reçoivent la valeur spécifiée. Une règle de correspondance peut renommer une interface réseau, ajouter les liens pointant vers des nœuds de périphériques, ou lancer un programme spécifique.
\vspace{5mm} \\
 
 
\hspace{1mm}  Une règle consiste d'une ou plusieurs paires de clé/valeur séparés par un ','. Chaque clé a une opération distincte, dépendant de l'opérateur utilisé
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Opérateurs }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} ==]{compare l'égalité}
\item[\hspace{1mm} !=]{Compare l'inégalité}
\item[\hspace{1mm} =]{Assigne une valeur à une clé. Les clés qui représentent une liste, sont réinitialisées avec cette valeur simple.}
\item[\hspace{1mm} +=]{Ajoute la valeur à une clé qui maintient une liste}
\item[\hspace{1mm} :=]{Assigne une valeur à une clé, puis empêche de modifier cette valeur ultérieurement.}
\end{description}
 
\hspace{1mm}  Les noms des clés peuvent être utilisés pour faire correspondre les propriétés des périphériques. Certains périphériques matchent également des clés avec les propriétés des périphériques parent dans sysfs. Si plusieurs clés qui match un périphérique parent sont spécifié dans une simple règle, toutes ces clés doivent matcher à un et le même périphérique parent.
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} ACTION]{Match le nom de l'action}
\item[\hspace{1mm} DEVPATH]{Match le devpath du périphérique}
\item[\hspace{1mm} KERNEL]{Match le nom du périphérique}
\item[\hspace{1mm} NAME]{Match le nom du nœud ou de l'interface réseau}
\item[\hspace{1mm} SYMLINK]{Match le nom d'un lien ciblant le nœud}
\item[\hspace{1mm} SUBSYSTEM]{Match le nom du pilote du périphérique}
\item[\hspace{1mm} ATTR\{filename\}]{Match les valeurs d'attribut sysfs du périphérique.}
\item[\hspace{1mm} KERNELS]{Cherche le devpath supérieur pour un nom de périphérique correspondant}
\item[\hspace{1mm} SUBSYSTEMS]{Cherche le devpath supérieur pour un nom de sous-système de périphérique correspondant}
\item[\hspace{1mm} DRIVERS]{Cherche le devpath supérieur pour un nom de pilote de périphérique correspondant}
\item[\hspace{1mm} ATTRS\{filename\}]{Cherche le devpath supérieur pour un périphérique qui match les valeurs d'attributs sysfs. Si plusieurs ATTRS sont spécifiés, tous doivent matcher sur le même périphérique.}
\item[\hspace{1mm} ENV\{key\}]{Match avec une valeur de propriété de périphérique.}
\item[\hspace{1mm} TAG]{Match avec un tag de périphérique}
\item[\hspace{1mm} TEST\{masque octal\}]{Test l'existence d'un fichier. Un masque octal peut être spécifié.}
\item[\hspace{1mm} PROGRAM]{Exécute un programme. La clé est vraie, si le programme retourne un succès. Les propriétés du périphérique sont disponibles pour le programme. La sortie du programme affichée dans stdout est redirigée dans la clé RESULT}
\item[\hspace{1mm} RESULT]{Match la chaîne retournée par un appel PROGRAM.}
\end{description}
 
\hspace{1mm}  De nombreux champs supportent les motifs type shell:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} * ]{Match aucun, ou un certain nombre de caractères}
\item[\hspace{1mm} ? ]{Match un simple caractère}
\item[\hspace{1mm} \texttt{[}\texttt{]}]{Match un simple caractère spécifié dans les crochets.}
\end{description}
 
\hspace{1mm}  Les clés suivantes peuvent être assignées :
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} NAME]{Le nom du nœud de périphérique. Généralement, le kernel définis le nom du nœud par défaut, ou créé et supprime le nœud avant que udev reçoive l'event. Changer le nom du nœud créés des inconsistances et n'est pas supportées. Si le kernel et NAME spécifient des noms différents, une erreur sera loggée. Udev ne modifie que les permissions des nœuds et crée des liens additionnels, qui est une bonne manière pour renommer un nœud. Les liens ne doivent jamais être en conflit avec des noms de nœud.}
\item[\hspace{1mm} SIMLINK]{Le nom de lien ciblant un nœud. Chaque règle qui match va ajouter cette valeur à la liste des liens à créer. Plusieurs liens peuvent être créés en les séparant par un espace. Si plusieurs périphériques demandent le même nom de lien, le lien pointera toujours vers le périphérique avec la plus haute link\_priority. Si ce périphérique est supprimé, le lien sera réévalué. Sans link\_priority spécifié, le périphérique obtenant le lien ne peut être prédit.}
\item[\hspace{1mm} OWNER, GROUP, MODE]{Les permissions pour le nœud périphérique.}
\item[\hspace{1mm} ATTRKEY]{La valeur qui devrait être écrite dans un attribut sysfs du périphérique de l'évènement}
\item[\hspace{1mm} ENVKEY]{Définis une valeur de propriété du périphérique. Les noms de propriété avec un '.' ne sont pas stockés dans la base ou exportés vers les outils externes ou évènements.}
\item[\hspace{1mm} TAG]{Attache un tag à un périphérique. C'est utilisé pour filtrer les évènements pour les utilisateurs de la fonctionnalité de monitoring de libudev. L'implémentation peut seulement fonctionner efficacement si seulement quelques tags sont attachés aux périphériques.}
\item[\hspace{1mm} RUN]{Ajoute un programme à la liste des programmes à exécuter pour un périphérique spécifique. Cela peut seulement être utilisé pour des tâche très courtes. Les tâches longues bloquent le processus d'évènement. Si RUNfail\_event\_on-error est spécifié, et que le programme ne retourne pas 0, l'évènement sera marqué comme échoué. Sans chemin absolu, le programme doit être dans /lib/udev. Les chemins avec des espaces peuvent être spécifié entre ''}
\item[\hspace{1mm} LABEL]{Label nommé où un GOTO peut sauter}
\item[\hspace{1mm} GOTO]{Saute à LABEL}
\item[\hspace{1mm} IMPORT\{type\}]{Importe des variables comme propriétés de périphérique, en fonction de son type:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} program]{Exécute un programme externe.}
\item[\hspace{6mm} file]{Importe un fichier texte comme valeur assignée, qui doit être au format de clé d'environnement}
\item[\hspace{6mm} db]{Importe une simple propriété spécifiée comme valeur assignée la base du périphérique courrant. Ne fonctionne que si la base est déjà remplie par un précédent évènement.}
\item[\hspace{6mm} cmdline]{Importe une simple propriété depuis la ligne de commande du kernel. Pour de simples flags la valeur de la propriété sera à 1.}
\item[\hspace{6mm} parent]{Import les clés stockées du périphérique parent.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} ]{Sans option, udev choisis entre program et file en fonction du bit exécutable des permissions de fichier}
\item[\hspace{1mm} WAIT\_FOR]{Attend qu'un fichier devienne disponible ou 10sec. Le chemin est relatif au périphérique sysfs. Sans chemin spécifié, attend qu'un attribut apparaisse.}
\end{description}
 
\vspace{1cm}{\huge Options }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} link\_priority=value]{Spécifie la priorité des liens crées. (Défaut: 0)}
\item[\hspace{1mm} event\_timeout=]{Nombre de seconde qu'un event attend les opérations avant de se terminer de lui-même.}
\item[\hspace{1mm} string\_escape=none|replace]{Les caractères non-sûres et de contrôle sont remplacés dans les chaînes utilisé pour le nommage des périphériques.}
\item[\hspace{1mm} static\_node=]{Applique les permissions spécifiée dans cette règle à un nœud de périphérique statique avec le nom spécifié. Les nœuds statique peuvent être des modules kernel, ou copiés depuis /lib/udev/devices. Ces nœuds peuvent ne pas avoir de module kernel correspondant au moment où udev est démarré, et permet de piloter les modules chargeable du kernel.}
\item[\hspace{1mm} watch]{Recherche un nœud avec inotify, quand il est fermé après avoir été ouvert en écriture, un uevent de changement sera synthétisé.}
\item[\hspace{1mm} nowatch]{Désactive la recherche de nœud avec inotify}
\end{description}
 
\hspace{1mm}  Les champs \textbf{NAME, SYMLINK, PROGRAM, OWNER, GROUP, MODE} et \textbf{RUN} supportent les substitutions de chaîne dans le style printf. Les substitutions sont:
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Options }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} \$kernel, \%k]{Le nom kernel pour ce périphérique}
\item[\hspace{1mm} \$number, \%n]{Le numéro kernel pour ce périphérique. Par exemple 'sda3' a comme nombre kernel 3.}
\item[\hspace{1mm} \$devpath, \%p]{Le devpath du périphérique}
\item[\hspace{1mm} \$id, \%b]{Le nom du périphérique matché pendant la recherche de devpath supérieur pour SUBSYSTEMS, KERNELS, DRIVERS et ATTRS}
\item[\hspace{1mm} \$driver]{Le nom du pilote du périphérique matché pendant la recherche du devpath supérieur pour SUBSYSTEMS, KERNELS, DRIVERS et ATTRS}
\item[\hspace{1mm} \$attrfile, \%sfile]{La valeur d'un attribut sysfs trouvé au périphérique, où toutes les clés de la règle ont matchés.}
\item[\hspace{1mm} \$envkey, \%Ekey]{Une valeur de propriété de périphérique}
\item[\hspace{1mm} \$major, \%M]{Le numéro majeur kernel pour le périphérique}
\item[\hspace{1mm} \$minor, \%m]{Le numéro mineur kernel pour le périphérique}
\item[\hspace{1mm} \$result, \%c]{La chaîne retournée par le programme externe lancé avec PROGRAM. Une seule partie de la chaîne peut être sélectionnée en spécifiant le numéro comme attribut \%cN. Si le numéro est suivi d'un '+', cette partie + plus celles restantes sont substituées.}
\item[\hspace{1mm} \$parent, \%P]{Le nom du nœud parent}
\item[\hspace{1mm} \$name]{Le nom courant du nœud}
\item[\hspace{1mm} \$links]{La liste des liens courants, séparés par un espace.}
\item[\hspace{1mm} \$root, \%r]{La valeur udev\_root}
\item[\hspace{1mm} \$sys, \%S]{Le point de montage sysfs}
\item[\hspace{1mm} \$tempnode, \%N]{Le nom d'un nœud créé temporairement pour fournir l'accès au périphérique depuis un programme externe avant que le vrai nœud soit créé.}
\item[\hspace{1mm} \%\%]{Le caractère \%}
\item[\hspace{1mm} \$\$]{Le caractère \$}
\end{description}
\end{flushleft}
\end{document}
