xref: /linux/Documentation/admin-guide/devices.rst (revision 197bbebd25810c5218e3347d61641be8e49c5404)
1.. _admin_devices:
2
3Linux allocated devices (4.x+ version)
4======================================
5
6This list is the Linux Device List, the official registry of allocated
7device numbers and ``/dev`` directory nodes for the Linux operating
8system.
9
10The version of this document at lanana.org is no longer maintained.  This
11version in the mainline Linux kernel is the master document.  Updates
12shall be sent as patches to the kernel maintainers (see the
13:ref:`Documentation/process/submitting-patches.rst <submittingpatches>` document).
14Specifically explore the sections titled "CHAR and MISC DRIVERS", and
15"BLOCK LAYER" in the MAINTAINERS file to find the right maintainers
16to involve for character and block devices.
17
18This document is included by reference into the Filesystem Hierarchy
19Standard (FHS).	 The FHS is available from https://www.pathname.com/fhs/.
20
21Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga
22platform only.	Allocations marked (68k/Atari) apply to Linux/68k on
23the Atari platform only.
24
25This document is in the public domain.	The authors requests, however,
26that semantically altered versions are not distributed without
27permission of the authors, assuming the authors can be contacted without
28an unreasonable effort.
29
30
31.. attention::
32
33  DEVICE DRIVERS AUTHORS PLEASE READ THIS
34
35  Linux now has extensive support for dynamic allocation of device numbering
36  and can use ``sysfs`` and ``udev`` (``systemd``) to handle the naming needs.
37  There are still some exceptions in the serial and boot device area. Before
38  asking   for a device number make sure you actually need one.
39
40  To have a major number allocated, or a minor number in situations
41  where that applies (e.g. busmice), please submit a patch and send to
42  the authors as indicated above.
43
44  Keep the description of the device *in the same format
45  as this list*. The reason for this is that it is the only way we have
46  found to ensure we have all the requisite information to publish your
47  device and avoid conflicts.
48
49  Finally, sometimes we have to play "namespace police."  Please don't be
50  offended.  We often get submissions for ``/dev`` names that would be bound
51  to cause conflicts down the road.  We are trying to avoid getting in a
52  situation where we would have to suffer an incompatible forward
53  change.  Therefore, please consult with us **before** you make your
54  device names and numbers in any way public, at least to the point
55  where it would be at all difficult to get them changed.
56
57  Your cooperation is appreciated.
58
59.. include:: devices.txt
60   :literal:
61
62Additional ``/dev/`` directory entries
63--------------------------------------
64
65This section details additional entries that should or may exist in
66the /dev directory.  It is preferred that symbolic links use the same
67form (absolute or relative) as is indicated here.  Links are
68classified as "hard" or "symbolic" depending on the preferred type of
69link; if possible, the indicated type of link should be used.
70
71Compulsory links
72++++++++++++++++
73
74These links should exist on all systems:
75
76=============== =============== =============== ===============================
77/dev/fd		/proc/self/fd	symbolic	File descriptors
78/dev/stdin	fd/0		symbolic	stdin file descriptor
79/dev/stdout	fd/1		symbolic	stdout file descriptor
80/dev/stderr	fd/2		symbolic	stderr file descriptor
81/dev/nfsd	socksys		symbolic	Required by iBCS-2
82/dev/X0R	null		symbolic	Required by iBCS-2
83=============== =============== =============== ===============================
84
85Note: ``/dev/X0R`` is <letter X>-<digit 0>-<letter R>.
86
87Recommended links
88+++++++++++++++++
89
90It is recommended that these links exist on all systems:
91
92
93=============== =============== =============== ===============================
94/dev/core	/proc/kcore	symbolic	Backward compatibility
95/dev/ramdisk	ram0		symbolic	Backward compatibility
96/dev/ftape	qft0		symbolic	Backward compatibility
97/dev/bttv0	video0		symbolic	Backward compatibility
98/dev/radio	radio0		symbolic	Backward compatibility
99/dev/i2o*	/dev/i2o/*	symbolic	Backward compatibility
100=============== =============== =============== ===============================
101
102Suggested earlier ``/dev/scd?`` alternative names for ``/dev/sr?``
103CD-ROM and other optical drives (using SCSI commands) were removed
104in ``udev`` version 174 that was released in 2011.
105
106Locally defined links
107+++++++++++++++++++++
108
109The following links may be established locally to conform to the
110configuration of the system.  This is merely a tabulation of existing
111practice, and does not constitute a recommendation.  However, if they
112exist, they should have the following uses.
113
114=============== =============== =============== ===============================
115/dev/mouse	mouse port	symbolic	Current mouse device
116/dev/tape	tape device	symbolic	Current tape device
117/dev/cdrom	CD-ROM device	symbolic	Current CD-ROM device
118/dev/cdwriter	CD-writer	symbolic	Current CD-writer device
119/dev/scanner	scanner		symbolic	Current scanner device
120/dev/modem	modem port	symbolic	Current dialout device
121/dev/root	root device	symbolic	Current root filesystem
122/dev/swap	swap device	symbolic	Current swap device
123=============== =============== =============== ===============================
124
125``/dev/modem`` should not be used for a modem which supports dialin as
126well as dialout, as it tends to cause lock file problems.  If it
127exists, ``/dev/modem`` should point to the appropriate primary TTY device
128(the use of the alternate callout devices is deprecated).
129
130For SCSI devices, ``/dev/tape`` and ``/dev/cdrom`` should point to the
131*cooked* devices (``/dev/st*`` and ``/dev/sr*``, respectively), whereas
132``/dev/cdwriter`` and /dev/scanner should point to the appropriate generic
133SCSI devices (/dev/sg*).
134
135``/dev/mouse`` may point to a primary serial TTY device, a hardware mouse
136device, or a socket for a mouse driver program (e.g. ``/dev/gpmdata``).
137
138Sockets and pipes
139+++++++++++++++++
140
141Non-transient sockets and named pipes may exist in /dev.  Common entries are:
142
143=============== =============== ===============================================
144/dev/printer	socket		lpd local socket
145/dev/log	socket		syslog local socket
146/dev/gpmdata	socket		gpm mouse multiplexer
147=============== =============== ===============================================
148
149Mount points
150++++++++++++
151
152The following names are reserved for mounting special filesystems
153under /dev.  These special filesystems provide kernel interfaces that
154cannot be provided with standard device nodes.
155
156=============== =============== ===============================================
157/dev/pts	devpts		PTY slave filesystem
158/dev/shm	tmpfs		POSIX shared memory maintenance access
159=============== =============== ===============================================
160
161Terminal devices
162----------------
163
164Terminal, or TTY devices are a special class of character devices.  A
165terminal device is any device that could act as a controlling terminal
166for a session; this includes virtual consoles, serial ports, and
167pseudoterminals (PTYs).
168
169All terminal devices share a common set of capabilities known as line
170disciplines; these include the common terminal line discipline as well
171as SLIP and PPP modes.
172
173All terminal devices are named similarly; this section explains the
174naming and use of the various types of TTYs.  Note that the naming
175conventions include several historical warts; some of these are
176Linux-specific, some were inherited from other systems, and some
177reflect Linux outgrowing a borrowed convention.
178
179A hash mark (``#``) in a device name is used here to indicate a decimal
180number without leading zeroes.
181
182Virtual consoles and the console device
183+++++++++++++++++++++++++++++++++++++++
184
185Virtual consoles are full-screen terminal displays on the system video
186monitor.  Virtual consoles are named ``/dev/tty#``, with numbering
187starting at ``/dev/tty1``; ``/dev/tty0`` is the current virtual console.
188``/dev/tty0`` is the device that should be used to access the system video
189card on those architectures for which the frame buffer devices
190(``/dev/fb*``) are not applicable. Do not use ``/dev/console``
191for this purpose.
192
193The console device, ``/dev/console``, is the device to which system
194messages should be sent, and on which logins should be permitted in
195single-user mode.  Starting with Linux 2.1.71, ``/dev/console`` is managed
196by the kernel; for previous versions it should be a symbolic link to
197either ``/dev/tty0``, a specific virtual console such as ``/dev/tty1``, or to
198a serial port primary (``tty*``, not ``cu*``) device, depending on the
199configuration of the system.
200
201Serial ports
202++++++++++++
203
204Serial ports are RS-232 serial ports and any device which simulates
205one, either in hardware (such as internal modems) or in software (such
206as the ISDN driver.)  Under Linux, each serial ports has two device
207names, the primary or callin device and the alternate or callout one.
208Each kind of device is indicated by a different letter.	 For any
209letter X, the names of the devices are ``/dev/ttyX#`` and ``/dev/cux#``,
210respectively; for historical reasons, ``/dev/ttyS#`` and ``/dev/ttyC#``
211correspond to ``/dev/cua#`` and ``/dev/cub#``. In the future, it should be
212expected that multiple letters will be used; all letters will be upper
213case for the "tty" device (e.g. ``/dev/ttyDP#``) and lower case for the
214"cu" device (e.g. ``/dev/cudp#``).
215
216The names ``/dev/ttyQ#`` and ``/dev/cuq#`` are reserved for local use.
217
218The alternate devices provide for kernel-based exclusion and somewhat
219different defaults than the primary devices.  Their main purpose is to
220allow the use of serial ports with programs with no inherent or broken
221support for serial ports.  Their use is deprecated, and they may be
222removed from a future version of Linux.
223
224Arbitration of serial ports is provided by the use of lock files with
225the names ``/var/lock/LCK..ttyX#``. The contents of the lock file should
226be the PID of the locking process as an ASCII number.
227
228It is common practice to install links such as /dev/modem
229which point to serial ports.  In order to ensure proper locking in the
230presence of these links, it is recommended that software chase
231symlinks and lock all possible names; additionally, it is recommended
232that a lock file be installed with the corresponding alternate
233device.	 In order to avoid deadlocks, it is recommended that the locks
234are acquired in the following order, and released in the reverse:
235
236	1. The symbolic link name, if any (``/var/lock/LCK..modem``)
237	2. The "tty" name (``/var/lock/LCK..ttyS2``)
238	3. The alternate device name (``/var/lock/LCK..cua2``)
239
240In the case of nested symbolic links, the lock files should be
241installed in the order the symlinks are resolved.
242
243Under no circumstances should an application hold a lock while waiting
244for another to be released.  In addition, applications which attempt
245to create lock files for the corresponding alternate device names
246should take into account the possibility of being used on a non-serial
247port TTY, for which no alternate device would exist.
248
249Pseudoterminals (PTYs)
250++++++++++++++++++++++
251
252Pseudoterminals, or PTYs, are used to create login sessions or provide
253other capabilities requiring a TTY line discipline (including SLIP or
254PPP capability) to arbitrary data-generation processes.	 Each PTY has
255a master side, named ``/dev/pty[p-za-e][0-9a-f]``, and a slave side, named
256``/dev/tty[p-za-e][0-9a-f]``.  The kernel arbitrates the use of PTYs by
257allowing each master side to be opened only once.
258
259Once the master side has been opened, the corresponding slave device
260can be used in the same manner as any TTY device.  The master and
261slave devices are connected by the kernel, generating the equivalent
262of a bidirectional pipe with TTY capabilities.
263
264Recent versions of the Linux kernels and GNU libc contain support for
265the System V/Unix98 naming scheme for PTYs, which assigns a common
266device, ``/dev/ptmx``, to all the masters (opening it will automatically
267give you a previously unassigned PTY) and a subdirectory, ``/dev/pts``,
268for the slaves; the slaves are named with decimal integers (``/dev/pts/#``
269in our notation).  This removes the problem of exhausting the
270namespace and enables the kernel to automatically create the device
271nodes for the slaves on demand using the "devpts" filesystem.
272