Skip to contentSkip to conversation

udev: persistent FireWire device names

PATCH In review Clemens Ladisch 2 participants 3 messages Jul 4, 2012 Kbuild

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 udev: persistent FireWire device names

---
 Makefile.am                        |    1 +
 rules/60-persistent-firewire.rules |   26 ++++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 0 deletions(-)
Makefile.am +1 -0
index 3b7ec0b..415fae6 100644
@@ -1510,6 +1510,7 @@ dist_udevrules_DATA += \
 	rules/60-persistent-input.rules \
 	rules/60-persistent-alsa.rules \
 	rules/60-persistent-storage.rules \
+	rules/60-persistent-firewire.rules \
 	rules/75-net-description.rules \
 	rules/75-tty-description.rules \
 	rules/78-sound-card.rules \
rules/60-persistent-firewire.rules new file +26 -0
new file mode 100644
index 0000000..2eb8cfe
@@ -0,0 +1,26 @@
+# do not edit this file, it will be overwritten on update
+
+ACTION="remove", GOTO="persistent_firewire_end"
+SUBSYSTEM!="firewire", GOTO="persistent_firewire_end"
+
+ATTR{is_local}="1", OPTIONS="link_priority=1"
+
+TEST="guid", SYMLINK+="firewire/by-id/guid-$attr{guid}"
+
+# Most devices have the model name in the root directory.
+TEST="vendor_name", TEST="model_name", \
+	OPTIONS="string_escape=replace", \
+	SYMLINK+="firewire/by-name/$attr{vendor_name} $attr{model_name}"
+# Some devices have the model name only in the first unit directory, so we have
+# to get the name from the corresponding subdevice.  (The detour through cat is
+# necessary because $attr does not allow substitutions in its file name.)
+TEST="vendor_name", TEST!="model_name", TEST="$kernel.0/model_name", \
+	PROGRAM="/bin/cat $sys$devpath/$kernel.0/model_name", \
+	OPTIONS="string_escape=replace", \
+	SYMLINK+="firewire/by-name/$attr{vendor_name} $result"
+# To make the preceding rule work when the subdevice is added after the parent
+# device, force a 'change' event to rerun that rule in this case.
+ACTION="add", DEVPATH="*/fw[0-9]*/fw[0-9]*.0", TEST="model_name", TEST!="../model_name", \
+	ATTR{../uevent}="change"
+
+LABEL="persistent_firewire_end"
#1 lore raw
Quoted 4 lines · Clemens Ladisch
---
 Makefile.am                        |    1 +
 rules/60-persistent-firewire.rules |   26 ++++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 0 deletions(-)

What is this useful for? Firewire is by definiton a hotplug bus, and application dealing with raw firewire nodes, need to manage that anyway. It's very much like USB, we don't do anything like that for USB either, because we require the apps to cope with the nature of the bus, and don't want them to expect predictable device nodes for the raw access.

There is no legacy to support for firewire, like we need to do for most other of the persistent stuff. So, what kind of problem would that solve, that isn't better solved at the application level?

Kay

#2 lore raw
In reply to Clemens Ladisch
Quoted 8 lines · Kay Sievers
Quoted 3 lines · Clemens Ladisch
 Makefile.am                        |    1 +
 rules/60-persistent-firewire.rules |   26 ++++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 0 deletions(-)

What is this useful for? Firewire is by definiton a hotplug bus, and application dealing with raw firewire nodes, need to manage that anyway.

Most normal applications indeed do this.

Quoted 2 lines

what kind of problem would that solve, that isn't better solved at the application level?

There are several testing and debugging tools where devices are selected not by their capabilities but by their identity. It would certainly be possible to add code to lookup devices by their GUID or name, but having udev create a bunch of symlinks is much simpler.

Regards,
Clemens