COMPUTER AND NETWORK
SYSTEM ADMINISTRATION
Summer 1996 - Lesson 10
Devices and Drivers
A. Devices and the file system
- the file system abstraction allows users to
access device driver directly
- echo "hi there" > tempfile
echo "hi there" > /dev/ttya
- each of these eventually accesses a device
- both write() to a file descriptor
- but each accesses a different device driver
B. Device naming conventions
1. BSD (SunOS) conventions
- device file are in /dev
- a lot of them in one directory (almost 700 on nu)
2. floppy disks
brw-rw-rw- 2 root staff 16, 2 Jul 11 1994 /dev/fd0
brw-rw-rw- 1 root staff 16, 0 Jul 11 1994 /dev/fd0a
brw-rw-rw- 1 root staff 16, 1 Jul 11 1994 /dev/fd0b
brw-rw-rw- 2 root staff 16, 2 Jul 11 1994 /dev/fd0c
crw-rw-rw- 2 root staff 54, 2 Jul 11 1994 /dev/rfd0
crw-rw-rw- 1 root staff 54, 0 Jul 11 1994 /dev/rfd0a
crw-rw-rw- 1 root staff 54, 1 Jul 11 1994 /dev/rfd0b
crw-rw-rw- 2 root staff 54, 2 Jul 11 1994 /dev/rfd0c
- note that the mode is 666
- the block fd devices have the same major device #16
- the raw (character) devices have the same major device #54
- the minor device number encodes the unit number as well
as the partition
bits defined as rrruuppp
r=reserved,
u=unit, and
p=partition
unit number selects a particular floppy drive
partition number picks one of eight partitions [a-h].
- when using a disk block device a label must be present in logical
block zero of the device
- the label describes the geometry and partition information
- the driver first assumes high density characteristics when it
tries to read the label
- if the read fails it will try the read again using low density
characteristics
- using the raw interface, the open will succeed even if the
diskette is unlabeled
- floppy diskettes have 18 sectors per track, and can cross a
track boundary (but not cylinders) without losing data
- when using "dd(1)" to or from a diskette, you should
specify bs=18k or multiples thereof
3. SCSI fixed disks
crw-r----- 1 root backup 17, 0 Jul 11 1994 /dev/rsd0a
crw-r----- 1 root backup 17, 1 Jul 11 1994 /dev/rsd0b
crw-r----- 1 root backup 17, 2 Jul 11 1994 /dev/rsd0c
crw-r----- 1 root backup 17, 3 Jul 11 1994 /dev/rsd0d
crw-r----- 1 root backup 17, 4 Jul 11 1994 /dev/rsd0e
crw-r----- 1 root backup 17, 5 Jul 11 1994 /dev/rsd0f
crw-r----- 1 root backup 17, 6 Jul 11 1994 /dev/rsd0g
crw-r----- 1 root backup 17, 7 Jul 11 1994 /dev/rsd0h
brw-r----- 1 root backup 7, 0 Jul 11 1994 /dev/sd0a
brw-r----- 1 root backup 7, 1 Jul 11 1994 /dev/sd0b
brw-r----- 1 root backup 7, 2 Jul 11 1994 /dev/sd0c
brw-r----- 1 root backup 7, 3 Jul 11 1994 /dev/sd0d
brw-r----- 1 root backup 7, 4 Jul 11 1994 /dev/sd0e
brw-r----- 1 root backup 7, 5 Jul 11 1994 /dev/sd0f
brw-r----- 1 root backup 7, 6 Jul 11 1994 /dev/sd0g
brw-r----- 1 root backup 7, 7 Jul 11 1994 /dev/sd0h
- note permissions...why?
- the block special files access the disk using the system's
normal buffering mechanism
- they are read and written without regard to physical disk
records
- the raw interface provides for direct transmission between
the disk and the user's read or write buffer
- a single read or write call usually results in one I/O operation
- raw I/O is therefore considerably more efficient when many
bytes are transmitted (to local disk)
- kernel configuration in: man(4) sd (Desktop SPARCsystems)
device-driver esp - device driver
scsibus0 at esp - scsibus attached to driver
disk sd0 at scsibus0 target 3 lun 0 - disks
disk sd1 at scsibus0 target 1 lun 0
disk sd2 at scsibus0 target 2 lun 0
disk sd3 at scsibus0 target 0 lun 0
partition naming conventions
sd?a - normally used for the root file system
sd?b - paging area (e.g. swap),
sd?c - low level copying, normally maps the entire disk
sd?d
sd?e
sd?f
sd?g - /usr
sd?h
4. SCSI tapes
- kernel configuration (Desktop SPARCsystems)
scsibus0 at esp
tape st0 at scsibus0 target 4 lun 0
tape st1 at scsibus0 target 5 lun 0
- uses same device driver and scsibus as the SCSI disks
- the driver can be opened with either rewind on close
/dev/rst*
or no rewind on close
/dev/nrst*
- the minor device numbers indicate tape format options
For 1/2" reel tape devices (HP-88780):
/dev/rst0 800 BPI density
/dev/rst8 1600 BPI density
/dev/rst16 6250 BPI density
/dev/rst24 data compression
/dev/nrst0 non-rewinding 800 BPI density
/dev/nrst8 non-rewinding 1600 BPI density
/dev/nrst16 non-rewinding 6250 density
/dev/nrst24 non-rewinding data compression
C. The kernel jump table
- /usr/sys/sun/conf.c (SunOS 4.x)
- the 16th entry into the block device switch statement
is the jump table for the block-special floppy device:
{ fdopen, fdclose, fdstrategy, fddump, /*16*/
fdsize, 0 },
- the 54th entry into the character special switch statement
is the jump table for the raw floppy device:
{ fdopen, fdclose, fdread, fdwrite, /*54*/
fdioctl, nulldev, seltrue, 0,
0, 0,
},
- a call to device 54 with a jump parameter of 2 will call
fdread()
D. Linux device naming conventions
- similar to BSD
- all in /dev directory
- Slackware default makes about 650 devices
- example for SCSI drive:
brw-rw---- 1 root disk 8, 0 Jul 17 1994 sda
brw-rw---- 1 root disk 8, 1 Jul 17 1994 sda1
brw-rw---- 1 root disk 8, 2 Jul 17 1994 sda2
brw-rw---- 1 root disk 8, 3 Jul 17 1994 sda3
...
brw-rw---- 1 root disk 8, 16 Jul 17 1994 sdb
brw-rw---- 1 root disk 8, 17 Jul 17 1994 sdb1
...
- the block device name has the following form: sdDP
- D denotes the physical drive
- P denotes the partition
- SCSI disks have a major device number of 8
- minor device number = (16 * drive_number) + partition number
- drive_number = number of the physical drive in order of detection
- partition numbers are:
partition 0 is the whole drive
partitions 1-4 are the DOS primary partitions
partitions 5-8 are the DOS extended partitions
- example:
/dev/sda2 is the 2nd DOS primary partition on the first drive
D. Solaris device naming conventions
- /dev contains the usual character and block special
file names
- but they are links to other directories
root root 37 Oct 1 1993 diskette ->../devices/obio/SUNW,fdtwo@0,400000:c
root root 37 Aug 16 02:49 fd0a ->../devices/obio/SUNW,fdtwo@0,400000:a
root root 37 Aug 16 02:49 fd0b ->../devices/obio/SUNW,fdtwo@0,400000:b
root root 8 Aug 16 02:49 fd0c -> diskette
root root 41 Oct 1 1993 rdiskette ->../devices/obio/SUNW,fdtwo@0,400000:c,raw
root root 41 Aug 16 02:49 rfd0a ->../devices/obio/SUNW,fdtwo@0,400000:a,raw
root root 41 Aug 16 02:49 rfd0b ->../devices/obio/SUNW,fdtwo@0,400000:b,raw
root root 9 Aug 16 02:49 rfd0c -> rdiskette
- look in /devices/obio:
brw-rw-rw- 1 root 36, 0 Jul 11 1994 SUNW,fdtwo@0,400000:a
crw-rw-rw- 1 root 36, 0 Oct 1 1993 SUNW,fdtwo@0,400000:a,raw
brw-rw-rw- 1 root 36, 1 Oct 1 1993 SUNW,fdtwo@0,400000:b
crw-rw-rw- 1 root 36, 1 Oct 1 1993 SUNW,fdtwo@0,400000:b,raw
brw-rw-rw- 1 root 36, 2 Oct 1 1993 SUNW,fdtwo@0,400000:c
crw-rw-rw- 1 root 36, 2 Oct 1 1993 SUNW,fdtwo@0,400000:c,raw
- note the major, minor device numbers
- and the block and character special file designators
- how about SCSI drives
- they are linked to the directory
> One of the most complex UNIX device naming schemes ever!
/devices/iommu@0,10000000/sbus@0,10001000/espdma@4,8400000/esp@4,8800000
- in here you will find the usual device files:
brw-r----- 1 root 32, 24 Oct 1 1993 sd@3,0:a
crw-r----- 1 root 32, 24 Oct 1 1993 sd@3,0:a,raw