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