Subject: Re: device special files
To: None <tech-kern@netbsd.org>
From: Matthew Mondor <mm_lists@pulsar-zone.net>
List: tech-kern
Date: 11/15/2005 18:46:35
On Wed, 16 Nov 2005 00:05:56 +0100
Petar Bogdanovic <p+netbsd@2005.smokva.net> wrote:
 
> I don't understand the magic behind the device special files, /dev, 
> MAKEDEV, block/character/fifo and mknod. It's not about details - it's 
> more about the fact, that I am not able to imagine the whole thing.
> 
> Can somebody help me with a hint, tutorial or something else? The 
> MAKEDEV-/mknod-manpage helped just a little bit..

This does seem a proper list;

Although both fifos and device special files can be created using mknod,
they are different in that fifos are especially treated via the vfs layer
to src/sys/kern/sys_pipe.c

As for the device special files, the important part is that the kernel
deals with major/minor device descriptors, and character/block device
interfaces...  These files allow inodes to be created which correspond
to actual major/minor numbers with the proper type of interface.
So these files merely serve as an interface to access a specific device
with a familiar ioctl/read/write/etc interface which is common.

For instance, consider /dev/random (i386):
cr--r--r--  1 root  wheel  46, 0 Oct  5  2004 /dev/random

Character device (c), major device 46, minor device 0.  Accessing this
file will in the kernel map the file i/o syscalls in this case to the
code found in src/sys/dev/rnd.c

(see the "struct cdevsw" which is the linking point to the functions)
As for the link of major device 46 to rnd, it can be found (on i386)
at:

src/sys/arch/i386/conf/majors:
device-major    rnd             char 46                 rnd


I hope this helps a bit,
Matt

-- 
Note: Please only reply on the list, other mail is blocked by default.
Private messages from your address can be allowed by first asking.