Devices
Devices
x+ version)
This list is the Linux Device List, the official registry of allocated device numbers
and /dev directory nodes for the Linux operating system.
The LaTeX version of this document is no longer maintained, nor is the
document that used to reside at lanana.org. This version in the mainline Linux
kernel is the master document. Updates shall be sent as patches to the kernel
maintainers (see the Documentation/process/submitting-patches.rst
<submittingpatches> document). Specifically explore the sections titled
”CHAR and MISC DRIVERS”, and ”BLOCK LAYER” in the MAINTAINERS
file to find the right maintainers to involve for character and block devices.
This document is included by reference into the Filesystem Hierarchy Standard
(FHS). The FHS is available from https://www.pathname.com/fhs/.
Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga platform
only. Allocations marked (68k/Atari) apply to Linux/68k on the Atari platform
only.
This document is in the public domain. The authors requests, however, that
semantically altered versions are not distributed without permission of the au-
thors, assuming the authors can be contacted without an unreasonable effort.
Attention
DEVICE DRIVERS AUTHORS PLEASE READ THIS
Linux now has extensive support for dynamic allocation of device numbering
and can use sysfs and udev (systemd) to handle the naming needs. There are
still some exceptions in the serial and boot device area. Before asking for a
device number make sure you actually need one.
To have a major number allocated, or a minor number in situations where
that applies (e.g. busmice), please submit a patch and send to the authors as
indicated above.
Keep the description of the device in the same format as this list. The reason for
this is that it is the only way we have found to ensure we have all the requisite
information to publish your device and avoid conflicts.
Finally, sometimes we have to play ”namespace police.” Please don’t be offended.
We often get submissions for /dev names that would be bound to cause conflicts
1
down the road. We are trying to avoid getting in a situation where we would
have to suffer an incompatible forward change. Therefore, please consult with
us before you make your device names and numbers in any way public, at least
to the point where it would be at all difficult to get them changed.
Your cooperation is appreciated.
Compulsory links
These links should exist on all systems:
symbolic stdout
file
Required
by
symbolic Required
by
2
Note: /dev/X0R is <letter X>-<digit 0>-<letter R>.
Recommended links
It is recommended that these links exist on all systems:
Backward
com
compatibility
symbolic Backward
com
Backward
com
Backward
com
Backward
com
3
constitute a recommendation. However, if they exist, they should have the
following uses.
/dev/tape tape
device device
sym- Current
bolic tape
/dev/root root
device
sym- Current filesystem
bolic root
/dev/swap swap
device device
sym- Current
bolic swap
/dev/modem should not be used for a modem which supports dialin as well as
dialout, as it tends to cause lock file problems. If it exists, /dev/modem should
point to the appropriate primary TTY device (the use of the alternate callout
devices is deprecated).
For SCSI devices, /dev/tape and /dev/cdrom should point to the cooked
devices (/dev/st* and /dev/sr*, respectively), whereas /dev/cdwriter and
/dev/scanner should point to the appropriate generic SCSI devices (/dev/sg*).
/dev/mouse may point to a primary serial TTY device, a hardware mouse device,
or a socket for a mouse driver program (e.g. /dev/gpmdata).
4
Sockets and pipes
Non-transient sockets and named pipes may exist in /dev. Common entries are:
Mount points
The following names are reserved for mounting special filesystems under /dev.
These special filesystems provide kernel interfaces that cannot be provided with
standard device nodes.
Terminal devices
Terminal, or TTY devices are a special class of character devices. A terminal
device is any device that could act as a controlling terminal for a session; this
includes virtual consoles, serial ports, and pseudoterminals (PTYs).
All terminal devices share a common set of capabilities known as line disciplines;
these include the common terminal line discipline as well as SLIP and PPP
modes.
All terminal devices are named similarly; this section explains the naming and
use of the various types of TTYs. Note that the naming conventions include
several historical warts; some of these are Linux-specific, some were inherited
from other systems, and some reflect Linux outgrowing a borrowed convention.
A hash mark (#) in a device name is used here to indicate a decimal number
without leading zeroes.
5
The console device, /dev/console, is the device to which system messages
should be sent, and on which logins should be permitted in single-user mode.
Starting with Linux 2.1.71, /dev/console is managed by the kernel; for previ-
ous versions it should be a symbolic link to either /dev/tty0, a specific virtual
console such as /dev/tty1, or to a serial port primary (tty*, not cu*) device,
depending on the configuration of the system.
Serial ports
Serial ports are RS-232 serial ports and any device which simulates one, either
in hardware (such as internal modems) or in software (such as the ISDN driver.)
Under Linux, each serial ports has two device names, the primary or callin
device and the alternate or callout one. Each kind of device is indicated by a
different letter. For any letter X, the names of the devices are /dev/ttyX# and
/dev/cux#, respectively; for historical reasons, /dev/ttyS# and /dev/ttyC#
correspond to /dev/cua# and /dev/cub#. In the future, it should be expected
that multiple letters will be used; all letters will be upper case for the ”tty”
device (e.g. /dev/ttyDP#) and lower case for the ”cu” device (e.g. /dev/cudp#).
The names /dev/ttyQ# and /dev/cuq# are reserved for local use.
The alternate devices provide for kernel-based exclusion and somewhat different
defaults than the primary devices. Their main purpose is to allow the use of
serial ports with programs with no inherent or broken support for serial ports.
Their use is deprecated, and they may be removed from a future version of
Linux.
Arbitration of serial ports is provided by the use of lock files with the names
/var/lock/LCK..ttyX#. The contents of the lock file should be the PID of the
locking process as an ASCII number.
It is common practice to install links such as /dev/modem which point to serial
ports. In order to ensure proper locking in the presence of these links, it is
recommended that software chase symlinks and lock all possible names; addi-
tionally, it is recommended that a lock file be installed with the corresponding
alternate device. In order to avoid deadlocks, it is recommended that the locks
are acquired in the following order, and released in the reverse:
1. The symbolic link name, if any (/var/lock/LCK..modem)
2. The ”tty” name (/var/lock/LCK..ttyS2)
3. The alternate device name (/var/lock/LCK..cua2)
In the case of nested symbolic links, the lock files should be installed in the
order the symlinks are resolved.
Under no circumstances should an application hold a lock while waiting for
another to be released. In addition, applications which attempt to create lock
files for the corresponding alternate device names should take into account the
6
possibility of being used on a non-serial port TTY, for which no alternate device
would exist.
Pseudoterminals (PTYs)
Pseudoterminals, or PTYs, are used to create login sessions or provide
other capabilities requiring a TTY line discipline (including SLIP or PPP
capability) to arbitrary data-generation processes. Each PTY has a mas-
ter side, named /dev/pty[p-za-e][0-9a-f], and a slave side, named
/dev/tty[p-za-e][0-9a-f]. The kernel arbitrates the use of PTYs by
allowing each master side to be opened only once.
Once the master side has been opened, the corresponding slave device can be
used in the same manner as any TTY device. The master and slave devices are
connected by the kernel, generating the equivalent of a bidirectional pipe with
TTY capabilities.
Recent versions of the Linux kernels and GNU libc contain support for the
System V/Unix98 naming scheme for PTYs, which assigns a common device,
/dev/ptmx, to all the masters (opening it will automatically give you a pre-
viously unassigned PTY) and a subdirectory, /dev/pts, for the slaves; the
slaves are named with decimal integers (/dev/pts/# in our notation). This
removes the problem of exhausting the namespace and enables the kernel to au-
tomatically create the device nodes for the slaves on demand using the ”devpts”
filesystem.