Here we switch the configs and man pages to the new attribute syntax.
Also the 'partition trick' is mentioned in udev.8
I think it's more clear visible now, that inside the brackets are user
supplied values used and not some magic keys handled:
'SYSFS_dev' is now 'SYSFS{dev}'
The old syntax is still supported.
BUS="scsi", PROGRAM="/bin/echo -n test-%b", RESULT="test-42:0:0:1", NAME="%c"
# A usb camera.
BUS="scsi", PROGRAM="/bin/echo -n test-%b", RESULT="test-42:0:0:1", NAME="%c"
# A usb camera.
-BUS="usb", SYSFS_vendor="FUJIFILM", SYSFS_model="M100", NAME="camera%n"
+BUS="usb", SYSFS{vendor}="FUJIFILM", SYSFS{model}="M100", NAME="camera%n"
# USB Epson printer to be called lp_epson
BUS="usb", SYSFS_serial="HXOLL0012202323480", NAME="lp_epson"
# USB HP printer to be called lp_hp
# USB Epson printer to be called lp_epson
BUS="usb", SYSFS_serial="HXOLL0012202323480", NAME="lp_epson"
# USB HP printer to be called lp_hp
-BUS="usb", SYSFS_serial="W09090207101241330", NAME="lp_hp"
+BUS="usb", SYSFS{serial}="W09090207101241330", NAME="lp_hp"
# sound card with PCI bus id 00:0b.0 to be the first sound card
BUS="pci", ID="00:0b.0", NAME="dsp"
# sound card with PCI bus id 00:0b.0 to be the first sound card
BUS="pci", ID="00:0b.0", NAME="dsp"
BUS="scsi", PROGRAM="/bin/echo -n test-%b", RESULT="test-42:0:0:1", NAME="%c"
# A usb camera.
BUS="scsi", PROGRAM="/bin/echo -n test-%b", RESULT="test-42:0:0:1", NAME="%c"
# A usb camera.
-BUS="usb", SYSFS_vendor="FUJIFILM", SYSFS_model="M100", NAME="camera%n"
+BUS="usb", SYSFS{vendor}="FUJIFILM", SYSFS{model}="M100", NAME="camera%n"
# USB Epson printer to be called lp_epson
# USB Epson printer to be called lp_epson
-BUS="usb", SYSFS_serial="HXOLL0012202323480", NAME="lp_epson"
+BUS="usb", SYSFS{serial}="HXOLL0012202323480", NAME="lp_epson"
# USB HP printer to be called lp_hp
# USB HP printer to be called lp_hp
-BUS="usb", SYSFS_serial="W09090207101241330", NAME="lp_hp"
+BUS="usb", SYSFS{serial}="W09090207101241330", NAME="lp_hp"
# sound card with PCI bus id 00:0b.0 to be the first sound card
BUS="pci", ID="00:0b.0", NAME="dsp"
# sound card with PCI bus id 00:0b.0 to be the first sound card
BUS="pci", ID="00:0b.0", NAME="dsp"
export UDEV_CONFIG_FILE=$PWD/$CONFIG
cat > $RULES << EOF
export UDEV_CONFIG_FILE=$PWD/$CONFIG
cat > $RULES << EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_diskX%n"
-BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_disk%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", SYSFS{model}="ST336605LW !#", NAME="boot_diskX%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", SYSFS{model}="ST336605LW !#", NAME="boot_disk%n"
devpath => "block/sda",
expected => "boot_disk" ,
conf => <<EOF
devpath => "block/sda",
expected => "boot_disk" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="boot_disk%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="boot_disk%n"
KERNEL="ttyUSB0", NAME="visor"
EOF
},
KERNEL="ttyUSB0", NAME="visor"
EOF
},
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="boot_disk%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="boot_disk%n"
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="?IBM-ESXS", NAME="boot_disk%n-1"
-BUS="scsi", SYSFS_vendor="IBM-ESXS?", NAME="boot_disk%n-2"
-BUS="scsi", SYSFS_vendor="IBM-ES??", NAME="boot_disk%n"
-BUS="scsi", SYSFS_vendor="IBM-ESXSS", NAME="boot_disk%n-3"
+BUS="scsi", SYSFS{vendor}="?IBM-ESXS", NAME="boot_disk%n-1"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS?", NAME="boot_disk%n-2"
+BUS="scsi", SYSFS{vendor}="IBM-ES??", NAME="boot_disk%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXSS", NAME="boot_disk%n-3"
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_diskX%n"
-BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_disk%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", SYSFS{model}="ST336605LW !#", NAME="boot_diskX%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", SYSFS{model}="ST336605LW !#", NAME="boot_disk%n"
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
devpath => "block/sda/sda1",
expected => "boot_disk1" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", SYSFS_scsi_level="4", SYSFS_rev="B245", SYSFS_type="2", SYSFS_queue_depth="32", NAME="boot_diskXX%n"
-BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", SYSFS_scsi_level="4", SYSFS_rev="B245", SYSFS_type="0", NAME="boot_disk%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", SYSFS{model}="ST336605LW !#", SYSFS{scsi_level}="4", SYSFS{rev}="B245", SYSFS{type}="2", SYSFS{queue_depth}="32", NAME="boot_diskXX%n"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", SYSFS{model}="ST336605LW !#", SYSFS{scsi_level}="4", SYSFS{rev}="B245", SYSFS{type}="0", NAME="boot_disk%n"
devpath => "block/sda",
expected => "disk-IBM-ESXS-sda" ,
conf => <<EOF
devpath => "block/sda",
expected => "disk-IBM-ESXS-sda" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="disk-%s{vendor}-%k"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="disk-%s{vendor}-%k"
KERNEL="ttyUSB0", NAME="visor"
EOF
},
KERNEL="ttyUSB0", NAME="visor"
EOF
},
devpath => "class/tty/console",
expected => "TTY" ,
conf => <<EOF
devpath => "class/tty/console",
expected => "TTY" ,
conf => <<EOF
-BUS="foo", SYSFS_dev="5:1", NAME="foo"
+BUS="foo", SYSFS{dev}="5:1", NAME="foo"
KERNEL="console", NAME="TTY"
EOF
},
KERNEL="console", NAME="TTY"
EOF
},
devpath => "class/tty/console",
expected => "foo" ,
conf => <<EOF
devpath => "class/tty/console",
expected => "foo" ,
conf => <<EOF
-SYSFS_dev="5:1", NAME="foo"
+SYSFS{dev}="5:1", NAME="foo"
KERNEL="console", NAME="TTY"
EOF
},
KERNEL="console", NAME="TTY"
EOF
},
devpath => "block/sda/sda2",
expected => "1/2/a/b/symlink" ,
conf => <<EOF
devpath => "block/sda/sda2",
expected => "1/2/a/b/symlink" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/node", SYMLINK="1/2/a/b/symlink"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="1/2/node", SYMLINK="1/2/a/b/symlink"
devpath => "block/sda/sda2",
expected => "1/2/symlink" ,
conf => <<EOF
devpath => "block/sda/sda2",
expected => "1/2/symlink" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/symlink"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/symlink"
devpath => "block/sda/sda2",
expected => "1/2/c/d/symlink" ,
conf => <<EOF
devpath => "block/sda/sda2",
expected => "1/2/c/d/symlink" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/c/d/symlink"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/c/d/symlink"
devpath => "block/sda",
expected => "boot_disk15" ,
conf => <<EOF
devpath => "block/sda",
expected => "boot_disk15" ,
conf => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME{all_partitions}="boot_disk"
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME{all_partitions}="boot_disk"
devpath => "class/tty/ttyUSB0",
expected => "visor" ,
conf => <<EOF
devpath => "class/tty/ttyUSB0",
expected => "visor" ,
conf => <<EOF
-SYSFS_idProduct="2008", NAME="visor"
+SYSFS{idProduct}="2008", NAME="visor"
.B PLACE
Match the topological position on bus, like physical port of USB device
.TP
.B PLACE
Match the topological position on bus, like physical port of USB device
.TP
Match sysfs device attribute like label, vendor, USB serial number, SCSI UUID
or file system label. Up to 5 different sysfs files can be checked, with
all of the values being required in order to match the rule.
Match sysfs device attribute like label, vendor, USB serial number, SCSI UUID
or file system label. Up to 5 different sysfs files can be checked, with
all of the values being required in order to match the rule.
+The
+.B NAME
+field given with the attribute
+.BR NAME{ all_partitions }
+will create all 15 partitions of a blockdevice.
+This may be useful for removable media devices.
+.P
.RB "The " NAME " ," SYMLINK " and " PROGRAM
fields support simple printf-like string substitution:
.TP
.RB "The " NAME " ," SYMLINK " and " PROGRAM
fields support simple printf-like string substitution:
.TP
BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="OEM 0815", NAME="disk1"
# USB printer to be called lp_color
BUS="scsi", PROGRAM="/sbin/scsi_id", RESULT="OEM 0815", NAME="disk1"
# USB printer to be called lp_color
-BUS="usb", SYSFS_serial="W09090207101241330", NAME="lp_color"
+BUS="usb", SYSFS{serial}="W09090207101241330", NAME="lp_color"
# SCSI disk with a specific vendor and model number is to be called boot
# SCSI disk with a specific vendor and model number is to be called boot
-BUS="scsi", SYSFS_vendor="IBM", SYSFS_model="ST336", NAME="boot%n"
+BUS="scsi", SYSFS{vendor}="IBM", SYSFS{model}="ST336", NAME="boot%n"
# sound card with PCI bus id 00:0b.0 to be called dsp
BUS="pci", ID="00:0b.0", NAME="dsp"
# sound card with PCI bus id 00:0b.0 to be called dsp
BUS="pci", ID="00:0b.0", NAME="dsp"
KERNEL="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"
# multiple USB webcams with symlinks to be called webcam0, webcam1, ...
KERNEL="ttyUSB1", NAME="pda", SYMLINK="palmtop handheld"
# multiple USB webcams with symlinks to be called webcam0, webcam1, ...
-BUS="usb", SYSFS_model="XV3", NAME="video%n", SYMLINK="webcam%n"
+BUS="usb", SYSFS{model}="XV3", NAME="video%n", SYMLINK="webcam%n"
.fi
.P
Permissions and ownership for the created device files may specified at
.fi
.P
Permissions and ownership for the created device files may specified at
attributes along the device chain. Useful for for finding
unique attributes to compose a rule.
.RB Needs " -p " specified.
attributes along the device chain. Useful for for finding
unique attributes to compose a rule.
.RB Needs " -p " specified.
- printf(" SYSFS_%s=\"%s\"\n", attr->name, value);
+ printf(" SYSFS{%s}=\"%s\"\n", attr->name, value);