X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=docs%2Fmdev.txt;h=b24025f7b73587cab98d25c23ed5de906b7df0d6;hb=31c765081dc41f158786545fbea9294be4685bd2;hp=4a4451b4dd956245c0c558ed707ebf40c7172ed1;hpb=c348e0bc7bb104c9e2385a0d1c29099a7033adf8;p=oweals%2Fbusybox.git diff --git a/docs/mdev.txt b/docs/mdev.txt index 4a4451b4d..b24025f7b 100644 --- a/docs/mdev.txt +++ b/docs/mdev.txt @@ -15,18 +15,25 @@ 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: +[0] mount -t proc proc /proc [1] mount -t sysfs sysfs /sys -[2] echo /bin/mdev > /proc/sys/kernel/hotplug +[2] echo /sbin/mdev > /proc/sys/kernel/hotplug [3] mdev -s +Alternatively, without procfs the above becomes: +[1] mount -t sysfs sysfs /sys +[2] sysctl -w kernel.hotplug=/sbin/mdev +[3] mdev -s + + Of course, a more "full" setup would entail executing this before the previous code snippet: -[4] mount -t tmpfs mdev /dev +[4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /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 +executing mdev. Then you [2] instruct the kernel to execute /sbin/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. @@ -44,18 +51,58 @@ device nodes if your system needs something more than the default root/root 660 permissions. The file has the format: - : + [-][envmatch] : +or + [envmatch]@ : +or + $envvar= : + 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 +You can rename/move device nodes by using the next optional field. + + : [=path] + +So if you want to place the device node into a subdirectory, make sure the path +has a trailing /. If you want to rename the device node, just place the name. + hda 0:3 660 =drives/ +This will move "hda" into the drives/ subdirectory. + hdb 0:3 660 =cdrom +This will rename "hdb" to "cdrom". + +Similarly, ">path" renames/moves the device but it also creates +a direct symlink /dev/DEVNAME to the renamed/moved device. + +You can also prevent creation of device nodes with the 4th field as "!": + tty[a-z]. 0:0 660 ! + pty[a-z]. 0:0 660 ! + If you also enable support for executing your own commands, then the file has the format: - : [<@|$|*> ] + : [=path] [@|$|*] + or + : [>path] [@|$|*] + or + : [!] [@|$|*] + +For example: +---8<--- +# block devices +([hs]d[a-z]) root:disk 660 >disk/%1/0 +([hs]d[a-z])([0-9]+) root:disk 660 >disk/%1/%2 +mmcblk([0-9]+) root:disk 660 >disk/mmc/%1/0 +mmcblk([0-9]+)p([0-9]+) root:disk 660 >disk/mmc/%1/%2 +# network devices +(tun|tap) root:network 660 >net/%1 +---8<--- + The special characters have the meaning: @ Run after creating the device. $ Run before removing the device. @@ -78,5 +125,27 @@ properly initialize a device. Place all such firmware files into the /lib/firmware/ directory. At runtime, the kernel will invoke mdev with the filename of the firmware which mdev will load out of /lib/firmware/ and into the kernel via the sysfs interface. The exact filename is hardcoded in the -kernel, so look there if you need to want to know what to name the file in -userspace. +kernel, so look there if you need to know how to name the file in userspace. + +------------ + SEQUENCING +------------ + +Kernel does not serialize hotplug events. It increments SEQNUM environmental +variable for each successive hotplug invocation. Normally, mdev doesn't care. +This may reorder hotplug and hot-unplug events, with typical symptoms of +device nodes sometimes not created as expected. + +However, if /dev/mdev.seq file is found, mdev will compare its +contents with SEQNUM. It will retry up to two seconds, waiting for them +to match. If they match exactly (not even trailing '\n' is allowed), +or if two seconds pass, mdev runs as usual, then it rewrites /dev/mdev.seq +with SEQNUM+1. + +IOW: this will serialize concurrent mdev invocations. + +If you want to activate this feature, execute "echo >/dev/mdev.seq" prior to +setting mdev to be the hotplug handler. This writes single '\n' to the file. +NB: mdev recognizes /dev/mdev.seq consisting of single '\n' character +as a special case. IOW: this will not make your first hotplug event +to stall for two seconds.