dev - device files in /dev

     Device files are the eyes and ears of the  system.   Through  the  device
     files  one  has  access  to  the  disks, terminals and other parts of the
     machine.  Single bytes or disk blocks may be transferred  to  or  from  a
     device  with  ordinary read(2) or write(2) calls, byte positions set with
     lseek(2), or more complicated control functions performed with ioctl(2).

     Device files as found in  /dev  have  several  attributes  that  must  be
     considered.  Here are two examples as ls -l shows them:

          brw-rw-rw-  1 root     operator   2,   1 Jun 10  1995 fd1
          crw--w----  1 kjb      tty        4,   0 May 11 09:41 console

     Most attributes are the same as for a regular  file  and  have  the  same
     function.   The  file  type  and  the  major and minor device numbers are
     special to devices.

     Character devices are marked with a c as a file type letter.  Any I/O  on
     a  character  device  is  sent  down  to  the  device  driver without any
     interpretation.  This means that a process doing the I/O  must  know  the
     characteristics of the device and deal with them appropriately.

     Block devices provoke the file system server into buffering the  data  on
     those  devices.   Data read or written by processes is passed through the
     file system block cache.  Unaligned bytes read or written  are  extracted
     or  reassembled  by the file server from or to whole blocks in the cache.
     The file server transfers data to or from the device driver as blocks  to
     positions  at  block  size  boundaries.  These blocks are Minix blocks of
     1024 bytes, disk devices usually have a 512 byte block size.  Only  block
     devices  can be mounted as part of the file system tree if they contain a
     Minix file system.

     The major device number (2 for fd1 and 4 for console) are used by  FS  to
     find the device driver that manages a device.  The minor device number (1
     for fd1 and 0 for console) is passed to the driver  to  select  a  device
     among  a  number  of related devices that are all managed by that driver.
     The device drivers are usually kernel tasks under Minix, small  processes
     that are contained within the address space of the kernel.  The following
     tasks and associated devices exist:

  Memory (major 1)
     The ram, mem, kmem, and null devices are managed by the memory task.  The
     ram  device is a block device for a chunk of memory that is the RAM disk.
     Any byte read from or written to the ram device is copied from or to that
     memory  chunk.   The  mem  device  is  a  character device for the entire
     address space of the system, but kmem only  for  the  kernel  data  area.
     These  two  devices  allow  programs like ps(1) to hunt around the system
     looking for interesting bits.  The  null  device  is  a  data  sink.   It
     happily swallows any bytes written to it, and returns nothing on a read.

  Floppy disk (major 2)
     The fd0, fd0p0, fd0p1, fd0p2, and  fd0p3  block  devices  are  the  first
     floppy disk and the four partitions that may exist on a that floppy disk.
     Likewise are fd1 and fd1p[0-3] the device and partitions for  the  second
     floppy  disk.   The floppy disk devices are described in detail in fd(4).
     Partitioning in general is explained in controller(4).

  Controller 0 (major 3)
     The first hard disk on controller 0 can be accessed by block device c0d0.
     This  device  addresses  the  entire hard disk from the first to the last
     sector.  A hard disk is  normally  partitioned  in  up  to  four  primary
     partitions,  c0d0p0,  c0d0p1,  c0d0p2, and c0d0p3.  Each of these devices
     accesses a range of sectors on the c0d0 device.  It is customary to  give
     each  operating  system on a disk a primary partition.  So the Windows C:
     "drive" can be on c0d0p0, and Minix can be on  c0d0p1.   Minix  wants  to
     have  several  partitions on its own, so c0d0p1 can be further subdivided
     into the subpartitions c0d0p1s0, c0d0p1s1, c0d0p1s2, and c0d0p1s3.   /dev
     contains  devices  for  the  first  and second hard disk (c0d0 and c0d1),
     their  primary  partitions  (c0d[01]p[0-3])  and  subpartitions   thereof
     (c0d[01]p[0-3]s[0-3]).  More detail can be found in controller(4).

  Terminals (minor 4)
     The TTY driver manages the system console device,  aptly  named  console,
     the  serial  lines,  tty00  and  tty01, and the pseudo ttys.  Through the
     console device one can display characters  on  a  screen  attached  to  a
     monochrome,  Hercules,  color,  or  VGA  adapter.  The ttyc1, ttyc2, etc.
     devices are the so-called "virtual consoles" that share the  one  console
     display.   One  can  select which virtual console is to be visible on the
     screen and take input from the  keyboard.   To  allow  remote  login  the
     devices  with  minor  numbers  of  128 or higher offer virtual terminals.
     These pseudo ttys come in  tty,  pty  pairs  that  form  a  pipe  between
     processes  running  under  the tty, and a controlling process attached to
     the pty side.  See also console(4), and tty(4).

  Anonymous TTY (major 5)
     This is just one device named tty that is a synonym for  the  controlling
     tty  of  a process.  This device is not managed by any device driver, but
     is handled by FS itself.  A process can get access to the terminal it  is
     running under by using /dev/tty.

  Line printer (major 6)
     The lp device sends any bytes written to it to the printer.

  TCP/IP (major 7)
     The TCP/IP task is not a kernel task, but a server like MM  and  FS.   It
     sits  between  FS  and  the DP8390 task that manages the ethernet boards.
     Together they implement the TCP/IP protocol.  See also ip(4).

  Controller 1 (major 8)
     Like controller 0 (major  3),  but  managing  a  second  controller  with
     devices /dev/c1*.

  Controller 2 (major 10)
     Like controller 0.

  Controller 3 (major 12)
     Like controller 0.

  Audio (major 13)
     The audio device can be used to produce or record air vibrations using  a
     Soundblaster 16 type audio card.  See audio(4).

  Mixer (major 14)
     The mixer device is used to control the audio driver.


     /dev/*    All Minix devices

     read(2), write(2), lseek(2), ioctl(2), console(4), fd(4),  controller(4),
     ip(4), tty(4), MAKEDEV(8).

     There are five prominent errors that processes accessing device files may

     ENODEV - No such device
          There is no driver managing the device class this device belongs to.
          Either the driver is configured out, or it is not loaded (inet).

     ENXIO - No such device or address
          This device is not available.  Either the driver does not support it
          at  all,  or the hardware isn't available, i.e. accessing the second
          disk on a system with only one disk.

     EACCES - Permission denied
          This error may cause a lot of head  scratching  if  ls  -l  shows  a
          device  file  to be writable.  The media you are trying to access is
          simply physically write protected!

     EINVAL - Invalid argument
          Devices may not like reads or writes that are not  block  multiples,
          or  very big transfers, etc.  The device manual page should list the

     EIO - I/O error
          This may be a real I/O error, i.e. a read or  write  on  the  device
          failing  due  to a media error.  But it may also be the result of an
          operation that a device can't do, or an empty tape drive, etc.

     Some devices are not present by default.  The MAKEDEV script knows how to
     make them.

  MS-DOS/Windows equivalents
     The names of MS-DOS/Windows devices probably  map  to  Minix  devices  as

          A:     fd0
          B:     fd1
          C:     c0d0p0             (usually the first partition)
          D:     c0d1p0, c0d2p0     (if it's another disk)
          D:     c0d0p1s0           (if it's an extended partition)
          D:     c0d1, c0d2, c0d3   (if it's a CD-ROM)
          CON    console
          COM1   tty00              (UNIX counts from 0)
          LPT1   lp

     Kees J. Bot (