123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- .. _admin_devices:
- Linux allocated devices (4.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
- :ref:`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 authors, 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 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.
- .. include:: devices.txt
- :literal:
- Additional ``/dev/`` directory entries
- --------------------------------------
- This section details additional entries that should or may exist in
- the /dev directory. It is preferred that symbolic links use the same
- form (absolute or relative) as is indicated here. Links are
- classified as "hard" or "symbolic" depending on the preferred type of
- link; if possible, the indicated type of link should be used.
- Compulsory links
- ++++++++++++++++
- These links should exist on all systems:
- =============== =============== =============== ===============================
- /dev/fd /proc/self/fd symbolic File descriptors
- /dev/stdin fd/0 symbolic stdin file descriptor
- /dev/stdout fd/1 symbolic stdout file descriptor
- /dev/stderr fd/2 symbolic stderr file descriptor
- /dev/nfsd socksys symbolic Required by iBCS-2
- /dev/X0R null symbolic Required by iBCS-2
- =============== =============== =============== ===============================
- Note: ``/dev/X0R`` is <letter X>-<digit 0>-<letter R>.
- Recommended links
- +++++++++++++++++
- It is recommended that these links exist on all systems:
- =============== =============== =============== ===============================
- /dev/core /proc/kcore symbolic Backward compatibility
- /dev/ramdisk ram0 symbolic Backward compatibility
- /dev/ftape qft0 symbolic Backward compatibility
- /dev/bttv0 video0 symbolic Backward compatibility
- /dev/radio radio0 symbolic Backward compatibility
- /dev/i2o* /dev/i2o/* symbolic Backward compatibility
- /dev/scd? sr? hard Alternate SCSI CD-ROM name
- =============== =============== =============== ===============================
- Locally defined links
- +++++++++++++++++++++
- The following links may be established locally to conform to the
- configuration of the system. This is merely a tabulation of existing
- practice, and does not constitute a recommendation. However, if they
- exist, they should have the following uses.
- =============== =============== =============== ===============================
- /dev/mouse mouse port symbolic Current mouse device
- /dev/tape tape device symbolic Current tape device
- /dev/cdrom CD-ROM device symbolic Current CD-ROM device
- /dev/cdwriter CD-writer symbolic Current CD-writer device
- /dev/scanner scanner symbolic Current scanner device
- /dev/modem modem port symbolic Current dialout device
- /dev/root root device symbolic Current root filesystem
- /dev/swap swap device symbolic Current swap device
- =============== =============== =============== ===============================
- ``/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``).
- Sockets and pipes
- +++++++++++++++++
- Non-transient sockets and named pipes may exist in /dev. Common entries are:
- =============== =============== ===============================================
- /dev/printer socket lpd local socket
- /dev/log socket syslog local socket
- /dev/gpmdata socket gpm mouse multiplexer
- =============== =============== ===============================================
- 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.
- =============== =============== ===============================================
- /dev/pts devpts PTY slave filesystem
- /dev/shm tmpfs POSIX shared memory maintenance access
- =============== =============== ===============================================
- 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.
- Virtual consoles and the console device
- +++++++++++++++++++++++++++++++++++++++
- Virtual consoles are full-screen terminal displays on the system video
- monitor. Virtual consoles are named ``/dev/tty#``, with numbering
- starting at ``/dev/tty1``; ``/dev/tty0`` is the current virtual console.
- ``/dev/tty0`` is the device that should be used to access the system video
- card on those architectures for which the frame buffer devices
- (``/dev/fb*``) are not applicable. Do not use ``/dev/console``
- for this purpose.
- 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 previous 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; additionally, 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 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 master 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 previously 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 automatically create the device
- nodes for the slaves on demand using the "devpts" filesystem.
|