Device
Special Files
Linux, like all versions of Unix TM presents its hardware
devices as special files. So, for example, /dev/null is the null device. A
device file does not use any data space in the file system, it is only an
access point to the device driver. The EXT2 file system and the Linux VFS both
implement device files as special types of inode. There are two types of device
file; character and block special files. Within the kernel itself, the device
drivers implement file semantices: you can open them, close them and so on.
Character devices allow I/O operations in character mode and block devices
require that all I/O is via the buffer cache. When an I/O request is made to a
device file, it is forwarded to the appropriate device driver within the
system. Often this is not a real device driver but a pseudo-device driver for
some subsystem such as the SCSI device driver layer. Device files are
referenced by a major number, which identifies the device type, and a minor
type, which identifies the unit, or instance of that major type. For example,
the IDE disks on the first IDE controller in the system have a major number of
3 and the first partition of an IDE disk would have a minor number of 1. So, ls
-l of /dev/hda1 gives:
$ brw-rw---- 1 root
disk 3, 1
Nov 24 15:09 /dev/hda1
Within
the kernel, every device is uniquely described by a kdev_t data type, this is two bytes
long, the first byte containing the minor device number and the second byte
holding the major device number.
The IDE device above is held within the kernel as 0x0301.
An EXT2 inode that represents a block or character device keeps the device's
major and minor numbers in its first direct block pointer. When it is read by
the VFS, the VFS inode data structure representing it has its i_rdev
field set to the correct device identifier.
No comments:
Post a Comment