On Feb 12, 2013, at 10:02 PM, Philip Guenther <guent...@gmail.com> wrote:

> On Tue, Feb 12, 2013 at 5:34 PM, jordon <open...@sirjorj.com> wrote:
>> Today I was looking into some of the more simple devices to see how they
>> are implemented.  I figured the basic text ones (zero, random, null,
>> etc) would be a nice place to start.  I went to /usr/src/sys/dev to look
>> for them, but I couldn't find them.  Where is the source of these basic
>> devices?  Are they actual drivers like network drivers or are they some
>> completely different devices?
> 
> Devices != drivers.  Indeed, network drivers generally do not present
> devices in /dev/.  That was one of the (early) criticisms of the BSD
> networking model: it created a new namespace for interface names.
> 
> Anyway, if you're looking for the code behind a device file (a block
> device or character device file in the filesystem), you start by
> looking up its major number in the arrays in the file
> /usr/src/sys/arch/${ARCH}/${ARCH}/conf.c.  For example, /dev/zero is a
> character device with major 2, and
> /usr/src/sys/arch/amd64/amd64/conf.c has this:
> 
> struct cdevsw   cdevsw[] =
> {
>        cdev_cn_init(1,cn),             /* 0: virtual console */
>        cdev_ctty_init(1,ctty),         /* 1: controlling terminal */
>        cdev_mm_init(1,mm),             /* 2: /dev/{null,mem,kmem,...} */
> ...
> 
> cdev_mm_init() is a macro in <sys/conf.h>, and if you stare there and
> work out the cpp expansion, you'll eventually look for functions
> mmopen(), mmclose(), mmrw(), etc.  For amd64, those are implemented in
> /usr/src/sys/arch/amd64/amd64/mem.c, where the code figures out which
> of the minor devices is involved in a given call by examining the
> 'dev' argument to the function.
> 
> 
> Philip Guenther
> 

An excellent explanation.  Thank you for clarifying this.

I have been studying Linux driver dev lately for work (hey, it's a step up from 
.net/c# dev!) and I am comparing it with OpenBSD.  This answer clears up a 
question I discovered today.

Thanks again.

Jordon

Reply via email to