1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
\documentclass[11pt]{beamer}
%\usepackage{ngerman}
\usepackage{times}
\usepackage{graphicx}
\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps}
\usepackage{amsmath,amssymb}
\usepackage[latin1]{inputenc}
\usepackage{listings,color}
\definecolor{lbcolor}{RGB}{255,210,150}
\lstset{
language=C,
numbers=left,
stepnumber=1,
numbersep=5pt,
numberstyle=\tiny,
breaklines=true,
breakautoindent=true,
postbreak=\space,
tabsize=2,
basicstyle=\ttfamily\footnotesize,
showspaces=false,
showstringspaces=false,
extendedchars=true,
backgroundcolor=\color{lbcolor},
keywordstyle=\bf ,
commentstyle=\color{green},
stringstyle=\color{red}
}
\mode<presentation>
{
\usetheme{linutronix}
}
% on the following slides, include icon in the left sidebar
\def\lximg{/usr/share/lx/icons/fueller.png}
\title{The UDEV Daemon}
\institute{Linutronix GmbH}
\begin{document}
\frame{ \titlepage }
% stop displaying 'fueller.png' on the following slides
\def\lximg{none}
\begin{frame}
\frametitle{What is UDEV?}
\begin{itemize}
\item UDEV is responsible for dynamic device management
\item It receives so called uevents from the kernel via a netlink socket
\item Based on the rules defined in the UDEV configuration, specific tasks can
be performed (e.g. creating device nodes)
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{How to perform actions on ''missed'' uevents}
\begin{itemize}
\item Since udev is a userspace process, it is started when the system is already up
and running. To perform actions on the events, which have been generated
during the kernel boot-up, there's a trigger functionality
\item So, usually the first thing after starting udev is to trigger the missed events
\item This can be done by calling ''udevadm trigger''
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Monitoring udev events}
\begin{verbatim}
jan@bender:~$ sudo udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out
after rule processing
KERNEL - the kernel uevent
KERNEL[129.916] add [...]usb1/1-3/1-3.1 [...]
KERNEL[129.917] add [...]usb1/1-3/1-3.1 [...]
KERNEL[129.918] add [...]usb1/1-3/1-3.1 [...]
KERNEL[129.918] add [...]usb1/1-3/1-3.1 [...]
UDEV [129.922] add [...]usb1/1-3/1-3.1 [...]
UDEV [129.922] add [...]usb1/1-3/1-3.1 [...]
[...]
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{UDEV: important commands}
Starting the UDEV Daemon:
\begin{verbatim}
udevd --daemon
\end{verbatim}
Triggering UDEV events:
\begin{verbatim}
udevadm trigger
\end{verbatim}
Monitoring UDEV events:
\begin{verbatim}
udevadm monitor
\end{verbatim}
\end{frame}
\begin{frame}
\frametitle{Writing UDEV rules}
\begin{itemize}
\item Rules are usually kept in /etc/udev/rules.d
\item Rules are constructed using series of KEY-VALUE pairs
\item The pairs are separated by commas
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Basic keywords}
\begin{itemize}
\item KERNEL\\
The kernel name of a device
\item SUBSYSTEM\\
The name of the subsystem which caused the event
\item DRIVER\\
Name of the driver which caused the event
\item NAME\\
Name of the device node
\item SYMLINK\\
Name of a symlink pointing to the node
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Simple example for device node creation}
\begin{verbatim}
# Some basic rule
KERNEL=="ttyS0", NAME="my_serial_port"
# A more complex rule using SysFS attributes
# and regular expressions
SUBSYSTEM=="net", ACTION=="add", \
DRIVERS=="?*", \
ATTR{address}=="00:19:d1:12:0d:d2", \
KERNEL=="eth*", NAME="eth0"
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{Operators}
\begin{verbatim}
Comparisons:
== equal
!= not equal
Assignments:
= Assign a value
+= Add a value
:= Finally assign a value
(disallow any later changes)
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{Substitutions}
\begin{verbatim}
%k kernel name
%n number for this device
%d driver name
%M major number of this device
%m minor number of this device
[...]
\end{verbatim}
\end{frame}
\section*{sources}
\begin{frame}
\begin{thebibliography}{1}
\bibitem{udev} http://reactivated.net/writing\_udev\_rules.html
\bibitem{manudev} man udev
\end{thebibliography}
\end{frame}
\end{document}
|