All files in /dev
are special files... they represent devices of the computer.
They were created with the mknod
syscall. My question is: How can I know the minor and
major numbers that were used to create this special file?
If you issue the ls -l command, you'll see two numbers (separated by a comma) in the device file entries before the date of last modification, where the file length normally appears. These numbers are the major device number and minor device number for the particular device.
Major Number tells which driver is used. This number is allotted while registering a device driver. Minor Number tells which device exactly used of that device type. Say Hard-disk may have four partitions.
A device number is a major , minor pair. A long file listing shows the device number in the column where file sizes are usually listed. In the following example, the device number is 86,255. The device major number is 86, and the device minor number is 255.
All devices, classified by type (char or block), and identified by their MAJOR/MINOR number can be found in the dev subdirectory of the sysfs file system entry (/sys). A platform device is then linked to each MAJOR/MINOR number.
The list is called the LANANA Linux Device List, and it is administered by Alan Cox.
You can find the latest copy online (direct link), or in the Linux source. Its filename in the kernel tree is Documentation/devices.txt
.
To see the major and minor numbers that created a node in /dev
(or any device node for that matter), simply use ls
with the -l
option:
22:26 jsmith@undertow% ls -l /dev/xvd?
brw-rw---- 1 root disk 202, 0 Nov 1 20:31 /dev/xvda
brw-rw---- 1 root disk 202, 16 Nov 1 20:31 /dev/xvdb
brw-rw---- 1 root disk 202, 32 Nov 1 20:31 /dev/xvdc
In this example, 202
is the three devices' major number, and 0
, 16
, and 32
are minors. The b
at left indicates that the node is a block device. The alternative is c
, a character device:
crw-rw-rw- 1 root tty 5, 0 Nov 22 00:29 /dev/tty
$ ls -l /dev/fd0 /dev/null brw-rw---- 1 root floppy 2, 0 Nov 22 19:48 /dev/fd0 crw-rw-rw- 1 root root 1, 3 Nov 22 19:48 /dev/null $ stat -c '%n: %F, major %t minor %T' /dev/fd0 /dev/null /dev/fd0: block special file, major 2 minor 0 /dev/null: character special file, major 1 minor 3
Most device numbers are fixed (i.e. /dev/null
will always be character device 1:3
) but on Linux, some are dynamically allocated.
$ cat /proc/devices Character devices: ... 10 misc ... Block devices: ... 253 mdp 254 device-mapper $ cat /proc/misc ... 57 device-mapper ...
For example, on this system, it just so happens that /dev/mapper/control
will be c:10:57
while the rest of /dev/mapper/*
will be b:254:*
, and this could differ from one boot cycle to another -- or even as modules are loaded/unloaded and devices are added/removed.
You can explore these device registrations further in /sys
.
$ readlink /sys/dev/block/2:0 ../../devices/platform/floppy.0/block/fd0 $ cat /sys/devices/platform/floppy.0/block/fd0/dev 2:0 $ readlink /sys/dev/char/1:3 ../../devices/virtual/mem/null $ cat /sys/devices/virtual/mem/null/dev 1:3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With