blob: 1a97be4ce2874a98dc7d2ef6e814e9e3fdf4fbd9 [file] [log] [blame]
Mike Frysingerae302102007-02-14 13:20:29 +00001-------------
2 MDEV Primer
3-------------
4
5For those of us who know how to use mdev, a primer might seem lame. For
6everyone else, mdev is a weird black box that they hear is awesome, but can't
7seem to get their head around how it works. Thus, a primer.
8
9-----------
10 Basic Use
11-----------
12
13Mdev has two primary uses: initial population and dynamic updates. Both
14require sysfs support in the kernel and have it mounted at /sys. For dynamic
15updates, you also need to have hotplugging enabled in your kernel.
16
17Here's a typical code snippet from the init script:
Bernhard Reutner-Fischer9c3052a2008-05-16 11:36:32 +000018[0] mount -t proc proc /proc
Mike Frysingerae302102007-02-14 13:20:29 +000019[1] mount -t sysfs sysfs /sys
20[2] echo /bin/mdev > /proc/sys/kernel/hotplug
21[3] mdev -s
22
Bernhard Reutner-Fischer9c3052a2008-05-16 11:36:32 +000023Alternatively, without procfs the above becomes:
24[1] mount -t sysfs sysfs /sys
25[2] sysctl -w kernel.hotplug=/bin/mdev
26[3] mdev -s
27
28
Mike Frysingerae302102007-02-14 13:20:29 +000029Of course, a more "full" setup would entail executing this before the previous
30code snippet:
Bernhard Reutner-Fischer9c3052a2008-05-16 11:36:32 +000031[4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
Mike Frysingerae302102007-02-14 13:20:29 +000032[5] mkdir /dev/pts
33[6] mount -t devpts devpts /dev/pts
34
35The simple explanation here is that [1] you need to have /sys mounted before
36executing mdev. Then you [2] instruct the kernel to execute /bin/mdev whenever
37a device is added or removed so that the device node can be created or
38destroyed. Then you [3] seed /dev with all the device nodes that were created
39while the system was booting.
40
41For the "full" setup, you want to [4] make sure /dev is a tmpfs filesystem
42(assuming you're running out of flash). Then you want to [5] create the
43/dev/pts mount point and finally [6] mount the devpts filesystem on it.
44
45-------------
46 MDEV Config (/etc/mdev.conf)
47-------------
48
49Mdev has an optional config file for controlling ownership/permissions of
50device nodes if your system needs something more than the default root/root
51660 permissions.
52
53The file has the format:
54 <device regex> <uid>:<gid> <octal permissions>
55For example:
56 hd[a-z][0-9]* 0:3 660
57
58The config file parsing stops at the first matching line. If no line is
59matched, then the default of 0:0 660 is used. To set your own default, simply
60create your own total match like so:
61 .* 1:1 777
62
Mike Frysingerf0044c42008-02-01 06:53:50 +000063You can rename/relocate device nodes by using the next optional field.
64 <device regex> <uid>:<gid> <octal permissions> [>path]
65So if you want to place the device node into a subdirectory, make sure the path
66has a trailing /. If you want to rename the device node, just place the name.
67 hda 0:3 660 >drives/
68This will relocate "hda" into the drives/ subdirectory.
69 hdb 0:3 660 >cdrom
70This will rename "hdb" to "cdrom".
71
Mike Frysingerae302102007-02-14 13:20:29 +000072If you also enable support for executing your own commands, then the file has
73the format:
74 <device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
75The special characters have the meaning:
76 @ Run after creating the device.
77 $ Run before removing the device.
78 * Run both after creating and before removing the device.
79
80The command is executed via the system() function (which means you're giving a
Mike Frysingerc348e0b2008-02-01 01:41:57 +000081command to the shell), so make sure you have a shell installed at /bin/sh. You
82should also keep in mind that the kernel executes hotplug helpers with stdin,
83stdout, and stderr connected to /dev/null.
Mike Frysingerae302102007-02-14 13:20:29 +000084
85For your convenience, the shell env var $MDEV is set to the device name. So if
Mike Frysingerc348e0b2008-02-01 01:41:57 +000086the device "hdc" was matched, MDEV would be set to "hdc".
Mike Frysingerae7f7eb2007-06-28 17:13:51 +000087
88----------
89 FIRMWARE
90----------
91
92Some kernel device drivers need to request firmware at runtime in order to
93properly initialize a device. Place all such firmware files into the
94/lib/firmware/ directory. At runtime, the kernel will invoke mdev with the
95filename of the firmware which mdev will load out of /lib/firmware/ and into
96the kernel via the sysfs interface. The exact filename is hardcoded in the
Bernhard Reutner-Fischer9c3052a2008-05-16 11:36:32 +000097kernel, so look there if you need to know how to name the file in userspace.