LWN.net Logo

udev 008 man page

UDEV(8)                  Linux Administrator's Manual                  UDEV(8)



NAME
       udev - Linux configurable dynamic device naming support

SYNOPSIS
       udev hotplug-subsystem

DESCRIPTION
       udev  creates  or removes device node files usually located in the /dev
       directory.  Its goal is to provide a dynamic device directory that con-
       tains only the files for devices that are actually present.

       As  part  of the hotplug subsystem, udev is executed if a kernel device
       is added or removed from the system.  On device  creation,  udev  reads
       the  sysfs  directory  of the given device to collect device attributes
       like label, serial number or bus device number.  These  attributes  are
       treated  as  a key to determine a unique name for device file creation.
       udev maintains a database for devices present on the system.
       On device removal, udev queries the internal database for the  name  of
       the device file to be deleted.

CONFIGURATION
       All  udev  configuration  files consist of a set of lines of text.  All
       empty lines, and lines beginning with a '#' will be ignored.


       udev expects its main configuration file at  /etc/udev/udev.conf.   The
       file  consists  of a set of variables and values that allow the user to
       override default udev values.  The current set of variables that can be
       overridden in this file is:

       udev_root
              This  is  the where in the filesystem to place the device nodes.
              The default value for this is /udev/

       udev_db
              The name and location of the udev database.  The  default  value
              for this is /udev/.udev.tdb

       udev_rules
              This  is the location of the udev rules file.  The default value
              for this is /etc/udev/udev.rules

       udev_permissions
              This is the location of the udev permission file.   The  default
              value for this is /etc/udev/udev.permissions

       default_mode
              This  is  the  default  mode for all nodes that have no explicit
              match in the permissions file.  The default value  for  this  is
              0666

       A sample udev.conf might look like this:

       # udev_root - where in the filesystem to place the device nodes
       udev_root="/udev/"

       # udev_db - The name and location of the udev database.
       udev_db="/udev/.udev.tdb"

       # udev_rules - The name and location of the udev rules file
       udev_rules="/etc/udev/udev.rules"

       # udev_permissions - The name and location of the udev permission file
       udev_permissions="/etc/udev/udev.permissions"

       # default_mode - set the default mode for all nodes that have no
       #                explicit match in the permissions file
       default_mode="0666"

       The  rules  for  udev  to  use  when  naming  devices  may specified at
       /etc/udev/udev.rules or  specified  by  the  udev_rules  value  in  the
       /etc/udev/udev.conf file.

       Every  line  in  the  rules  file  define  the  mapping  between device
       attributes and the device file name. It starts with a keyword  defining
       the  method used to match, followed by one ore more keys to compare and
       the filename for the device. If no matching configuration is found, the
       default kernel device name is used.

       The line format is:

              method, key,[key,...] name

       where valid methods with corresponding keys are:

       CALLOUT
              calling external program, that returns a string to match
              keys: BUS, PROGRAM, ID

       LABEL  device label or serial number, like USB serial number, SCSI UUID
              or file system label
              keys: BUS, sysfsattribute

       NUMBER device number on the bus, like PCI bus id
              keys: BUS, ID

       TOPOLOGY
              device position on bus, like physical port of USB device
              keys: BUS, PLACE

       REPLACE
              string replacement of the kernel device name
              key: KERNEL_NAME

       The methods are applied in the following order: CALLOUT , LABEL ,  NUM--
       BER , TOPOLOGY , REPLACE

       The  NAME and PROGRAM fields support simple printf-like string subtitu-
       tion:

              %%nn     the "kernel number" of the device for example, 'sda3' has
                     a "kernel number" of '3'

              %%MM     the kernel major number for the device

              %%mm     the kernel minor number for the device

              %%bb     the bus id for the device

              %%cc     the  CALLOUT  program returned string (this does not work
                     within the PROGRAM field for the obvious reason.)

              %%DD     Use the devfs style disk name for this device.  For  par-
                     titions,  this  will  result in 'part%n' If this is not a
                     partition, it will result in 'disk'

       A sample udev.rules might look like this:

       # if /sbin/scsi_id returns "OEM 0815" device will be called disk1
       CALLOUT, BUS="scsi", PROGRAM="/sbin/scsi_id", ID="OEM 0815", NAME="disk1"

       # USB printer to be called lp_color
       LABEL, BUS="usb", serial="W09090207101241330", NAME="lp_color"

       # sound card with PCI bus id 00:0b.0 to be called dsp
       NUMBER, BUS="pci", ID="00:0b.0", NAME="dsp"

       # USB mouse at third port of the second hub to be called mouse1
       TOPOLOGY, BUS="usb", PLACE="2.3", NAME="mouse1"

       # ttyUSB1 should always be called pda
       REPLACE, KERNEL="ttyUSB1", NAME="pda"

       # USB webcams to be called webcam0, webcam1, ...
       LABEL, BUS="usb", model="WebCam Version 3", NAME="webcam%n"

       Permissions and ownership for the created device files may specified at
       /etc/udev/udev.permissions or specified by the udev_permission value in
       the /etc/udev/udev.conf file.
       Every line lists a device name followed by owner, group and  permission
       mode.  All values are separated by colons. The name field may contain a
       wildcard to apply the values to a whole class of devices.
       If udev was built using klibc or is used before the  user  database  is
       accessible  (e.g.  initrd ), only numeric owner and group values may be
       used.

       A sample udev.permissions might look like this:

       #name:user:group:mode
       input/*:root:root:644
       ttyUSB1:0:8:0660
       video*:root:video:0660
       dsp1:::0666

       A number of different fields in the above configuration files support a
       simple form of wildcard matching.  This form is based on the fnmatch(3)
       style, and supports the following fields:

              **      Matches zero, one, or more characters.

              ??      Matches any single character, but  does  not  match  zero
                     characters.

              [[ ]]    Matches  any single character specified within the brack-
                     ets. 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.

FILES
       /sbin/udev                           udev program
       /etc/udev/*                          udev config files
       /etc/hotplug.d/default/udev.hotplug  hotplug symlink to udev program


SEE ALSO
       hotplug(8)

       The http://linux-hotplug.sourceforge.net/ web site.

AUTHORS
       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.



                                 October 2003                          UDEV(8)


(Log in to post comments)

Copyright © 2003, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds