mirror of https://github.com/tLDP/LDP
234 lines
17 KiB
XML
234 lines
17 KiB
XML
<sect1 id="dev">
|
|
<title>/dev</title>
|
|
|
|
<para>/dev contains the device files and is a very interesting directory that highlights one important aspect of the Linux filesystem - everything is a file or a directory. Look through this directory and you should hopefully see hda1, hda2 etc.... which represent the various partitions on the first master drive of the system. /dev/cdrom and /dev/fd0 represent your CD-ROM drive and your floppy drive. This may seem strange but it will make sense if you compare the characteristics of files to that of your hardware. Both can be read from and written to. Take /dev/dsp, for instance. This file represents your speaker device. Any data written to this file will be re-directed to your speaker. If you try 'cat /boot/vmlinuz > /dev/dsp' (on a properly configured system) you should hear some sound on the speaker. That's the sound of your kernel! A file sent to /dev/lp0 gets printed. Sending data to and reading from /dev/ttyS0 will allow you to communicate with a device attached there - for instance, your modem.</para>
|
|
|
|
<para>The majority of devices are either block or character devices; however other types of devices exist and can be created. In general, 'block devices' are devices that store or hold data, 'character devices' can be thought of as devices that transmit or transfer data. For example, diskette drives, hard drives and CD-ROM drives are all block devices while serial ports, mice and parallel printer ports are all character devices. There is a naming scheme of sorts but in the vast majority of cases these are completely illogical.</para>
|
|
|
|
<para>
|
|
<screen>
|
|
total 724
|
|
lrwxrwxrwx 1 root root 13 Sep 28 18:06 MAKEDEV -> /sbin/MAKEDEV
|
|
crw-rw---- 1 root audio 14, 14 Oct 7 16:26 admmidi0
|
|
crw-rw---- 1 root audio 14, 30 Oct 7 16:26 admmidi1
|
|
lrwxrwxrwx 1 root root 11 Oct 7 16:26 amidi -> /dev/amidi0
|
|
crw-rw---- 1 root audio 14, 13 Oct 7 16:26 amidi0
|
|
crw-rw---- 1 root audio 14, 29 Oct 7 16:26 amidi1
|
|
crw-rw---- 1 root audio 14, 11 Oct 7 16:26 amixer0
|
|
crw-rw---- 1 root audio 14, 27 Oct 7 16:26 amixer1
|
|
drwxr-xr-x 2 root root 4096 Sep 28 18:05 ataraid
|
|
lrwxrwxrwx 1 root root 11 Oct 7 16:26 audio -> /dev/audio0
|
|
crw-rw---- 1 root audio 14, 4 Oct 7 16:26 audio0
|
|
crw-rw---- 1 root audio 14, 20 Oct 7 16:26 audio1
|
|
crw-rw---- 1 root audio 14, 7 Mar 15 2002 audioctl
|
|
lrwxrwxrwx 1 root root 9 Oct 14 22:51 cdrom -> /dev/scd1
|
|
lrwxrwxrwx 1 root root 9 Oct 14 22:52 cdrom1 -> /dev/scd0
|
|
crw------- 1 root tty 5, 1 Jan 19 20:47 console
|
|
lrwxrwxrwx 1 root root 11 Sep 28 18:06 core -> /proc/kcore
|
|
crw-rw---- 1 root audio 14, 10 Oct 7 16:26 dmfm0
|
|
crw-rw---- 1 root audio 14, 26 Oct 7 16:26 dmfm1
|
|
crw-rw---- 1 root audio 14, 9 Oct 7 16:26 dmmidi0
|
|
crw-rw---- 1 root audio 14, 25 Oct 7 16:26 dmmidi1
|
|
lrwxrwxrwx 1 root root 9 Oct 7 16:26 dsp -> /dev/dsp0
|
|
crw-rw---- 1 root audio 14, 3 Oct 7 16:26 dsp0
|
|
crw-rw---- 1 root audio 14, 19 Oct 7 16:26 dsp1
|
|
crw--w---- 1 root video 29, 0 Mar 15 2002 fb0
|
|
crw--w---- 1 root video 29, 1 Mar 15 2002 fb0autodetect
|
|
crw--w---- 1 root video 29, 0 Mar 15 2002 fb0current
|
|
crw--w---- 1 root video 29, 32 Mar 15 2002 fb1
|
|
crw--w---- 1 root video 29, 33 Mar 15 2002 fb1autodetect
|
|
crw--w---- 1 root video 29, 32 Mar 15 2002 fb1current
|
|
lrwxrwxrwx 1 root root 13 Sep 28 18:05 fd -> /proc/self/fd
|
|
brw-rw---- 1 root floppy 2, 0 Mar 15 2002 fd0
|
|
brw-rw---- 1 root floppy 2, 1 Mar 15 2002 fd1
|
|
crw--w--w- 1 root root 1, 7 Sep 28 18:06 full
|
|
brw-rw---- 1 root disk 3, 0 Mar 15 2002 hda
|
|
brw-rw---- 1 root disk 3, 64 Mar 15 2002 hdb
|
|
brw-rw---- 1 root disk 22, 0 Mar 15 2002 hdc
|
|
brw-rw---- 1 root disk 22, 64 Mar 15 2002 hdd
|
|
drwxr-xr-x 2 root root 12288 Sep 28 18:05 ida
|
|
prw------- 1 root root 0 Jan 19 20:46 initctl
|
|
brw-rw---- 1 root disk 1, 250 Mar 15 2002 initrd
|
|
drwxr-xr-x 2 root root 4096 Sep 28 18:05 input
|
|
crw-rw---- 1 root dialout 45, 128 Mar 15 2002 ippp0
|
|
crw-rw---- 1 root dialout 45, 0 Mar 15 2002 isdn0
|
|
crw-rw---- 1 root dialout 45, 64 Mar 15 2002 isdnctrl0
|
|
crw-rw---- 1 root dialout 45, 255 Mar 15 2002 isdninfo
|
|
crw------- 1 root root 10, 4 Mar 15 2002 jbm
|
|
crw-r----- 1 root kmem 1, 2 Sep 28 18:06 kmem
|
|
brw-rw---- 1 root cdrom 24, 0 Mar 15 2002 lmscd
|
|
crw------- 1 root root 10, 0 Mar 15 2002 logibm
|
|
brw-rw---- 1 root disk 7, 0 Sep 28 18:06 loop0
|
|
brw-rw---- 1 root disk 7, 1 Sep 28 18:06 loop1
|
|
crw-rw---- 1 root lp 6, 0 Mar 15 2002 lp0
|
|
crw-rw---- 1 root lp 6, 1 Mar 15 2002 lp1
|
|
crw-rw---- 1 root lp 6, 2 Mar 15 2002 lp2
|
|
crw-r----- 1 root kmem 1, 1 Sep 28 18:06 mem
|
|
lrwxrwxrwx 1 root root 10 Oct 7 16:26 midi -> /dev/midi0
|
|
crw-rw---- 1 root audio 14, 2 Oct 7 16:26 midi0
|
|
crw-rw---- 1 root audio 14, 18 Oct 7 16:26 midi1
|
|
lrwxrwxrwx 1 root root 11 Oct 7 16:26 mixer -> /dev/mixer0
|
|
crw-rw-rw- 1 root root 14, 0 Nov 11 16:22 mixer0
|
|
crw-rw---- 1 root audio 14, 16 Oct 7 16:26 mixer1
|
|
lrwxrwxrwx 1 root root 11 Oct 7 06:50 modem -> /dev/ttyLT0
|
|
crw-rw---- 1 root audio 31, 0 Mar 15 2002 mpu401data
|
|
crw-rw---- 1 root audio 31, 1 Mar 15 2002 mpu401stat
|
|
crw-rw---- 1 root audio 14, 8 Oct 7 16:26 music
|
|
crw-rw-rw- 1 root root 1, 3 Sep 28 18:06 null
|
|
crw-rw-rw- 1 root root 195, 0 Jan 6 03:03 nvidia0
|
|
crw-rw-rw- 1 root root 195, 1 Jan 6 03:03 nvidia1
|
|
crw-rw-rw- 1 root root 195, 255 Jan 6 03:03 nvidiactl
|
|
crw-rw---- 1 root lp 6, 0 Mar 15 2002 par0
|
|
crw-rw---- 1 root lp 6, 1 Mar 15 2002 par1
|
|
crw-rw---- 1 root lp 6, 2 Mar 15 2002 par2
|
|
-rw-r--r-- 1 root root 665509 Oct 7 16:41 pcm
|
|
crw-r----- 1 root kmem 1, 4 Sep 28 18:06 port
|
|
crw-rw---- 1 root dip 108, 0 Sep 28 18:07 ppp
|
|
crw------- 1 root root 10, 1 Mar 15 2002 psaux
|
|
crw-rw-rw- 1 root root 1, 8 Sep 28 18:06 random
|
|
crw-rw---- 1 root root 10, 135 Mar 15 2002 rtc
|
|
brw-rw---- 1 root cdrom 11, 0 Mar 15 2002 scd0
|
|
brw-rw---- 1 root cdrom 11, 1 Mar 15 2002 scd1
|
|
brw-rw---- 1 root disk 8, 0 Mar 15 2002 sda
|
|
brw-rw---- 1 root disk 8, 1 Mar 15 2002 sda1
|
|
brw-rw---- 1 root disk 8, 2 Mar 15 2002 sda2
|
|
brw-rw---- 1 root disk 8, 3 Mar 15 2002 sda3
|
|
brw-rw---- 1 root disk 8, 4 Mar 15 2002 sda4
|
|
brw-rw---- 1 root disk 8, 16 Mar 15 2002 sdb
|
|
brw-rw---- 1 root disk 8, 17 Mar 15 2002 sdb1
|
|
brw-rw---- 1 root disk 8, 18 Mar 15 2002 sdb2
|
|
brw-rw---- 1 root disk 8, 19 Mar 15 2002 sdb3
|
|
brw-rw---- 1 root disk 8, 20 Mar 15 2002 sdb4
|
|
crw-rw---- 1 root audio 14, 1 Oct 7 16:26 sequencer
|
|
lrwxrwxrwx 1 root root 10 Oct 7 16:26 sequencer2 -> /dev/music
|
|
lrwxrwxrwx 1 root root 4 Sep 28 18:05 stderr -> fd/2
|
|
lrwxrwxrwx 1 root root 4 Sep 28 18:05 stdin -> fd/0
|
|
lrwxrwxrwx 1 root root 4 Sep 28 18:05 stdout -> fd/1
|
|
crw-rw-rw- 1 root tty 5, 0 Sep 28 18:06 tty
|
|
crw------- 1 root root 4, 0 Sep 28 18:06 tty0
|
|
crw------- 1 root root 4, 1 Jan 19 14:59 tty1
|
|
crw-rw---- 1 root dialout 62, 64 Oct 7 06:50 ttyLT0
|
|
crw-rw---- 1 root dialout 4, 64 Mar 15 2002 ttyS0
|
|
crw-rw---- 1 root dialout 4, 65 Mar 15 2002 ttyS1
|
|
crw-rw---- 1 root dialout 4, 66 Mar 15 2002 ttyS2
|
|
crw-rw---- 1 root dialout 4, 67 Mar 15 2002 ttyS3
|
|
crw-rw---- 1 root dialout 188, 0 Mar 15 2002 ttyUSB0
|
|
crw-rw---- 1 root dialout 188, 1 Mar 15 2002 ttyUSB1
|
|
cr--r--r-- 1 root root 1, 9 Jan 19 20:46 urandom
|
|
drwxr-xr-x 2 root root 4096 Sep 28 18:05 usb
|
|
prw-r----- 1 root adm 0 Jan 19 14:58 xconsole
|
|
crw-rw-rw- 1 root root 1, 5 Sep 28 18:06 zero
|
|
</screen>
|
|
</para>
|
|
|
|
<para>Some common device files as well as their equivalent counterparts under Windows that you may wish to remember are:</para>
|
|
|
|
<para><variablelist>
|
|
|
|
<varlistentry><term>/dev/ttyS0 (First communications port, COM1)</term><listitem><para>
|
|
First serial port (mice, modems).</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/psaux (PS/2)</term><listitem><para>
|
|
PS/2 mouse connection (mice, keyboards).</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/lp0 (First printer port, LPT1)</term><listitem><para>
|
|
First parallel port (printers, scanners, etc).</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/dsp (First audio device)</term><listitem><para>
|
|
The name DSP comes from the term digital signal processor, a specialized processor chip optimized for digital signal analysis. Sound cards may use a dedicated DSP chip, or may implement the functions with a number of discrete devices. Other terms that may be used for this device are digitized voice and PCM.</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/usb (USB Devices)</term><listitem><para>
|
|
This subdirectory contains most of the USB device nodes. Device name allocations are fairly simplistic so no elaboration is be necessary.</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/sda (C:\, SCSI device)</term><listitem><para>
|
|
First SCSI device (HDD, Memory Sticks, external mass storage devices such as CD-ROM drives on laptops, etc).</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/scd (D:\, SCSI CD-ROM device)</term><listitem><para>
|
|
First SCSI CD-ROM device.</para></listitem></varlistentry>
|
|
|
|
<varlistentry><term>/dev/js0 (Standard gameport joystick)</term><listitem><para>
|
|
First joystick device.</para></listitem></varlistentry>
|
|
|
|
</variablelist></para>
|
|
|
|
<para>Devices are defined by type, such as 'block' or 'character', and 'major' and 'minor' number. The major number is used to categorize a device and the minor number is used to identify a specific device type. For example, all IDE device connected to the primary controller have a major number of 3. Master and slave devices, as well as individual partitions are further defined by the use of minor numbers. These are the two numbers precede the date in the following display:</para>
|
|
|
|
<para># ls -l /dev/hd*</para>
|
|
|
|
<para>
|
|
<screen>
|
|
brw-rw---- 1 root disk 3, 0 Mar 15 2002 /dev/hda
|
|
brw-rw---- 1 root disk 3, 1 Mar 15 2002 /dev/hda1
|
|
brw-rw---- 1 root disk 3, 10 Mar 15 2002 /dev/hda10
|
|
brw-rw---- 1 root disk 3, 11 Mar 15 2002 /dev/hda11
|
|
brw-rw---- 1 root disk 3, 12 Mar 15 2002 /dev/hda12
|
|
brw-rw---- 1 root disk 3, 13 Mar 15 2002 /dev/hda13
|
|
brw-rw---- 1 root disk 3, 14 Mar 15 2002 /dev/hda14
|
|
brw-rw---- 1 root disk 3, 15 Mar 15 2002 /dev/hda15
|
|
brw-rw---- 1 root disk 3, 16 Mar 15 2002 /dev/hda16
|
|
brw-rw---- 1 root disk 3, 17 Mar 15 2002 /dev/hda17
|
|
brw-rw---- 1 root disk 3, 18 Mar 15 2002 /dev/hda18
|
|
brw-rw---- 1 root disk 3, 19 Mar 15 2002 /dev/hda19
|
|
brw-rw---- 1 root disk 3, 2 Mar 15 2002 /dev/hda2
|
|
brw-rw---- 1 root disk 3, 20 Mar 15 2002 /dev/hda20
|
|
brw-rw---- 1 root disk 3, 3 Mar 15 2002 /dev/hda3
|
|
brw-rw---- 1 root disk 3, 4 Mar 15 2002 /dev/hda4
|
|
brw-rw---- 1 root disk 3, 5 Mar 15 2002 /dev/hda5
|
|
brw-rw---- 1 root disk 3, 6 Mar 15 2002 /dev/hda6
|
|
brw-rw---- 1 root disk 3, 7 Mar 15 2002 /dev/hda7
|
|
brw-rw---- 1 root disk 3, 8 Mar 15 2002 /dev/hda8
|
|
brw-rw---- 1 root disk 3, 9 Mar 15 2002 /dev/hda9
|
|
brw-rw---- 1 root disk 3, 64 Mar 15 2002 /dev/hdb
|
|
brw-rw---- 1 root disk 3, 65 Mar 15 2002 /dev/hdb1
|
|
brw-rw---- 1 root disk 3, 74 Mar 15 2002 /dev/hdb10
|
|
brw-rw---- 1 root disk 3, 75 Mar 15 2002 /dev/hdb11
|
|
brw-rw---- 1 root disk 3, 76 Mar 15 2002 /dev/hdb12
|
|
brw-rw---- 1 root disk 3, 77 Mar 15 2002 /dev/hdb13
|
|
brw-rw---- 1 root disk 3, 78 Mar 15 2002 /dev/hdb14
|
|
brw-rw---- 1 root disk 3, 79 Mar 15 2002 /dev/hdb15
|
|
brw-rw---- 1 root disk 3, 80 Mar 15 2002 /dev/hdb16
|
|
brw-rw---- 1 root disk 3, 81 Mar 15 2002 /dev/hdb17
|
|
brw-rw---- 1 root disk 3, 82 Mar 15 2002 /dev/hdb18
|
|
brw-rw---- 1 root disk 3, 83 Mar 15 2002 /dev/hdb19
|
|
brw-rw---- 1 root disk 3, 66 Mar 15 2002 /dev/hdb2
|
|
brw-rw---- 1 root disk 3, 84 Mar 15 2002 /dev/hdb20
|
|
brw-rw---- 1 root disk 3, 67 Mar 15 2002 /dev/hdb3
|
|
brw-rw---- 1 root disk 3, 68 Mar 15 2002 /dev/hdb4
|
|
brw-rw---- 1 root disk 3, 69 Mar 15 2002 /dev/hdb5
|
|
brw-rw---- 1 root disk 3, 70 Mar 15 2002 /dev/hdb6
|
|
brw-rw---- 1 root disk 3, 71 Mar 15 2002 /dev/hdb7
|
|
brw-rw---- 1 root disk 3, 72 Mar 15 2002 /dev/hdb8
|
|
brw-rw---- 1 root disk 3, 73 Mar 15 2002 /dev/hdb9
|
|
brw-rw---- 1 root disk 22, 0 Mar 15 2002 /dev/hdc
|
|
brw-rw---- 1 root disk 22, 64 Mar 15 2002 /dev/hdd
|
|
</screen>
|
|
</para>
|
|
|
|
<para>The major number for both hda and hdb devices is 3. Of course, the minor number changes for each specific partition. The definition of each major number category can be examined by looking at the contents of the /usr/src/linux/include/linux/major.h file. The devices.txt also documents major and minor numbers. It is located in the /usr/src/linux/Documentation directory. This file defines the major numbers. Almost all files devices are created by default at the install time. However, you can always create a device using the mknod command or the MAKEDEV script which is located in the /dev directory itself. Devices can be created with this utility by supplying the device to be created, the device type (block or character) and the major and minor numbers. For example, let's say you have accidentally deleted /dev/ttyS0 (COM1 under Windows), it can be recreated using the following command</para>
|
|
|
|
<para># mknod ttyS0 c 4 64</para>
|
|
|
|
<para>For those of us who are rather lazy you can simply run the MAKEDEV script as such</para>
|
|
|
|
<para># MAKEDEV *</para>
|
|
|
|
<para>which will create all devices known.</para>
|
|
|
|
<para>For those of you who are wondering why Linux is using such a primitive system to reference devices it's simply because we haven't been able to devise a more sophisticated mechanism.</para>
|
|
|
|
<para>To date (as of kernel version 2.4), the best attempt has been made by Richard Gooch of the CSIRO. It's called devfsd and has been a part of the kernel for a number of years now. It has been sanctioned by the kernel developers and Linus himself and details of its implementation can be found at /usr/src/linux/Documentation/filesystems/devfs/README. Below is an excerpt from this document.</para>
|
|
|
|
<para>Devfs is an alternative to "real" character and block special devices on your root filesystem. Kernel device drivers can register devices by name rather than major and minor numbers. These devices will appear in devfs automatically, with whatever default ownership and protection the driver specified. A daemon (devfsd) can be used to override these defaults. Devfs has been in the kernel since 2.3.46.</para>
|
|
|
|
<para>NOTE that devfs is entirely optional. If you prefer the old disc-based device nodes, then simply leave CONFIG_DEVFS_FS=n (the default). In this case, nothing will change. ALSO NOTE that if you do enable devfs, the defaults are such that full compatibility is maintained with the old devices names.</para>
|
|
|
|
<para>There are two aspects to devfs: one is the underlying device namespace, which is a namespace just like any mounted filesystem. The other aspect is the filesystem code which provides a view of the device namespace. The reason I make a distinction is because devfs can be mounted many times, with each mount showing the same device namespace. Changes made are global to all mounted devfs filesystems. Also, because the devfs namespace exists without any devfs mounts, you can easily mount the root filesystem by referring to an entry in the devfs namespace.</para>
|
|
|
|
<para>The cost of devfs is a small increase in kernel code size and memory usage. About 7 pages of code (some of that in __init sections) and 72 bytes for each entry in the namespace. A modest system has only a couple of hundred device entries, so this costs a few more pages. Compare this with the suggestion to put /dev on a ramdisc.</para>
|
|
|
|
<para>On a typical machine, the cost is under 0.2 percent. On a modest system with 64 MBytes of RAM, the cost is under 0.1 percent. The accusations of "bloatware" levelled at devfs are not justified.</para>
|
|
|
|
<para>To alleviate problems of an ever burgeoning /dev directory creation of new device files was officially terminated on June 3, 2001 on Linus's series of kernels. Further development will proceed only on the -ac series (see /usr/src/linux/Documentation/devices.txt for further details).</para>
|
|
|
|
</sect1>
|