Frage zu "lsusb" in Verbindung mit mehreren Arduino Nano

  • Moin liebes Forum, ich habe ein Problem, wo ich zur Zeit nicht weiterkomme.


    Ausgangssituation: Ich habe an meinem QNAP TS453b Mini diverse USB Geräte angeschlossen.

    Unter anderem auch mehrere Arduino Nano's mit einem FTDI-Chip.


    Wenn ich nun lsusb eingebe, bekomme ich eine Liste aller USB Geräte, diese schaut wie folgt aus:



    Das Problem ist, dass alle Arduino's (Device-Nr: 006, 115 & 116) dieselbe vendor-id und product-id haben.


    Ich möchte gerne diese Geräte an meine VM (Virtualization Station) weiter reichen via Batch Script, dieses klappt aber nur, wenn die vendor-id & product-id einmalig ist!

    (hier habe ich beschrieben, wie ich diese weiter reiche an die VM: USB auto reconnect nach Neustart des NAS)


    Jedes mal, wenn ich einen der Arduino's vom NAS abziehe und neu wieder ranstecke, erhält der Arduino zwar dieselbe vendor- und product-id, jedoch wird die Device-Nr hochgezählt(?!).


    Meine Frage, habe ich eine andere Möglichkeit die Arduino's eindeutig zu identifizieren?

    Ist es möglich den Arduino's eine neue vendor-id oder product-id zu geben?


    Gruß

    Mathze

  • Hallo,


    führe mal aus:


    lsusb -v|grep -i serial


    zur "vendor Id" und "produckt id" kannst du die iSerial als zusätzliche Unterscheidung nutzen.

    die Option "serial" ist in dem FTDI Chip mit implementiert.


    Entweder mittels udevd und rules - damit device links mit festen Namen anlegen

    oder eventuell geht es schon mit deinen XML Dateien.


    mfg kasimodo

  • Moin Kasimodo, gute Idee, anbei die Ausgabe mit den "iSerial" Bezeichnungen.



    Meine .XML-Datei schaut wie folgt aus, diese ist jedoch Aufgrund des Mehrfachvorkommens nicht eindeutig, weswegen mein Command meckert und sagt, ich soll "adress" nutzen um das Gerät genau zu identifizieren.

    Code
         <hostdev mode='subsystem' type='usb'>
            <source startupPolicy='optional'>
            <vendor id='0x0403'/>
            <product id='0x6001'/>
            </source>
         </hostdev>


    Ich benutze nun den Command:

    Zitat

    virsh attach-device <Device_Name> <Datei.XML>


    Die Frage ist, kann der Command auch mit der iSerial was anfangen? Wenn ja, wie muss der Code in der .XML Datei aussehen?


    So evtl.?

    Code
         <hostdev mode='subsystem' type='usb'>
            <source startupPolicy='optional'>
            <vendor id='0x0403'/>
            <product id='0x6001'/>
            <serial id='A961HVNR'/>                
            </source>
         </hostdev>


    Gruß

    Mathze

    2 Mal editiert, zuletzt von t1me2die ()

  • wie der xml syntax ist, dies kann ich dir nicht beantworten. vielleicht hilft google.


    ich habe mal für Freunde das Problem bei mehreren Smargo(cardreader) gelöst indem ich über udevd und einer Rules jeden reader mit einem festen devicelink versehen habe.


    Das sieht dann so aus - für dein Problem:

    Code
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDEN97D", SYMLINK+="ttyFTDI0"
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A600b30P", SYMLINK+="ttyFTDI1"
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A600bexU", SYMLINK+="ttyFTDI2"
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTFMSA54", SYMLINK+="ttyFTDI3"
    SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTFMUW4A", SYMLINK+="ttyFTDI4"



    Alternativ müsste es so oder ähnlich auch über die XML Datei gehen.


    hier eine Kombination aus udev und xml:

    https://rolandtapken.de/blog/2…ices-libvirt-vms-update-1

    Würdest du mit diesem Eintrag für "source" weiterkommen?


    Code
         <source>
            <address bus='8' device='2'/>
          </source>

    Bus und device sind ja bekannt.


    Leider unterstützt mein altes NAS "Virtualization Station" nicht, sonst hätte ich es schon mal nachgestellt.

    3 Mal editiert, zuletzt von kasimodo ()

  • Moin kasimodo, recht herzlichen Dank für deinen Gedankenanstoß, über Nacht (bekomme ich bekanntlich die besten Ideen :sleeping: ) habe ich mich nun aber für einen anderen Weg entschieden.


    Zuerst lese ich alle Informationen zu den Arduino's in eine extra Datei:

    Code
    # read all Arduino Nano in a .txt file
    lsusb -d 0403:6001 >> /share/CACHEDEV1_DATA/VM/.qpkg/autorun/arduino.txt


    Nun laufe ich durch eine Schleife wo ich die eben erstellte Datei Zeile für Zeile abarbeite und dabei die benötigten .XML-Dateien erstelle.



    Nachdem ich durch bin, mounte ich die Geräte zu meiner VM durch.


    Code
    virsh attach-device 24104906-bb07-4558-89f6-fcede13817af /share/CACHEDEV1_DATA/VM/.qpkg/autorun/Arduino_Nano0.xml
    ...


    Man könnte das noch alles etwas dynamischer machen, aber es kommen bei mir nicht jeden Tag neue USB Geräte hinzu ^^


    Hier noch einmal mein ganzes Script, falls irgendjemanden vor einem ähnlichen Problem stehen sollte:




    Ansonsten sage ich erst einmal recht herzlichen Dank, toll das es so ein Forum gibt!


    Gruß

    Mathze