Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/docs/mdev.txt


Ignore:
Timestamp:
Feb 25, 2011, 9:26:54 PM (13 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.18.3 to avoid problems with the tar command which is now failing on recent versions with busybox 1.7.3
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mindi-busybox/docs/mdev.txt

    r1765 r2725  
    1616
    1717Here's a typical code snippet from the init script:
     18[0] mount -t proc proc /proc
    1819[1] mount -t sysfs sysfs /sys
    19 [2] echo /bin/mdev > /proc/sys/kernel/hotplug
     20[2] echo /sbin/mdev > /proc/sys/kernel/hotplug
    2021[3] mdev -s
     22
     23Alternatively, without procfs the above becomes:
     24[1] mount -t sysfs sysfs /sys
     25[2] sysctl -w kernel.hotplug=/sbin/mdev
     26[3] mdev -s
     27
    2128
    2229Of course, a more "full" setup would entail executing this before the previous
    2330code snippet:
    24 [4] mount -t tmpfs mdev /dev
     31[4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
    2532[5] mkdir /dev/pts
    2633[6] mount -t devpts devpts /dev/pts
    2734
    2835The simple explanation here is that [1] you need to have /sys mounted before
    29 executing mdev.  Then you [2] instruct the kernel to execute /bin/mdev whenever
     36executing mdev.  Then you [2] instruct the kernel to execute /sbin/mdev whenever
    3037a device is added or removed so that the device node can be created or
    3138destroyed.  Then you [3] seed /dev with all the device nodes that were created
     
    4552
    4653The file has the format:
    47     <device regex> <uid>:<gid> <octal permissions>
     54    <device regex>       <uid>:<gid> <permissions>
     55 or @<maj[,min1[-min2]]> <uid>:<gid> <permissions>
     56
    4857For example:
    49     hd[a-z][0-9]* 0:3 660
     58    hd[a-z][0-9]* 0:3 660
    5059
    5160The config file parsing stops at the first matching line.  If no line is
     
    5463    .* 1:1 777
    5564
     65You can rename/move device nodes by using the next optional field.
     66    <device regex> <uid>:<gid> <permissions> [=path]
     67So if you want to place the device node into a subdirectory, make sure the path
     68has a trailing /.  If you want to rename the device node, just place the name.
     69    hda 0:3 660 =drives/
     70This will move "hda" into the drives/ subdirectory.
     71    hdb 0:3 660 =cdrom
     72This will rename "hdb" to "cdrom".
     73
     74Similarly, ">path" renames/moves the device but it also creates
     75a direct symlink /dev/DEVNAME to the renamed/moved device.
     76
     77You can also prevent creation of device nodes with the 4th field as "!":
     78    tty[a-z]. 0:0 660 !
     79    pty[a-z]. 0:0 660 !
     80
    5681If you also enable support for executing your own commands, then the file has
    5782the format:
    58     <device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
     83    <device regex> <uid>:<gid> <permissions> [=path] [@|$|*<command>]
     84    or
     85    <device regex> <uid>:<gid> <permissions> [>path] [@|$|*<command>]
     86    or
     87    <device regex> <uid>:<gid> <permissions> [!] [@|$|*<command>]
     88
     89For example:
     90---8<---
     91# block devices
     92([hs]d[a-z])        root:disk   660 >disk/%1/0
     93([hs]d[a-z])([0-9]+)    root:disk   660 >disk/%1/%2
     94mmcblk([0-9]+)      root:disk   660 >disk/mmc/%1/0
     95mmcblk([0-9]+)p([0-9]+) root:disk   660 >disk/mmc/%1/%2
     96# network devices
     97(tun|tap)       root:network    660 >net/%1
     98---8<---
     99
    59100The special characters have the meaning:
    60101    @ Run after creating the device.
     
    63104
    64105The command is executed via the system() function (which means you're giving a
    65 command to the shell), so make sure you have a shell installed at /bin/sh.
     106command to the shell), so make sure you have a shell installed at /bin/sh.  You
     107should also keep in mind that the kernel executes hotplug helpers with stdin,
     108stdout, and stderr connected to /dev/null.
    66109
    67110For your convenience, the shell env var $MDEV is set to the device name.  So if
    68 the device 'hdc' was matched, MDEV would be set to "hdc".
     111the device "hdc" was matched, MDEV would be set to "hdc".
    69112
    70113----------
     
    77120filename of the firmware which mdev will load out of /lib/firmware/ and into
    78121the kernel via the sysfs interface.  The exact filename is hardcoded in the
    79 kernel, so look there if you need to want to know what to name the file in
    80 userspace.
     122kernel, so look there if you need to know how to name the file in userspace.
     123
     124------------
     125 SEQUENCING
     126------------
     127
     128Kernel does not serialize hotplug events. It increments SEQNUM environmental
     129variable for each successive hotplug invocation. Normally, mdev doesn't care.
     130This may reorder hotplug and hot-unplug events, with typical symptoms of
     131device nodes sometimes not created as expected.
     132
     133However, if /dev/mdev.seq file is found, mdev will compare its
     134contents with SEQNUM. It will retry up to two seconds, waiting for them
     135to match. If they match exactly (not even trailing '\n' is allowed),
     136or if two seconds pass, mdev runs as usual, then it rewrites /dev/mdev.seq
     137with SEQNUM+1.
     138
     139IOW: this will serialize concurrent mdev invocations.
     140
     141If you want to activate this feature, execute "echo >/dev/mdev.seq" prior to
     142setting mdev to be the hotplug handler. This writes single '\n' to the file.
     143NB: mdev recognizes /dev/mdev.seq consisting of single '\n' character
     144as a special case. IOW: this will not make your first hotplug event
     145to stall for two seconds.
Note: See TracChangeset for help on using the changeset viewer.