mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-14 18:45:48 +07:00
547 lines
24 KiB
XML
547 lines
24 KiB
XML
<?xml version='1.0'?>
|
|
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
|
|
<article>
|
|
<section>
|
|
<title>udev</title>
|
|
<refentry>
|
|
<refentryinfo>
|
|
<title>udev</title>
|
|
<date>August 2005</date>
|
|
<productname>udev</productname>
|
|
</refentryinfo>
|
|
|
|
<refmeta>
|
|
<refentrytitle>udev</refentrytitle>
|
|
<manvolnum>7</manvolnum>
|
|
<refmiscinfo class="version"></refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>udev</refname>
|
|
<refpurpose>dynamic device management</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1><title>DESCRIPTION</title>
|
|
<para>udev provides a dynamic device directory containing only the files for
|
|
actually present devices. It creates or removes device node files in the
|
|
<filename>/dev</filename> directory, or it renames network interfaces.</para>
|
|
|
|
<para>Usually udev runs as <citerefentry><refentrytitle>udevd</refentrytitle>
|
|
<manvolnum>8</manvolnum></citerefentry> and receives uevents directly from the
|
|
kernel if a device is added or removed form the system.</para>
|
|
|
|
<para>If udev receives a device event, it matches its configured rules
|
|
against the available device attributes provided in sysfs to identify the device.
|
|
Rules that match, may provide additional device information or specify a device
|
|
node name and multiple symlink names and instruct udev to run additional programs
|
|
as part of the device event handling.</para>
|
|
</refsect1>
|
|
|
|
<refsect1><title>CONFIGURATION</title>
|
|
<para>All udev configuration files are placed in <filename>/etc/udev/*</filename>.
|
|
Every file consists of a set of lines of text. All empty lines or lines beginning
|
|
with '#' will be ignored.</para>
|
|
|
|
<refsect2><title>Configuration file</title>
|
|
<para>udev expects its main configuration file at <filename>/etc/udev/udev.conf</filename>.
|
|
It consists of a set of variables allowing the user to override default udev values.
|
|
The following variables can be set:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>udev_root</option></term>
|
|
<listitem>
|
|
<para>Specifies where to place the device nodes in the filesystem.
|
|
The default value is <filename>/dev</filename>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>udev_rules</option></term>
|
|
<listitem>
|
|
<para>The name of the udev rules file or directory to look for files
|
|
with the suffix <filename>.rules</filename>. Multiple rule files are
|
|
read in lexical order. The default value is
|
|
<filename>/etc/udev/rules.d</filename>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>udev_log</option></term>
|
|
<listitem>
|
|
<para>The logging priority. Valid values are the numerical syslog priorities
|
|
or their textual representations: <option>err</option>, <option>info</option>
|
|
and <option>debug</option>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</refsect2>
|
|
|
|
<refsect2><title>Rules files</title>
|
|
<para>The udev rules are read from the files located in the
|
|
<filename>/etc/udev/rules.d</filename> directory or at the location specified
|
|
value in the configuration file. Every line in the rules file contains at least
|
|
one key value pair. There are two kind of keys, match and assignment keys.
|
|
If all match keys are matching against its value, the rule gets applied and the
|
|
assign keys get the specified value assigned. A matching rule may specify the
|
|
name of the device node, add a symlink pointing to the node, or run a specified
|
|
program as part of the event handling. If no matching rule is found, the default
|
|
device node name is used.</para>
|
|
|
|
<para>A rule may consists of a list of one or more key value pairs separated by
|
|
a comma. Each key has a distinct operation, depending on the used operator. Valid
|
|
operators are:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>==</option></term>
|
|
<listitem>
|
|
<para>Compare for equality.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>!=</option></term>
|
|
<listitem>
|
|
<para>Compare for non-equality.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>=</option></term>
|
|
<listitem>
|
|
<para>Assign a value to a key. Keys that represent a list, are reset
|
|
and only this single value is assigned.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>+=</option></term>
|
|
<listitem>
|
|
<para>Add the value to a key that holds a list of entries.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>:=</option></term>
|
|
<listitem>
|
|
<para>Assign a value to a key finally; disallow any later changes,
|
|
which may be used to prevent changes by any later rules.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>The following key names can be used to match against device properties:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>ACTION</option></term>
|
|
<listitem>
|
|
<para>Match the name of the event action.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>DEVPATH</option></term>
|
|
<listitem>
|
|
<para>Match the devpath of the event device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>KERNEL</option></term>
|
|
<listitem>
|
|
<para>Match the name of the event device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>SUBSYSTEM</option></term>
|
|
<listitem>
|
|
<para>Match the subsystem of the event device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<!--
|
|
<varlistentry>
|
|
<term><option>DRIVER</option></term>
|
|
<listitem>
|
|
<para>Match the driver name of the event device. Only set for devices created by a bus driver.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
-->
|
|
<varlistentry>
|
|
<term><option>ATTR{<replaceable>filename</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>Match sysfs attribute values of the event device. Up to five
|
|
<option>ATTR</option> keys can be specified per rule. Trailing
|
|
whitespace in the attribute values is ignored, if the specified match
|
|
value does not contain trailing whitespace itself. Depending on the type
|
|
of operator, this key is also used to set the value of a sysfs attribute.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>KERNELS</option></term>
|
|
<listitem>
|
|
<para>Search the devpath upwards for a matching device name.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>SUBSYSTEMS</option></term>
|
|
<listitem>
|
|
<para>Search the devpath upwards for a matching device subsystem name.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>DRIVERS</option></term>
|
|
<listitem>
|
|
<para>Search the devpath upwards for a matching device driver name.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>ATTRS{<replaceable>filename</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>Search the devpath upwards for a device with matching sysfs attribute values.
|
|
Up to five <option>ATTRS</option> keys can be specified per rule. All attributes
|
|
must match on the same device. Trailing whitespace in the attribute values is ignored,
|
|
if the specified match value does not contain trailing whitespace itself.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>ENV{<replaceable>key</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>Match against the value of an environment variable. Up to five <option>ENV</option>
|
|
keys can be specified per rule. Depending on the type of operator, this key is also used
|
|
to export a variable to the environment.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>PROGRAM</option></term>
|
|
<listitem>
|
|
<para>Execute external program. The key is true, if the program returns
|
|
without exit code zero. The whole event environment is available to the
|
|
executed program. The program's output printed to stdout is available for
|
|
the RESULT key.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>RESULT</option></term>
|
|
<listitem>
|
|
<para>Match the returned string of the last PROGRAM call. This key can
|
|
be used in the same or in any later rule after a PROGRAM call.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>Most of the fields support a shell style pattern matching. The following
|
|
pattern characters are supported:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>*</option></term>
|
|
<listitem>
|
|
<para>Matches zero, or any number of characters.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><option>?</option></term>
|
|
<listitem>
|
|
<para>Matches any single character.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><option>[]</option></term>
|
|
<listitem>
|
|
<para>Matches any single character specified within the brackets. For
|
|
example, the pattern string 'tty[SR]' would match either 'ttyS' or 'ttyR'.
|
|
Ranges are also supported within this match with the '-' character.
|
|
For example, to match on the range of all digits, the pattern [0-9] would
|
|
be used. If the first character following the '[' is a '!', any characters
|
|
not enclosed are matched.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>The following keys can get values assigned:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>NAME</option></term>
|
|
<listitem>
|
|
<para>The name of the node to be created, or the name the network interface
|
|
should be renamed to. Only one rule can set the node name, all later rules with
|
|
a NAME key will be ignored.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>SYMLINK</option></term>
|
|
<listitem>
|
|
<para>The name of a symlink targeting the node. Every matching rule can add
|
|
this value to the list of symlinks to be created along with the device node.
|
|
Multiple symlinks may be specified by separating the names by the space
|
|
character.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>OWNER, GROUP, MODE</option></term>
|
|
<listitem>
|
|
<para>The permissions for the device node. Every specified value overwrites
|
|
the compiled-in default value.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>ATTR{<replaceable>key</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>The value that should be written to a sysfs attribute of the
|
|
event device. Depending on the type of operator, this key is also
|
|
used to match against the value of a sysfs attribute.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>ENV{<replaceable>key</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>Export a variable to the environment. Depending on the type of operator,
|
|
this key is also to match against an environment variable.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>RUN</option></term>
|
|
<listitem>
|
|
<para>Add a program to the list of programs to be executed for a specific
|
|
device. This can only be used for very short running tasks. Running an
|
|
event process for a long period of time may block all further events for
|
|
this or a dependent device. Long running tasks need to be immediately
|
|
detached from the event process itself.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>LABEL</option></term>
|
|
<listitem>
|
|
<para>Named label where a GOTO can jump to.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>GOTO</option></term>
|
|
<listitem>
|
|
<para>Jumps to the next LABEL with a matching name</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>IMPORT{<replaceable>type</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>Import a set of variables into the event environment,
|
|
depending on <replaceable>type</replaceable>:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>program</option></term>
|
|
<listitem>
|
|
<para>Execute an external program specified as the assigned value and
|
|
import its output, which must be in environment key format.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><option>file</option></term>
|
|
<listitem>
|
|
<para>Import a text file specified as the assigned value, which must be in
|
|
environment key format.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><option>parent</option></term>
|
|
<listitem>
|
|
<para>Import the stored keys from the parent device by reading
|
|
the database entry of the parent device. The value assigned to
|
|
<option>IMPORT{parent}</option> is used as a filter of key names
|
|
to import (with the same shell-style pattern matching used for
|
|
comparisons).</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
<para>If no option is given, udev will choose between <option>program</option>
|
|
and <option>file</option> based on the executable bit of of the file
|
|
permissions.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>WAIT_FOR_SYSFS</option></term>
|
|
<listitem>
|
|
<para>Wait for the specified sysfs file of the device to be created. Can be used
|
|
to fight against kernel sysfs timing issues.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>OPTIONS</option></term>
|
|
<listitem>
|
|
<para><option>last_rule</option> stops further rules application. No later rules
|
|
will have any effect.
|
|
<option>ignore_device</option> will ignore this event completely.
|
|
<option>ignore_remove</option> will ignore any later remove event for this
|
|
device. This may be useful as a workaround for broken device drivers.
|
|
<option>all_partitions</option> will create the device nodes for all available
|
|
partitions of a block device. This may be useful for removable media devices where
|
|
media changes are not detected.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>The <option>NAME</option>, <option>SYMLINK</option>, <option>PROGRAM</option>,
|
|
<option>OWNER</option>, <option>GROUP</option> and <option>RUN</option>
|
|
fields support simple printf-like string substitutions. The <option>RUN</option>
|
|
format chars gets applied after all rules have been processed, right before the program
|
|
is executed. It allows the use of the complete environment set by earlier matching
|
|
rules. For all other fields, substitutions are applied while the individual rule is
|
|
being processed. The available substitutions are:</para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>$kernel</option>, <option>%k</option></term>
|
|
<listitem>
|
|
<para>The kernel name for this device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$number</option>, <option>%n</option></term>
|
|
<listitem>
|
|
<para>The kernel number for this device. For example, 'sda3' has
|
|
kernel number of '3'</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$devpath</option>, <option>%p</option></term>
|
|
<listitem>
|
|
<para>The devpath of the device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$id</option>, <option>%b</option></term>
|
|
<listitem>
|
|
<para>The name of the device matched while searching the devpath upwards for
|
|
<option>SUBSYSTEMS</option>, <option>KERNELS</option>, <option>DRIVERS</option> and <option>ATTRS</option>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$attr{<replaceable>file</replaceable>}</option>, <option>%s{<replaceable>file</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>The value of a sysfs attribute found at the device, where
|
|
all keys of the rule have matched. If the matching device does not have
|
|
such an attribute, all devices along the chain of parents are searched
|
|
for a matching attribute.
|
|
If the attribute is a symlink, the last element of the symlink target is
|
|
returned as the value.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$env{<replaceable>key</replaceable>}</option>, <option>%E{<replaceable>key</replaceable>}</option></term>
|
|
<listitem>
|
|
<para>The value of an environment variable.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$major</option>, <option>%M</option></term>
|
|
<listitem>
|
|
<para>The kernel major number for the device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$minor</option> <option>%m</option></term>
|
|
<listitem>
|
|
<para>The kernel minor number for the device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$result</option>, <option>%c</option></term>
|
|
<listitem>
|
|
<para>The string returned by the external program requested with PROGRAM.
|
|
A single part of the string, separated by a space character may be selected
|
|
by specifying the part number as an attribute: <option>%c{N}</option>.
|
|
If the number is followed by the '+' char this part plus all remaining parts
|
|
of the result string are substituted: <option>%c{N+}</option></para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$parent</option>, <option>%P</option></term>
|
|
<listitem>
|
|
<para>The node name of the parent device.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$root</option>, <option>%r</option></term>
|
|
<listitem>
|
|
<para>The udev_root value.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$tempnode</option>, <option>%N</option></term>
|
|
<listitem>
|
|
<para>The name of a created temporary device node to provide access to
|
|
the device from a external program before the real node is created.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>%%</option></term>
|
|
<listitem>
|
|
<para>The '%' character itself.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>$$</option></term>
|
|
<listitem>
|
|
<para>The '$' character itself.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
<para>The count of characters to be substituted may be limited by specifying
|
|
the format length value. For example, '%3s{file}' will only
|
|
insert the first three characters of the sysfs attribute</para>
|
|
</refsect2>
|
|
</refsect1>
|
|
|
|
<refsect1><title>AUTHOR</title>
|
|
<para>Written by Greg Kroah-Hartman <email>greg@kroah.com</email> and
|
|
Kay Sievers <email>kay.sievers@vrfy.org</email>. With much help from
|
|
Dan Stekloff <email>dsteklof@us.ibm.com</email> and many others.</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>SEE ALSO</title>
|
|
<para><citerefentry>
|
|
<refentrytitle>udevd</refentrytitle><manvolnum>8</manvolnum>
|
|
</citerefentry>,
|
|
<citerefentry>
|
|
<refentrytitle>udevinfo</refentrytitle><manvolnum>8</manvolnum>
|
|
</citerefentry>,
|
|
<citerefentry>
|
|
<refentrytitle>udevmonitor</refentrytitle><manvolnum>8</manvolnum>
|
|
</citerefentry></para>
|
|
</refsect1>
|
|
</refentry>
|
|
</section>
|
|
</article>
|