[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: UDEV identical devices. How to?



  If you're set on using udev, it should be possible to find the 
devices under /sys somewhere (/sys/bus/pci/...), and query them
for udev-sensitive attributes using udevinfo (or the appropriate
udevadm commands), until you find something that differs between
the two.  Udev certainly can create device nodes, but I am not
an expert on that part.

  But, you may find it simpler to just create static devices.  It used
to be possible to create static devices in /lib/udev/devices -- at
boot-time, the device tree at that location gets copied over to
/dev, and after that, udev runs and does all the magic to create
the dynamic devices.  If you know the right major and minor numbers,
and if they're consistent across reboots, and if there are no
conflicting udev devices, then the right mkdev should work.
It won't appear in /dev until reboot, but the /lib/udev/devices
entries will persist across reboots.

  This is still true in the 2.6.32 kernels ("squeeze"), but 
may not be true in the 3.0 series.

> Good day to all
> 
> I am not sure which list this quistions should be send to so some
> overkill maybe.
> 
> We have Debian 2.6.32 and DVB cards with two/four tunners on the each
> card. We want to assign specific number in /dev/dvb/ tree for each tuner.
> 
> The problems is that from udev point of view those devices(tuners) are
> absolutely equal(udefinfo gives absolutely identical output), because
> tuners are placed in one dvb card.
> 
> We'v googled and found that theoretically we can assign numbers in
> specific order with using ENV options in udev rules.
> 
> Here is a working example which creates symlinks:
> # Create a symlinks for both tuners of Kworld device
> SUBSYSTEM=="dvb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="e399",
> ENV{kworld}!="two", ENV{kworld}="two", PROGRAM="/bin/sh -c 'K=%k;
> K=$${K#dvb}; printf dvb/adapter_kw1/%%s $${K#*.}'", SYMLINK+="%c"
> SUBSYSTEM=="dvb", ATTRS{idVendor}=="1b80", ATTRS{idProduct}=="e399",
> ENV{kworld}=="two", ENV{kworld}="one", PROGRAM="/bin/sh -c 'K=%k;
> K=$${K#dvb}; printf dvb/adapter_kw2/%%s $${K#*.}'", SYMLINK+="%c"
> 
> But we do want devices instead of symlinks, like e.g. /dev/dvb/adapterX
> 
> We'v tried such rules, but has no luck:
> 
> SUBSYSTEM=="dvb", KERNELS=="0000:04:00.0", ENV{kworld}!="two",
> ENV{kworld}="one", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf
> dvb/adapter1/%%s $${K#*.}'", NAME="%c", GROUP="video"
> SUBSYSTEM=="dvb", KERNELS=="0000:04:00.0", ENV{kworld}=="two",
> ENV{kworld}="one", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf
> dvb/adapter2/%%s $${K#*.}'", NAME="%c", GROUP="video"
> 
> Can someone give an advice how to properly construct rules to assign
> devices. It woul be great with an example string :)
> Mb we missing some global udev option to enable such constructions?
> 
> Tnx in advance.
--
Andrew Reid / reidac@bellatlantic.net


Reply to: