mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-31 07:51:08 +03:00
821d0ec803
SUBSYSTEM=="block", RUN="/sbin/program" will execute the program only for block device events. ACTION="remove", SUBSYSTEM=="block", RUN"/sbin/program" will execute the program, if a block device is removed.
388 lines
12 KiB
Groff
388 lines
12 KiB
Groff
.TH UDEV 8 "October 2003" "" "Linux Administrator's Manual"
|
|
.SH NAME
|
|
udev \- Linux configurable dynamic device naming support
|
|
.SH SYNOPSIS
|
|
.BI udev
|
|
.SH "DESCRIPTION"
|
|
.B udev
|
|
provides a dynamic device directory containing only the files for actually
|
|
present devices. It creates or removes device node files usually located in
|
|
the /dev directory, or it renames network interfaces.
|
|
.br
|
|
.P
|
|
As part of the
|
|
.B hotplug
|
|
subsystem,
|
|
.B udev
|
|
is executed if a kernel device is added or removed from the system.
|
|
On device creation,
|
|
.B udev
|
|
reads the sysfs directory of the given device to collect device attributes
|
|
like label, serial number or bus device number.
|
|
These attributes may be used as keys to determine a
|
|
unique name for the device.
|
|
.B udev
|
|
maintains a database for devices present on the system.
|
|
.br
|
|
On device removal,
|
|
.B udev
|
|
queries its database for the name of the device file to be deleted.
|
|
.SH "CONFIGURATION"
|
|
All
|
|
.B udev
|
|
configuration files consist of a set of lines of text. All empty
|
|
lines or lines beginning with '#' will be ignored.
|
|
.P
|
|
.B udev
|
|
expects its main configuration file at
|
|
.IR /etc/udev/udev.conf .
|
|
The file consists of a set of variables and values allowing the user to
|
|
override default udev values. The following variables can be overridden
|
|
in this file:
|
|
.TP
|
|
.B udev_root
|
|
Indicates where to place the device nodes in the filesystem. The default
|
|
value is
|
|
.IR @udevdir@/ .
|
|
.TP
|
|
.B udev_db
|
|
The name and location of the udev database. The default value is
|
|
.IR @udevdir@/.udevdb .
|
|
.TP
|
|
.B udev_rules
|
|
The name of the udev rules file or directory to look for files with the suffix
|
|
.IR .rules .
|
|
All rule files are read in lexical order. The default value is
|
|
.IR /etc/udev/rules.d/ .
|
|
.TP
|
|
.B udev_log
|
|
The logging priority which can be set to
|
|
.IR "err " , "info "
|
|
or the corresponding numerical
|
|
.BR syslog (3)
|
|
value.
|
|
The default value is
|
|
.IR err .
|
|
.P
|
|
.RI "A sample " udev.conf " file might look like this:
|
|
.sp
|
|
.nf
|
|
# Where in the filesystem to place the device nodes
|
|
udev_root="@udevdir@"
|
|
|
|
# The name and location of the udev database.
|
|
udev_db="@udevdir@/.udevdb"
|
|
|
|
# The name and location of the udev rules file(s).
|
|
udev_rules="@configdir@/rules.d"
|
|
|
|
# The syslog(3) priority: "err", "info", or the numerical value.
|
|
udev_log="err"
|
|
.fi
|
|
.P
|
|
The rules for device naming are read from the files located in the
|
|
.I /etc/udev/rules.d/
|
|
directory, or at the location specified by the
|
|
.I udev_rules
|
|
value in the
|
|
.I /etc/udev/udev.conf
|
|
file.
|
|
.br
|
|
Every line in the rules file defines the mapping between device attributes
|
|
and the device name. One or more keys are specified to match a rule with
|
|
the current device. If all keys are matching, the rule will be applied and
|
|
the name is used to name the device file or the network interface.
|
|
.br
|
|
If no matching rule is found, the default kernel device name is used.
|
|
.P
|
|
Every rule consists of a list of comma separated key value fields:
|
|
.sp
|
|
.IR "key " ,[ "key " ,...]
|
|
.P
|
|
The following key names can be used to match against device properties:
|
|
.TP
|
|
.B BUS
|
|
Match the bus type of the device.
|
|
(The sysfs device bus must be able to be determined by a "device" symlink.)
|
|
.TP
|
|
.B KERNEL
|
|
Match the kernel device name.
|
|
.TP
|
|
.B SUBSYSTEM
|
|
Match the kernel subsystem name.
|
|
.TP
|
|
.B ACTION
|
|
Match the kernel action name.
|
|
.TP
|
|
.B DRIVER
|
|
Match the kernel driver name.
|
|
.TP
|
|
.B ID
|
|
Match the device number on the bus, like PCI bus id.
|
|
.TP
|
|
.BI SYSFS{ filename }
|
|
Match sysfs device attribute like vendor and product id's, USB serial number
|
|
or the SCSI disk model number. Up to 5 different sysfs files can be checked,
|
|
with all of the values being required to match the rule.
|
|
.br
|
|
Trailing whitespace characters in the sysfs attribute value are ignored, if
|
|
the key doesn't have any trailing whitespace characters by itself.
|
|
.TP
|
|
.BI ENV{ variable }
|
|
Match an environment variable. Up to 5 different environment variables can be
|
|
checked, with all of the values being required to match the rule.
|
|
.TP
|
|
.B PROGRAM
|
|
Call external program. This key is valid if the program returns successful.
|
|
The environment variables of
|
|
.B udev
|
|
are also available to the program.
|
|
.br
|
|
The string returned by the program may be additionally matched with the
|
|
.B RESULT
|
|
key in the same or any later rule.
|
|
.TP
|
|
.B RESULT
|
|
Match the returned string of the last
|
|
.B PROGRAM
|
|
call. This key can be used in the same or in any later rule after a
|
|
.B PROGRAM
|
|
call.
|
|
.P
|
|
The following keys can get values assigned:
|
|
.TP
|
|
.B NAME
|
|
The name of the node to be created, or the name, the network interface
|
|
should be renamed to.
|
|
.TP
|
|
.B SYMLINK
|
|
The name of a symlink targeting the node. Multiple symlinks may be
|
|
specified by separating the names by the space character.
|
|
.br
|
|
If both the name and the symlink fields are omitted or its
|
|
values are empty, the device will be ignored and no node will be created.
|
|
.br
|
|
If only the symlink field is given and the name field is omitted,
|
|
the rule will not be applied immediately, but the symlink field is added
|
|
to the symlink list of the rule which will create the node.
|
|
This makes it possible to specify additional symlinks in a possibly
|
|
separate rules file, while the device nodes are maintained by the
|
|
distribution provided rules file.
|
|
.TP
|
|
.B OWNER, GROUP, MODE
|
|
The permissions for the device node. Every specified value overwrites the
|
|
compiled-in default value.
|
|
.TP
|
|
.B RUN
|
|
Add a program to the list of programs to be executed for a specific device.
|
|
.TP
|
|
.B OPTIONS
|
|
.B last_rule
|
|
will be the last rule applied. No later rules will have any effect.
|
|
.sp
|
|
.B ignore_device
|
|
will ignore this device. No node will be created.
|
|
.sp
|
|
.B ignore_remove
|
|
will ignore any later remove event for this device.
|
|
This may be useful as a workaround for broken device drivers.
|
|
.sp
|
|
.B all_partitions
|
|
will create device nodes for all available partitions of a blockdevice.
|
|
This may be useful for removable media devices which do not detect a media
|
|
change.
|
|
.sp
|
|
Multiple attributes may be separated by comma.
|
|
.P
|
|
.RB "The " NAME ", " SYMLINK ", " PROGRAM ", " OWNER " and " GROUP
|
|
fields support simple printf-like string substitutions:
|
|
.TP
|
|
.B %n
|
|
The "kernel number" of the device.
|
|
For example, 'sda3' has a "kernel number" of '3'.
|
|
.TP
|
|
.B %k
|
|
The "kernel name" for the device.
|
|
.TP
|
|
.B %p
|
|
The devpath for the device.
|
|
.TP
|
|
.B %M
|
|
The kernel major number for the device.
|
|
.TP
|
|
.B %m
|
|
The kernel minor number for the device.
|
|
.TP
|
|
.B %b
|
|
The bus id for the device.
|
|
.TP
|
|
.B %c
|
|
The string returned by the external program, specified in
|
|
.B PROGRAM
|
|
(This does not work within the
|
|
.B PROGRAM
|
|
field for the obvious reason.)
|
|
.br
|
|
A single part of the string, separated by a space character
|
|
may be selected by specifying the part number as an attribute:
|
|
.BI %c{ N }
|
|
If the number is followed by the + char this part plus
|
|
all remaining parts of the result string are substituted:
|
|
.BI %c{ N+ }
|
|
.TP
|
|
.B %N
|
|
The name of a created temporary device node to provide access to the
|
|
device from a external program.
|
|
.TP
|
|
.B %P
|
|
The node name of the parent device.
|
|
.TP
|
|
.BI %s{ filename }
|
|
The content of a sysfs attribute.
|
|
.TP
|
|
.B %r
|
|
The udev_root value.
|
|
.TP
|
|
.B %e
|
|
If a device node already exists with the name, the smallest positive
|
|
decimal integer N is substituted such that the resulting name doesn't
|
|
match an existing device node. Otherwise nothing is substituted. This
|
|
can be used to create compatibility symlinks and enumerate devices of
|
|
the same type originating from different kernel subsystems.
|
|
.sp
|
|
Note: The use of the enumeration facility is unreliable outside of
|
|
udevstart where the node creation is serialized and predictable.
|
|
The returned numbers rely on the order devices are probed on the
|
|
system. If more than one device requests an enumeration for the same
|
|
name at the same time, it may be possible that both requests receive the
|
|
same name back from the database. The use of enumerations in todays setups
|
|
where device can come and go at any time is not recomended.
|
|
.TP
|
|
.B %%
|
|
The '%' character itself.
|
|
.P
|
|
The count of charcters to insert may be limited by specifying
|
|
the format length value. For example, '%3s{file}' will only insert
|
|
the first three characters of the sysfs attribute.
|
|
.P
|
|
.RI "A sample " udev.rules " file might look like this:"
|
|
.sp
|
|
.nf
|
|
# if /sbin/scsi_id returns "OEM 0815", the device will be called disk1
|
|
BUS=="scsi", PROGRAM=="/sbin/scsi_id", RESULT=="OEM 0815", NAME="disk1"
|
|
|
|
# USB printer to be called lp_color
|
|
BUS=="usb", SYSFS{serial}=="W09090207101241330", NAME="lp_color"
|
|
|
|
# SCSI disk with a specific vendor and model number will be called boot
|
|
BUS=="scsi", SYSFS{vendor}=="IBM", SYSFS{model}=="ST336", NAME="boot%n"
|
|
|
|
# sound card with PCI bus id 00:0b.0 to be called dsp
|
|
BUS=="pci", ID=="00:0b.0", NAME="dsp"
|
|
|
|
# USB mouse at third port of the second hub to be called mouse1
|
|
BUS=="usb", ID=="2.3", NAME="mouse1"
|
|
|
|
# ttyUSB1 should always be called pda with two additional symlinks
|
|
KERNEL=="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"
|
|
|
|
# multiple USB webcams with symlinks to be called webcam0, webcam1, ...
|
|
BUS=="usb", SYSFS{model}=="XV3", NAME=="video%n", SYMLINK="webcam%n"
|
|
.fi
|
|
.P
|
|
A number of different fields in the above configuration files support a simple
|
|
form of shell style pattern matching. It supports the following pattern characters:
|
|
.TP
|
|
.B *
|
|
Matches zero, one, or more characters.
|
|
.TP
|
|
.B ?
|
|
Matches any single character, but does not match zero characters.
|
|
.TP
|
|
.B [ ]
|
|
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.
|
|
.P
|
|
After device node creation, removal, or network device renaming,
|
|
.B udev
|
|
executes the programs located in the directory tree under
|
|
.IR /etc/dev.d/ .
|
|
The name of a program must have the suffix
|
|
.I .dev
|
|
to be recognized.
|
|
.br
|
|
In addition to the hotplug environment variables,
|
|
.B UDEV_LOG
|
|
is set and contains the numerical priority value, if udev is configured to use
|
|
.BR syslog (3).
|
|
Executed programs may want to follow that setting.
|
|
.B DEVNAME
|
|
is exported to make the name of the created node, or the name the network
|
|
device is renamed to, available to the executed program. The programs in every
|
|
directory are sorted in lexical order, while the directories are searched in
|
|
the following order:
|
|
.sp
|
|
.nf
|
|
/etc/dev.d/$(DEVNAME)/*.dev
|
|
/etc/dev.d/$(SUBSYSTEM)/*.dev
|
|
/etc/dev.d/default/*.dev
|
|
.fi
|
|
.SH "ENVIRONMENT"
|
|
.P
|
|
The following variables are read from the environment:
|
|
.TP
|
|
.B ACTION
|
|
.IR add " or " remove
|
|
signifies the addition or the removal of a device.
|
|
.TP
|
|
.B DEVPATH
|
|
The sysfs devpath of the device without the mountpoint but a leading slash.
|
|
.TP
|
|
.B SUBSYSTEM
|
|
The subsystem the device belongs to. Alternatively the subsystem may
|
|
be passed as the first argument.
|
|
.TP
|
|
.B UDEV_CONFIG_FILE
|
|
Overrides the default location of the
|
|
.B udev
|
|
config file.
|
|
.TP
|
|
.B UDEV_LOG
|
|
Overrides the log priority specified in the config file.
|
|
.TP
|
|
.B UDEV_RUN
|
|
If set to "0", it disables the execution of programs added by rules.
|
|
.TP
|
|
.B UDEV_NO_DEVD
|
|
The default behavior of
|
|
.B udev
|
|
is to execute programs in the
|
|
.I /etc/dev.d/
|
|
directory after device handling. If set,
|
|
.B udev
|
|
will skip this step.
|
|
.SH "FILES"
|
|
.nf
|
|
/sbin/udev udev program
|
|
/etc/udev/* udev config files
|
|
/etc/dev.d/* programs invoked by udev
|
|
.fi
|
|
.SH "SEE ALSO"
|
|
.BR udevinfo (8),
|
|
.BR udevd (8),
|
|
.BR hotplug (8)
|
|
.PP
|
|
.B Web resources:
|
|
.nf
|
|
.I http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
|
|
.I http://linux\-hotplug.sourceforge.net/
|
|
.fi
|
|
.SH AUTHORS
|
|
.B udev
|
|
was developed by Greg Kroah-Hartman <greg@kroah.com> with much help from
|
|
Dan Stekloff <dsteklof@us.ibm.com>, Kay Sievers <kay.sievers@vrfy.org>, and
|
|
many others.
|