X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=docs%2Fwriting_udev_rules%2Findex.html;h=7ca350635ddfcc98893dfc9553525441f682e630;hb=e20294e018ee1a8e3e6a4f5977a23728fdc08c0f;hp=92891376f5da0c22e0909f25c2f23a1f481dd9e1;hpb=fbb002f9d31c76f9445c4c16b3b88b11e34f8e86;p=elogind.git diff --git a/docs/writing_udev_rules/index.html b/docs/writing_udev_rules/index.html index 92891376f..7ca350635 100644 --- a/docs/writing_udev_rules/index.html +++ b/docs/writing_udev_rules/index.html @@ -17,7 +17,7 @@
-Enter udevinfo, which is probably the most straightforward tool you can use to construct rules. All you need to know is the sysfs device path of the device in question. A trimmed example is shown below: +Enter udevadm info, which is probably the most straightforward tool you can use to construct rules. All you need to know is the sysfs device path of the device in question. A trimmed example is shown below:
-# udevinfo -a -p /sys/block/sda
+# udevadm info -a -p /sys/block/sda
looking at device '/block/sda':
KERNEL=="sda"
@@ -475,12 +476,12 @@ Enter udevinfo, which is probably the most straightforward tool you can
-As you can see, udevinfo simply produces a list of attributes you can use as-is as match keys in your udev rules. From the above example, I could produce (e.g.) either of the following two rules for this device: +As you can see, udevadm info simply produces a list of attributes you can use as-is as match keys in your udev rules. From the above example, I could produce (e.g.) either of the following two rules for this device:
+SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="ST3120827AS", NAME="my_hard_disk"SUBSYSTEM=="block", ATTR{size}=="234441648", NAME="my_hard_disk" -SUBSYSTEM="block", SUBSYSTEMS=="scsi", ATTRS{model}=="ST3120827AS", NAME="my_hard_disk"
You may have noted the use of colour in the above examples. This is to demonstrate that while it is legal to combine the attributes from the device in question and a single parent device, you cannot mix-and-match attributes from multiple parent devices - your rule will not work. For example, the following rule is invalid as it attempts to match attributes from two parent devices: @@ -494,24 +495,24 @@ You are usually provided with a large number of attributes, and you must pick a
-Observe the effects of hierarchy in the udevinfo output. The green section corresponding to the device in question uses the standard match keys such as KERNEL and ATTR. The blue and maroon sections corresponding to parent devices use the parent-traversing variants such as SUBSYSTEMS and ATTRS. This is why the complexity introduced by the hierarchical structure is actually quite easy to deal with, just be sure to use the exact values that udevinfo suggests. +Observe the effects of hierarchy in the udevadm info output. The green section corresponding to the device in question uses the standard match keys such as KERNEL and ATTR. The blue and maroon sections corresponding to parent devices use the parent-traversing variants such as SUBSYSTEMS and ATTRS. This is why the complexity introduced by the hierarchical structure is actually quite easy to deal with, just be sure to use the exact values that udevadm info suggests.
-Another point to note is that it is common for text attributes to appear in the udevinfo output to be padded with spaces (e.g. see ST3120827AS above). In your rules, you can either specify the extra spaces, or you can cut them off as I have done. +Another point to note is that it is common for text attributes to appear in the udevadm info output to be padded with spaces (e.g. see ST3120827AS above). In your rules, you can either specify the extra spaces, or you can cut them off as I have done.
-The only complication with using udevinfo is that you are required to know the top-level device path (/sys/block/sda in the example above). This is not always obvious. However, as you are generally writing rules for device nodes which already exist, you can use udevinfo to look up the device path for you: +The only complication with using udevadm info is that you are required to know the top-level device path (/sys/block/sda in the example above). This is not always obvious. However, as you are generally writing rules for device nodes which already exist, you can use udevadm info to look up the device path for you:
-+# udevinfo -a -p $(udevinfo -q path -n /dev/sda)
# udevadm info -a -p $(udevadm info -q path -n /dev/sda)
-Although udevinfo is almost certainly the most straightforward way of listing the exact attributes you can build rules from, some users are happier with other tools. Utilities such as usbview display a similar set of information, most of which can be used in rules. +Although udevadm info is almost certainly the most straightforward way of listing the exact attributes you can build rules from, some users are happier with other tools. Utilities such as usbview display a similar set of information, most of which can be used in rules.
-I power on my printer, and it is assigned device node /dev/lp0. Not satisfied with such a bland name, I decide to use udevinfo to aid me in writing a rule which will provide an alternative name: +I power on my printer, and it is assigned device node /dev/lp0. Not satisfied with such a bland name, I decide to use udevadm info to aid me in writing a rule which will provide an alternative name:
-# udevinfo -a -p $(udevinfo -q path -n /dev/lp0) +# udevadm info -a -p $(udevadm info -q path -n /dev/lp0) looking at device '/class/usb/lp0': KERNEL=="lp0" SUBSYSTEM=="usb" @@ -694,7 +695,7 @@ Not all cameras work in this way: some of them use a non-storage protocol such a-A common complication with USB camera devices is that they usually identify themselves as a disk with a single partition, in this case /dev/sdb with /dev/sdb1. The sdb node is useless to me, but sdb1 is interesting - this is the one I want to mount. There is a problem here that because sysfs is chained, the useful attributes which udevinfo produces for /dev/sdb1 are identical to the ones for /dev/sdb. This results in your rule potentially matching both the raw disk and the partition, which is not what you want, your rule should be specific. +A common complication with USB camera devices is that they usually identify themselves as a disk with a single partition, in this case /dev/sdb with /dev/sdb1. The sdb node is useless to me, but sdb1 is interesting - this is the one I want to mount. There is a problem here that because sysfs is chained, the useful attributes which udevadm info produces for /dev/sdb1 are identical to the ones for /dev/sdb. This results in your rule potentially matching both the raw disk and the partition, which is not what you want, your rule should be specific.
@@ -702,7 +703,7 @@ To get around this, you simply need to think about what differs between sdb and
-# udevinfo -a -p $(udevinfo -q path -n /dev/sdb1) +# udevadm info -a -p $(udevadm info -q path -n /dev/sdb1) looking at device '/block/sdb/sdb1': KERNEL=="sdb1" SUBSYSTEM=="block" @@ -735,7 +736,7 @@ A USB hard disk is comparable to the USB camera I described above, however typic Of course, if you have a 100GB USB hard disk, it is perfectly understandable that you might want to partition it, in which case we can take advantage of udev's string substitutions: -+KERNEL=="sd*", SUBSYSTEMS="scsi", ATTRS{model}=="USB 2.0 Storage Device", SYMLINK+="usbhd%n"KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{model}=="USB 2.0 Storage Device", SYMLINK+="usbhd%n"This rule creates symlinks such as: @@ -780,7 +781,7 @@ These devices work as USB-serial devices, so by default, you only get the tt
SUBSYSTEMS=="usb", ATTRS{product}=="Palm Handheld", KERNEL=="ttyUSB*", SYMLINK+="pilot"-Note that the product string seems to vary from product to product, so make sure that you check (using udevinfo) which one applies to you. +Note that the product string seems to vary from product to product, so make sure that you check (using udevadm info) which one applies to you.
@@ -807,11 +808,11 @@ Even though they are referenced by names, network interfaces typically do not ha-It makes sense to simply match the MAC address of your interface in the rule, as this is unique. However, make sure that you use the exact MAC address as shown as udevinfo, because if you do not match the case exactly, your rule will not work. +It makes sense to simply match the MAC address of your interface in the rule, as this is unique. However, make sure that you use the exact MAC address as shown as udevadm info, because if you do not match the case exactly, your rule will not work.
-# udevinfo -a -p /sys/class/net/eth0 +# udevadm info -a -p /sys/class/net/eth0 looking at class device '/sys/class/net/eth0': KERNEL=="eth0" ATTR{address}=="00:52:8b:d5:04:48" @@ -842,22 +843,18 @@ Despite this, udev will not automatically reprocess all devices and attempt to a-To make the symbolic link show up, you can either disconnect and reconnect your camera, or alternatively in the case of non-removable devices, you can run udevtrigger. -
- --If your kernel does not have inotify support, new rules will not be detected automatically. In this situation, you must run udevcontrol reload_rules after making any rule file modifications for those modifications to take effect. +To make the symbolic link show up, you can either disconnect and reconnect your camera, or alternatively in the case of non-removable devices, you can run udevadm trigger.
-udevtest
+udevadm test
-If you know the top-level device path in sysfs, you can use udevtest to show the actions which udev would take. This may help you debug your rules. For example, assuming you want to debug a rule which acts on /sys/class/sound/dsp: +If you know the top-level device path in sysfs, you can use udevadm test to show the actions which udev would take. This may help you debug your rules. For example, assuming you want to debug a rule which acts on /sys/class/sound/dsp:
-# udevtest /class/sound/dsp +# udevadm test /class/sound/dsp main: looking at device '/class/sound/dsp' from subsystem 'sound' udev_rules_get_name: add symlink 'dsp' udev_rules_get_name: rule applied, 'dsp' becomes 'sound/dsp' @@ -867,7 +864,7 @@ udev_node_add: creating symlink '/dev/dsp' to 'sound/dsp'-Note the /sys prefix was removed from the udevtest command line argument, this is because udevtest operates on device paths. Also note that udevtest is purely a testing/debugging tool, it does not create any device nodes, despite what the output suggests! +Note the /sys prefix was removed from the udevadm test test command line argument, this is because udevadm test operates on device paths.