Since udev can match attributes from the lowest device
level (ie the driver (ftdi_sio) ) or one level up the
parent chain (so, say, generic USB at once point or even
up to the PCI bus the USB connects to), you will also want
to include the parent devices. To do this, include the
"--attribute-walk" option when you run the udevadm query.
See the attached udevadm output for a sample when I run
"udevadm info -q all --attribute-walk" against my UVC
webcam. Note that there are a number of "parent devices"
that are more generic, such as the USB host controller in
my PC. See
http://reactivated.net/writing_udev_rules.html#udevinfo for
the rules about using multiple parent devices when
matching attributes in your udev rules. The short of it is
that you have to pick a single parent device to match
against.
Now, to address your earlier difficulty with the
modification to that rule. I don't have an FTDI device
handy, so I may be wrong, but is the serial you are trying
to match actually on the same "parent device" as the
idVendor attribute you are also matching against? If it's
on a different parent device, that would be the source of
the problem. If you aren't sure about it from the output
(or if it looks correct), post the output of udevadm that
you had above, but including the "--attribute-walk" option
as well and I'll see if I spot anything weird.
Though, thinking about it, I think the serial attribute
would have to be on whatever device got selected by
"idVendor" for me to include it later on in the %s{serial}
bit in my symlink... Is it actually called "idSerial" or
"serial" in the output from adding "--attribute-walk"?