[Linux] Identificatie van meerdere USB devices op 1 systeem

Pagina: 1
Acties:

  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
Ben op het moment bezig om verschillende USB webcams in embedded Linux aan de praat te krijgen. Tot zover werkt alles lekker en het grabben van beelden gaat zonder probleem.

Nu stuit ik op een probleem bij het gebruik van meerdere, bijv. 8 of 16, webcams tegelijk op hetzelfde systeem. Bij het grabben wil ik zeker weten dat ik de juiste webcam aanspreek. De devicenummers (/dev/videoX) zijn niet gebonden aan een specifieke webcam maar kunnen bij het booten willlekeurig worden uitgedeeld. Het gaat in mijn geval om webcams die zijn gebaseerd op de Omnivsion chipset (OV511/OV518).

Is er een workaround zodat je zeker bent dat je de juiste webcam aanspreekt ook na een hotswap of reboot? Is het mogelijk het seriernummer van de webcams te gebruiken?

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 12:26

BoAC

Memento mori

Het is mogelijk om data op te slaan in de webcam (Ik gebruikte de philips tucam) in een eeprom.
Je zou dus elke webcam een nummer kunnen geven en deze dan uitlezen bij het aansluiten van de webcam.
Welke driver gebruik je nu?

Ik gebruikte de PWC-driver. In deze driver kwam ik daarvoor functies tegen.
Weet niet of dat met jouw cams kan ;)

[ Voor 28% gewijzigd door BoAC op 05-01-2004 21:53 ]


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
BoAC schreef op 05 januari 2004 @ 21:50:
Welke driver gebruik je nu?
Ik gebruik de OVCam drivers van http://alpha.dyndns.org/ov511/ in het geval van een ov511 webcam. Voor een ov518 camera gebruik ik een extra ov518 decompressiemodule.

Hoe zagen die functies eruit waar jij het over hebt? Dan zal ik morgen eens wat dieper in de broncode kijken.

[ Voor 17% gewijzigd door Dr. Malsain op 05-01-2004 21:58 ]


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 12:26

BoAC

Memento mori

Dr. Malsain schreef op 05 januari 2004 @ 21:54:
[...]


Ik gebruik de OVCam drivers van http://alpha.dyndns.org/ov511/ in het geval van een ov511 webcam. Voor een ov518 camera gebruik ik een extra ov518 decompressiemodule.

Hoe zagen die functies eruit waar jij het over hebt? Dan zal ik morgen eens wat dieper in de broncode kijken.
Ik gebruikte de PWC driver en deze ondersteunt jouw chip niet als ik het goed zie..
Linkje naar de betreffende API-call

[ Voor 10% gewijzigd door BoAC op 05-01-2004 22:06 ]


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Kan je geen unieke info uit /sys/bus/usb/devices/ halen? (met je wel sysfs hebben natuurlijk)

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
ajvdvegt schreef op 05 januari 2004 @ 22:27:
Kan je geen unieke info uit /sys/bus/usb/devices/ halen? (met je wel sysfs hebben natuurlijk)
Aangezien er op een embedded systeem wordt gewerkt is er geen sysfs aanwezig om het geheel zo compact mogelijk te houden . Wanneer het probleem alleen is op te lossen via sysfs dan is het te overwegen in het systeem op te nemen.

Ik dacht aan een universele oplossing aangezien dit probleem vaker voorkomt. Stel je voor dat je aan een systeem meerdere printers hebt hangen van hetzelfde type maar met verschillende soorten papier. Dan wil je er zeker van zijn dat je de juiste printer gebruikt.

  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
BoAC schreef op 05 januari 2004 @ 22:05:
[...]

Ik gebruikte de PWC driver en deze ondersteunt jouw chip niet als ik het goed zie..
Linkje naar de betreffende API-call
Als ik het goed lees, kun je met deze functie (VIDIOCPWCSUSER) de huidige eigenschappen als brightness, contract e.d. naar de EEPROM schrijven. In plaats van de eigenschappen schrijf je dan een eigen waarde neem ik aan. Heeft dit geen gevolgen voor de werking van de camera of worden de "user defined settings" alleen gerestored met VIDIOCPWCRUSER?

Op welke manier kun je daarna de ID van de camera terug lezen, lees je dan uit een bepaald register van de camera?

  • igmar
  • Registratie: April 2000
  • Laatst online: 31-01 23:50

igmar

ISO20022

Dr. Malsain schreef op 05 januari 2004 @ 21:47:
Nu stuit ik op een probleem bij het gebruik van meerdere, bijv. 8 of 16, webcams tegelijk op hetzelfde systeem. Bij het grabben wil ik zeker weten dat ik de juiste webcam aanspreek. De devicenummers (/dev/videoX) zijn niet gebonden aan een specifieke webcam maar kunnen bij het booten willlekeurig worden uitgedeeld.
Zover ik weet worden devices toegekent in de volgorde waarop het systeem ze op de bus tegenkomt, en de volgorde waarin de drivers worden uitgevoerd. 'ramdom' lijkt me omwaarschijnlijk, tenzij de bus ook 'random' is naar elke reboot.
Het gaat in mijn geval om webcams die zijn gebaseerd op de Omnivsion chipset (OV511/OV518).

Is er een workaround zodat je zeker bent dat je de juiste webcam aanspreekt ook na een hotswap of reboot? Is het mogelijk het seriernummer van de webcams te gebruiken?
De oplossing is afhankelijk van wat de oorzaak is dat de devices steeds in een andere volgorde worden gezien.

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

Ik dacht dat udev het systeem was wat precies daarvoor zorgde? udev, waarbij de u staat voor userspace moet juist in userspace zodat er een databaseje aangelegd kan worden, waarin de identificatie van alle devices wordt opgeslagen, zodat een device elke keer dezelfde naam krijgt.

Dat begreep ik er tenminste van, na er wat over gelezen te hebben. Zal eens even het betreffende document opzoeken...

edit:
deze link bedoelde ik, en na het nog eens gelezen te hebben denk ik dat dit inderdaad de manier is om het voor elkaar te krijgen. Udev is alleen nog wel redelijk experimenteel, en heeft nog een paar andere nadelen, dus veel mensen kiezen toch nog voor devfs.

[ Voor 32% gewijzigd door smokalot op 06-01-2004 12:10 ]

It sounds like it could be either bad hardware or software


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
smokalot schreef op 06 januari 2004 @ 11:59:
deze link bedoelde ik, en na het nog eens gelezen te hebben denk ik dat dit inderdaad de manier is om het voor elkaar te krijgen. Udev is alleen nog wel redelijk experimenteel, en heeft nog een paar andere nadelen, dus veel mensen kiezen toch nog voor devfs.
Bedankt voor de link. Ik zal dit morgen even doorlezen. Het is vooral belangrijk dat het te gebruiken is zonder te veel aanpassingen te maken op het huidige systeem. Dus zo weinig mogelijk libraries, modules e.d. toevoegen.

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 12:26

BoAC

Memento mori

Ik heb de code van pwc ff doorgekeken. Het is mogelijk om bij camera's waarvoor deze driver wordt gebruikt het serienummer uit te lezen. Deze is alleen niet op te vragen van de driver. Hiervoor zou dus een API voor moeten worden gemaakt. Zoek in de driver maar naar serial.
Heb hetzelfde niet kunnen vinden in de driver die jij gebruikt.

Udev maakt als ik het goed heb gezien/gelezen ook gebruik van serial-numbers bij het voorbeeld uit de documentatie waarbij usb HP printers worden gebruikt.
Correct me if I'm wrong ;)

  • smokalot
  • Registratie: Juni 2001
  • Laatst online: 15-01 22:00

smokalot

titel onder

Volgens mij is sysfs echter ook nodig voor udev, dus dan is udev niet eens noodzakelijk. Je zou ook een scriptje kunnen schrijven wat bv symlinks maakt naar de devices, afhankelijk van de serienummers die je dus uit /sys afleest. Zoiets doet udev ook voor zover ik begrijp, maar dan uitgebreider.

Ben trouwens wel benieuwd wat voor embedded systeem het is? wat voor hardware? en gebruik je devfs, of statische /dev?

It sounds like it could be either bad hardware or software


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
smokalot schreef op 06 januari 2004 @ 19:51:
Volgens mij is sysfs echter ook nodig voor udev, dus dan is udev niet eens noodzakelijk. Je zou ook een scriptje kunnen schrijven wat bv symlinks maakt naar de devices, afhankelijk van de serienummers die je dus uit /sys afleest. Zoiets doet udev ook voor zover ik begrijp, maar dan uitgebreider.

Ben trouwens wel benieuwd wat voor embedded systeem het is? wat voor hardware? en gebruik je devfs, of statische /dev?
Je zou het kunnen zien als een "single board computer" (SBC) (http://www.cer.com/pages/products/prod_detail.php?prod_id=11) met seriële poortjes, ethernet, vga, toetsenbord, muis en USB. Hierop draait een uitgeklede ELinOS versie met BusyBox. Er wordt een statische device systeem gebruikt. Door gebruik te maken van een script-engine kan de gebruiker naar zijn eigen wil configureren en inputs aan outputs koppelen.

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 12:26

BoAC

Memento mori

Dr. Malsain schreef op 07 januari 2004 @ 13:28:
[...]


Je zou het kunnen zien als een "single board computer" (SBC) (http://www.cer.com/pages/products/prod_detail.php?prod_id=11) met seriële poortjes, ethernet, vga, toetsenbord, muisaansluitingen. Hierop draait een uitgeklede ELinOS versie met BusyBox. Er wordt een statische device systeem gebruikt. Door gebruik te maken van een script-engine kan de gebruiker naar zijn eigen wil configureren en inputs aan outpust koppelen.
Ik kan alleen geen usb vinden. Ligt dat aan mij of gebruik je een ander type?
En waarom gebruik je geen devfs? Die zie ik staan in de features van ELinOS ;)

[ Voor 8% gewijzigd door BoAC op 07-01-2004 13:34 ]


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
USB staat nog niet in de lijst van features omdat we daar nog aan bezig zijn. Zal misschien bij een nieuwe productrelease wel in de lijst komen te staan.

Uiteraard zijn alleen de onderdelen gebruikt in onze kernel die echt nodig zijn. Als later blijkt dat er iets mist moet de kernel ff opnieuw wordel gecompileerd inclusief de toevoeding. Daarna wordt de hele mikmak opnieuw geflashed naar de flashcard waar alles op staat.

[ Voor 48% gewijzigd door Dr. Malsain op 07-01-2004 13:38 ]


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 12:26

BoAC

Memento mori

Heb hier ff met mijn 2 philips-camera's gespeeld:
Wanneer ik deze in mijn usb plugde had ik bij de informatie van /proc/bus/usb/devices 2 serial-numbers erbij: 01690000C1C50201 en RS10000B0070000

Het lijkt mij sterk dat jouw camera's hierin geen serial-number weergeven ;)
Of maak je ook geen gebruik van /proc. Kost in ieder geval geen ruimte ;)

Hier nog ff de output daarvan ;) :
Device 3
code:
1
2
3
4
5
6
7
8
9
10
T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0471 ProdID=0311 Rev= 0.03
S:  SerialNumber=01690000C1C50201
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=82(I) Atr=03(Int.) MxPS=   1 Ivl=32ms
E:  Ad=85(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms

Veel blabla

Device 2
code:
1
2
3
4
5
6
7
8
9
10
T:  Bus=04 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0471 ProdID=0311 Rev= 0.01
S:  SerialNumber= RS10000B0070000
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=ff Prot=00 Driver=(none)
E:  Ad=82(I) Atr=03(Int.) MxPS=   1 Ivl=100ms
E:  Ad=85(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms

Veel blabla

Hingen allebij aan dezelfde hub trouwens.

[ Voor 64% gewijzigd door BoAC op 07-01-2004 14:03 . Reden: Ingekort ]


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
BoAC schreef op 07 januari 2004 @ 14:02:
Heb hier ff met mijn 2 philips-camera's gespeeld:
Wanneer ik deze in mijn usb plugde had ik bij de informatie van /proc/bus/usb/devices 2 serial-numbers erbij: 01690000C1C50201 en RS10000B0070000

Het lijkt mij sterk dat jouw camera's hierin geen serial-number weergeven ;)
Of maak je ook geen gebruik van /proc. Kost in ieder geval geen ruimte ;)

Hier nog ff de output daarvan ;) :
[]
In "/proc/bus/usb/devices" heb ik al eerder gekeken voor het serienummer. Bij de ene webcam die wel werkt en door een driver wordt ondersteund krijg ik geen serienummer maar de naam van de fabrikant "Omnivision ... etc". Waarschijnlijk wordt het serienummer vervangen door leesbare tekst door de driver.

Bij de webcam die niet werkt wordt naast de Vendor ID (471) en Product ID (313) ook het serienummer weegegeven. In mijn Mandrake testbak bestaat "/proc/bus/usb/devices" wel maar op het embedded systeem is dat niet te vinden ondanks dat USB en /proc beide zijn enabled. Nog even wat uitzoekwerk denk ik.

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Dr. Malsain schreef op 07 januari 2004 @ 17:24:
Bij de webcam die niet werkt wordt naast de Vendor ID (471) en Product ID (313) ook het serienummer weegegeven. In mijn Mandrake testbak bestaat "/proc/bus/usb/devices" wel maar op het embedded systeem is dat niet te vinden ondanks dat USB en /proc beide zijn enabled. Nog even wat uitzoekwerk denk ik.
/proc/bus/usb is waar je usbfs mount. Dat moet je apart aanzetten in de kernel, dat staat onder 'USB support':
code:
1
[*]   Preliminary USB device filesystem


Dan nog een regeltje toevoegen aan /etc/fstab:
code:
1
usbfs    /proc/bus/usb    usbfs    defaults    0 0

"He took a duck in the face at two hundred and fifty knots."


  • imdos
  • Registratie: Maart 2000
  • Laatst online: 10:39

imdos

I use FreeNAS and Ubuntu

is usbfs ook gemount :?
code:
1
usbfs /proc/bus/usb usbfs rw 0 0

pvoutput. Waarom makkelijk doen, als het ook moeilijk kan! Every solution has a new problem


  • Dr. Malsain
  • Registratie: Juli 2002
  • Laatst online: 14-02-2023
_Squatt_ schreef op 07 januari 2004 @ 17:52:
[...]

/proc/bus/usb is waar je usbfs mount. Dat moet je apart aanzetten in de kernel, dat staat onder 'USB support':
code:
1
[*]   Preliminary USB device filesystem


Dan nog een regeltje toevoegen aan /etc/fstab:
code:
1
usbfs    /proc/bus/usb    usbfs    defaults    0 0
"Preliminary USB device filesystem" staat idd aan. Ik zal de tweede stap proberen handmatig toe te voegen.
Pagina: 1