Mdev

The aim of this page is to document how to replace udev in Linux with mdev, thus allowing a separate partition, without an initramfs. The author uses Gentoo Linux with IceWM as the window manager. The instructions here should be applicable to other distros, assuming you can make the necessary changes.

Will mdev work on my system?
I run a simple Gentoo install, using IceWM, and no "desktop environment". An is not required on my system. Note that a "desktop environment" is not required to run AbiWord, Firefox, GIMP, Gnumeric, etc. However, "Koffice apps" like KMail seem to pull in most of KDE as a dependency. In general, if you use KDE or GNOME lvm2, you may have problems, and may not be able to get by with mdev. One beta tester reports getting close with lvm2, but it's not there yet.

It will work for you very well if you use the default Gentoo profile


 * default/linux/x86/13.0


 * default/linux/amd64/13.0.

You can show the used profile by using following command:

There is one more sanity check that Gentoo users can run to check for udev dependency. I don't think this can be duplicated in other distros.

Sanity check
Get an general overview which packages might depend on udev, the output could look similar to the one shown below:

To, add the line

Disable the  USE flag globally in :

Rebuild all packages with the new  USE flag

If the only errors you get are for not being able to re-install udev as required by, you can proceed to the next stage. Otherwise, might be an hard dependency of some package you requested.

ATI/AMD binary blobs
Some ATI/AMD Radeon cards require binary blobs. The Gentoo package pulls down all the binary blobs available at http://people.freedesktop.org/~ag5f/radeon_ucode/ to support many different models.

With all the binary blobs in the library directory, the kernel needs udev to figure out which one of the many binary blobs to load. If all but one of the binary blobs are removed, leaving only the correct one in the library directory, it loads automatically.

Warning / Disclaimer
This solution may result in a not boot-able Linux.

Setting up your kernel for devtmpfs
Set up your kernel to support and automount a devtmpfs filesystem at :

Once you've made the changes, rebuild the kernel. Do NOT reboot yet.

Emerging busybox
For our circumstance, you will need the  USE flag set for. The  USE flag is probably also a good idea. In the file, add the line:

Now, you may run

If you're using a distro other than Gentoo, or building BusyBox manually, do whatever necessary in your situation to enable the mdev option.

Mounting devpts
devpts exhibits non-standard behaviour. It does not automount, at bootup, or with. An explicit command is required. The standard solution for udev-based systems is to run as root, and have the udev-mount script do the mounting at startup. An mdev-based system will probably not have udev installed. An alternative way to do this at bootup is to include the command in a shell script in  In this example, the file will be named

Another side-effect of not using udev-mount is that is only writable by root. The command is required to restore the standard behaviour. This command will also be run from a script at startup.

Notes regarding scripts used in
 * The files must be executable.
 * They must have the extension ".start" on order to run at startup.
 * They must have the extension ".stop" on order to run at stop.

Editing is a optional step only for Linux 3.5.7. It is not needed for newer kernels.

Replace the udev service
Remove udev from the services list, replacing it with mdev:

Reboot
Reboot to your new kernel. Your system should now be running using mdev.

Cleanup
Remove udev from your system by running. In the, append the line sys-fs/udev. Create if it doesn't already exist.

You should now have a completely udev-free machine.

Rebuild the kernel
For libusb (and hence CUPS) to see the USB ports, set CONFIG_USB_DEVICE_CLASS=y and CONFIG_USB_DEVICEFS=y in your kernel configuration. You will also need to enable CONFIG_USB_PRINTER, despite the injunction in the cups-1.5.2 ebuild to disable it. If you use, these items are found here:

(Don't worry about the "DEPRECATED"s.)

Verify the presence of the new device nodes
You should see a hierarchy of device nodes under. If you switch on your printer, you will probably see a node for it at. You should be able to run successfully, and this should display your printer's details.

Configure your printer in CUPS
You should now be able to configure CUPS in the usual way. CUPS should find your printer, and will give it a URI something like.

Linux modules missing at boot sequence
If Linux modules are required and not loaded on boot after migration, you might might chose or combine following solutions:


 * Add Linux modules to


 * Compile modules into Linux kernel, without the need of loading them on demand.


 * Write your own module loader:

Install it as your hotplug handler instead of mdev. Note that the earlier you get this installed, the better. You might consider naming this script, since that is the default value of (or, change the default value in your kernel)

External resources

 * mdev like a boss project.