question about misc char devices, and relationship with udev

Robert P. J. Day rpjday at
Sat Apr 23 09:45:39 EDT 2011

  (probably a question with a very simple answer, i just don't know
what it is.)

  i'm currently trying to document the use of the "misc" char driver
to quickly and conveniently create a character driver.  there's a
decent explanation of misc drivers in the book "essential linux device
drivers", as well as a nice example here:

but here's where i get confused.

  what a misc char driver does is combine a lot of what you'd normally
do in creating a regular char driver in a single call.  on page 160 of
ELDD, it's explained that a single call to misc_register() does all of
the following that you would normally have to do yourself for a
regular char driver:

  * allocates major/minor number via alloc_chrdev_region()
  * creates /dev and /sys nodes via call to class_device_create()
  * registers itself as a char driver using cdev_init() and cdev_add()

sure enough, i compiled that sample misc char driver (called
"mymisc"), loaded it and got an entry for that module both under /sys
and under /dev, where i now have the device file:

crw------- 1 root root 10, 56 2011-04-23 08:18 /dev/mymisc

but here's the confusing part.  who or what created that /dev entry?
i always thought that was the job of udev, but i never added any udev
rule for this new driver.  so how did that new /dev file come to be?
is there some sort of generic udev rule that would have handled this?

  also, the ELDD book claims that misc_register() calls the kernel
routine class_device_create().  i'm looking at the entire
kernel implementation for misc drivers in drivers/char/misc.c, and
what i see is a call to device_create() instead.  i suspect i should
start following the flow of control here, but i'm still curious as to
how that /dev file came into existence without any obvious help
from udev.



Robert P. J. Day                                 Ottawa, Ontario, CANADA


More information about the Kernelnewbies mailing list