Posted by: Wildan Maulana | August 21, 2007

mdev – mini udev in busybox

When recompile busybox for my ngw board, there is interesting option : mdev, on previous post we saw that openwrt offer hotplug2 for udev replacement, altough openwrt use busybox also ….


The following is the doc related to mdev  which i get from busybox 1.6.1 distribution :

MDEV Primer

For those of us who know how to use mdev, a primer might seem lame.  For
everyone else, mdev is a weird black box that they hear is awesome, but can’t
seem to get their head around how it works.  Thus, a primer.

Basic Use

Mdev has two primary uses: initial population and dynamic updates.  Both
require sysfs support in the kernel and have it mounted at /sys.  For dynamic
updates, you also need to have hotplugging enabled in your kernel.

Here’s a typical code snippet from the init script:
[1] mount -t sysfs sysfs /sys
[2] echo /bin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s

Of course, a more “full” setup would entail executing this before the previous
code snippet:
[4] mount -t tmpfs mdev /dev
[5] mkdir /dev/pts
[6] mount -t devpts devpts /dev/pts

The simple explanation here is that [1] you need to have /sys mounted before
executing mdev.  Then you [2] instruct the kernel to execute /bin/mdev whenever
a device is added or removed so that the device node can be created or
destroyed.  Then you [3] seed /dev with all the device nodes that were created
while the system was booting.

For the “full” setup, you want to [4] make sure /dev is a tmpfs filesystem
(assuming you’re running out of flash).  Then you want to [5] create the
/dev/pts mount point and finally [6] mount the devpts filesystem on it.

MDEV Config   (/etc/mdev.conf)

Mdev has an optional config file for controlling ownership/permissions of
device nodes if your system needs something more than the default root/root
660 permissions.

The file has the format:
<device regex> <uid>:<gid> <octal permissions>
For example:
hd[a-z][0-9]* 0:3 660

The config file parsing stops at the first matching line.  If no line is
matched, then the default of 0:0 660 is used.  To set your own default, simply
create your own total match like so:
.* 1:1 777

If you also enable support for executing your own commands, then the file has
the format:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
The special characters have the meaning:
@ Run after creating the device.
$ Run before removing the device.
* Run both after creating and before removing the device.

The command is executed via the system() function (which means you’re giving a
command to the shell), so make sure you have a shell installed at /bin/sh.

For your convenience, the shell env var $MDEV is set to the device name.  So if
the device ‘hdc’ was matched, MDEV would be set to “hdc”.



  1. hi,..
    how do i find if my kernel supports initial population and dynamic updates.
    and how do i enable hotplugin enable… Im trying to implement it on raspberry – pi ( weezy )

  2. […] you are targetting an embedded device, then you can run mdev instead of udev. Then you can write mdev rules that are quite simple and triggers a […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s


%d bloggers like this: