<html><body>
<p><tt>devkit-devel-bounces@lists.freedesktop.org wrote on 06/03/2009 09:39:22 AM:<br>
<br>
&gt; Hello Dan,<br>
&gt; <br>
&gt; Dan Streetman [2009-06-01 12:13 -0400]:<br>
&gt; &gt; I am creating udev rules for some system units I'm responsible for<br>
&gt; &gt; enabling Linux on; specifically these systems have multiple serial<br>
&gt; &gt; ports with labels on the ports like &quot;A&quot;, &quot;B&quot;, &quot;C&quot;, etc. &nbsp;However on<br>
&gt; &gt; many of the units the hardware doesn't match the labelling so ports<br>
&gt; &gt; &quot;C&quot; and above usually do not match the right serial node, i.e. while a<br>
&gt; &gt; port labeled &quot;C&quot; should be /dev/ttyS2 it isn't.<br>
&gt; <br>
&gt; This is just a general property of current Linux, which is pretty much<br>
&gt; fully &quot;hotplug&quot; based. You cant't rely at all on any particular device<br>
&gt; ordering in general.</tt><br>
<br>
<tt>Well that is the problem, isn't it? &nbsp;With serial ports there is absolutely nothing to go on to tell what physical port it is except for numbering. &nbsp;The application cannot probe a serial port to tell what's connected.</tt><br>
<br>
<tt>&gt; Distributions special-case some device classes<br>
&gt; such as network devices where (for historical reasons) eth0 must<br>
&gt; always be the same device. E. g. Ubuntu's installer creates a file<br>
&gt; /etc/udev/rules.d/70-persistent-net.rules &nbsp;which looks like<br>
&gt; <br>
&gt; # PCI device 0x14e4:0x1600 (tg3)<br>
&gt; SUBSYSTEM==&quot;net&quot;, ACTION==&quot;add&quot;, DRIVERS==&quot;?*&quot;, ATTR{address}==&quot;00:<br>
&gt; 1c:23:14:1c:2a&quot;, ATTR{type}==&quot;1&quot;, KERNEL==&quot;eth*&quot;, NAME=&quot;eth0&quot;<br>
&gt; <br>
&gt; You can apply a similar &quot;persistent naming&quot; rule on your system.<br>
</tt><br>
<tt>Well, I don't think this will work as the problem isn't consistent naming - serial ports are not added/removed and so there is no danger of inconsistent numbering, the ports are always numbered exactly the same - the problem is they are numbered wrong, i.e. not matching the labeling on the physical system.</tt><br>
<br>
<tt>I could create permanent &quot;persistent naming&quot; rules such as the above one to correctly number the ports, but I don't think that is what you mean - you mean I should create a dynamic rule to create those persistent naming rules on-the-fly as serial ports are (first) detected. &nbsp;That is what you mean right?</tt><br>
<br>
<tt>Also to clarify, I'm not looking to create a rule for just my system - I am trying to create a permanent rule that I can upstream into a common repository that all distributions can draw from so the various quirks on these systems can be correctly handled by all distributions. </tt><br>
<tt><br>
&gt; &gt; Anyway, my question is, is udev-extras the appropriate place for this<br>
&gt; &gt; to live?<br>
&gt; <br>
&gt; I'm afraid not. Programs need to be fixed to not rely on a particular<br>
&gt; device name instead.<br>
</tt><br>
<tt>With serial ports? &nbsp;How can an application not rely on the serial port number? &nbsp;For other types of interfaces, USB devices, ethernet interfaces, displays, whatever - I can understand that. &nbsp;But ever since serial ports were invented, the port number is the one and only thing the application can use. &nbsp;Right?</tt><br>
<br>
<tt>&gt; <br>
&gt; &gt; DEVPATH==&quot;/devices/pci0000:00/0000:00:13.1/0000:04:0b.1/tty/<br>
&gt; ttyS2&quot;, NAME=&quot;ttyS6&quot;<br>
&gt; <br>
&gt; This really looks wrong. Since the initial naming isn't stable, the<br>
&gt; mapping isn't either. You need to identify a particular device on<br>
&gt; stable properties such as device names, serial numbers, or other<br>
&gt; constant properties.</tt><br>
<br>
<tt>For PCI-card based serial ports, there are no other device properties besides the PCI address and kernel-assigned name. &nbsp;Or do you know of any other properties I can key off of? &nbsp;I checked with &quot;udevadm info -q all -n /dev/ttyS2&quot; for example and only DEVPATH and the simple name were defined.</tt><br>
<br>
<tt>I'm more than willing to key off a hardware-specific constant key, but I don't think a PCI serial port has any, besides the specific PCI connectivity. &nbsp;And even then, the entire PCI add-in card has a common PCI address/path, so I don't see any way to distinguish each individual port on the PCI serial card besides the port name...?</tt><br>
<br>
<tt>&gt; <br>
&gt; Martin<br>
&gt; <br>
&gt; -- <br>
&gt; Martin Pitt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| <a href="http://www.piware.de">http://www.piware.de</a><br>
&gt; Ubuntu Developer (www.ubuntu.com) &nbsp;| Debian Developer &nbsp;(www.debian.org)<br>
&gt; _______________________________________________<br>
&gt; devkit-devel mailing list<br>
&gt; devkit-devel@lists.freedesktop.org<br>
&gt; <a href="http://lists.freedesktop.org/mailman/listinfo/devkit-devel">http://lists.freedesktop.org/mailman/listinfo/devkit-devel</a><br>
</tt></body></html>