USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf)

Dieses Thema im Forum "Linux OS" wurde erstellt von tecci, 01.12.2011.

  1. #1 tecci, 01.12.2011
    Zuletzt bearbeitet: 01.12.2011
    tecci

    tecci Grünschnabel

    Dabei seit:
    09.04.2007
    Beiträge:
    8
    Zustimmungen:
    0
    Hallo.

    Ich habe eine USB Netzwerkkarte an einem Linux Router System. (LogiLink mit MosChio MCS 7830).
    OS ist Debian 6.
    System ist ein MSI Wind PC, den ich mit SSD ausgestattet habe, und als Server laufen lasse. Das Board hat leider nur eine NIC, und keinen PCI/PCIe Slot, so dass ich oben genannte USB NIC als WAN Port verwende.

    Leider ist es nun so, dass diese USB NIC einige Probleme hat. Sie hängt sich im Betrieb öfters mal auf.
    Selbst eine Neukonfiguration per ifconfig bringt nichts. Es kommen keine brauchbaren Daten mehr raus. Die Activity LED am Switch blinkt zwar, aber es kommt eben nichts mehr durch.

    Abhilfe kann nur geschaffen werden, indem ich entweder neu starte, oder die USB NIC vom USB abstecke und wieder anstecke, und dann per IFCONFIG neu konfiguriere.
    Eine Autoconfig per etc/network/interfaces ist ebenfalls nicht möglich. Da hängt es sich sofort auf. Bei Handkonfiguration im laufenden Betrieb klappt es eine Zeit, bis es irgendwann zu dem Fehler kommt.

    Einen Software-Reset bekomme ich derzeit nur wie folgt hin:
    Code:
    Modprobe -vr ehci_hcd
    modprobe -v ehci_hcd
    Aber das resettet mir dann gleich den USB komplett.
    Es fliegt dann auch der USB Stick mit /etc und /home aus dem System, und auch der UMTS Internetstick (der als Fallback Internetverbindung da ist)
    Tastatur, SD-Cardreader etc "fliegt auch kurz raus"

    /etc und /home habe ich mittlerweile schon so eingerichtet, dass es nur noch mit dem USB Stick synchronisiert wird, um das Problem zu entschärfen.

    Aber gibt es denn eine (sinnvolle) Möglichkeit, gezielt einzelne USB Geräte auf Shellebene zu resetten?
    In einem Beispiel, was ich sah, wurde es mit C relaisiert, das ist aber schon fast zu viel des guten.
    Ich will es eigentlich nur in mein Network Watchdog Bash Script einbauen (das macht z.B. automatisch Internet Reconnects), welches alle Minute per Cron aufgerufen wird.

    Viele Grüße


    Edit: Hier ist übrigens das C-Beispiel, habs nochmal gefunden.
    Ob es funktioniert, habe ich nicht probiert.
    Ist die USB.h eigentlich eine Standardbibliothek?
    Wenn es keine Möglichkeit gibt, einen Reset einzelner USB Ports/Geräte über ein BashScript zu realisieren, werde ich wohl oder übel C nehmen müssen.

    Code:
    #include <stdio.h>
    #include <usb.h>
    
    int main(void)
    {
          struct usb_bus *busses;
          usb_init();
          usb_find_busses();
          usb_find_devices();
          busses = usb_get_busses();
          struct usb_bus *bus;
          int c, i, a;
          /* ... */
          for (bus = busses; bus; bus = bus->next) {
            struct usb_device *dev;
            int val;
            usb_dev_handle *junk;
            for (dev = bus->devices; dev; dev = dev->next) {
              char buf[1024];
              junk = usb_open ( dev );
              usb_get_string_simple(junk,2,buf,1023);
              if ( junk == NULL ){
                printf("Can't open %p (%s)\n", dev, buf );
              } else {
                val = usb_reset(junk);
                printf( "reset %p %d (%s)\n", dev, val, buf );
              }
              usb_close(junk);
            }
          }
    }


    P.P.S.

    Ich habe irgendwo gelesen, man könnte die Spannungsversurgung einzelner USB Ports per Software abschalten und einschalten.
    Das kurze Unterbrechen der Spannungsversorgung wäre in meinem Fall auch Zielführend, wäre ja fast wie aus und wiedereinstecken.


    Grüße
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 faber38, 01.12.2011
    faber38

    faber38 Tripel-As

    Dabei seit:
    11.06.2006
    Beiträge:
    157
    Zustimmungen:
    0
    Ort:
    Elsdorf
  4. tecci

    tecci Grünschnabel

    Dabei seit:
    09.04.2007
    Beiträge:
    8
    Zustimmungen:
    0
    Hi.
    Danke für den Link.
    Zweichenzeitlich habe ich etwas gefunden, was für das aktuelle Problem als Lösung funktioniert:

    echo 0 > /sys/bus/usb/devices/1-3/authorized
    echo 1 > /sys/bus/usb/devices/1-3/authorized

    das 1-3 ist geräte/portspezifisch und muss in anderen fällen evtl angepasst werden.

    Ob es jetzt nur gerade bei meinem aktuellen Problem / Gerät hilft, oder ob es eine "universelle" Lösung ist, weiß ich nicht.


    Grüße
     
  5. #4 tecci, 01.12.2011
    Zuletzt bearbeitet: 01.12.2011
    tecci

    tecci Grünschnabel

    Dabei seit:
    09.04.2007
    Beiträge:
    8
    Zustimmungen:
    0
    Hmm, eine "universelle" Lösung schent es nicht zu sein.
    Es hat zwar bei dem Problem geholfen, aber auch nur 2 mal.
    Dann ist die Firmware des NIC Sticks komplett abgestürzt oder sowas.
    Selbst ein kompletter USB Reset via Modprobe half dann nicht mehr. Da musste ich dann wirklich nen "Hartreset" durch Abstecken machen.


    Vielleicht trete ich den dummen Logilink Netzwerkstick einfach in meine Bastelkiste und hol mir nen anderen von einem anderen Hersteller. Vielleicht laufen die dann besser.

    Edit:
    Habe jetzt einen Zwischenerfolg erzielt, indem ich auch noch den Powerlevel auf suspend gesetzt habe. Mal sehen, ob das zuverlässig hilft der es auch nur zufällig mal klappt.


    So, hier mal ein kleines Script, was scheinbar funktioniert. Mal sehen wie oft/zuverlässig.
    Ist momentan q+d hardcoded auf mein system. Wenns gut klappt mache ich es vielleicht dynamisch mit automatischer Suche des passenden USB Ports.

    Code:
    
    #!/bin/bash
    ifconfig eth1 down
    echo "USB NIC Reset"
    echo "Turning off"
    
    echo 0 > /sys/bus/usb/devices/1-3/authorized
    echo suspend > /sys/bus/usb/devices/1-3/power/level
    echo "Wait 5 Sec"
    sleep 5
    echo "Turning on"
    echo on > /sys/bus/usb/devices/1-3/power/level
    echo 1 > /sys/bus/usb/devices/1-3/authorized
    ifconfig eth1 192.168.222.222 netmask 255.255.255.0
    ifconfig eth1 up
    
     
    mfg
     
  6. tecci

    tecci Grünschnabel

    Dabei seit:
    09.04.2007
    Beiträge:
    8
    Zustimmungen:
    0
    Also langsam glaube ich echt an einen Hardwaredefekt.
    Das zuletzt gepostete Script, incl einiger weiterer Überarbeitungen (Spannung des Ports schon am Corehob im PC ausschalten, geht nach ähnlichem Prinzip)
    nützt zwar schon viel.
    Aber der Fehler, dass die USB NIC "Hängen bleibt" tritt immer noch auf, mit zunehmender Häufigkeit.
    Es bringt die Netzwerkkarte in 90% der Fälle wieder auf die Beine. Irgendwann hängt sich auch mal der Kernel-Treiber komplett auf, wenn die NIC mal wieder spinnt.
    Teilweise muss ich 3-4 mal hintereinander resetten, wobei dann gerne mal der Kernel ansich aussteigt, wenn ich das zeitlich ungünstig mache.

    Ich weiß echt nicht, was das sein könnte.
     
  7. #6 root1992, 05.12.2011
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Also ich hab mir vor kurzem ein USB-Gerät gebaut und hatte auch vermutlich einen ähnlichen Fehler. Wenn der µC (für USB) abgestürzt ist (wegen schlechter Lötstelle), dann hat das z.T. den Kernel aus dem Konzept gebracht. Bzw bis zu einem Timeout.

    Das ganze kann man sich auch schön über "dmesg" angucken. Meine externe Festplatte macht da, ab und zu, ganz ähnliche Probleme.

    Ich hatte auch das Problem, wenn mein HTC DHD dran war, dass dann die Festplatte ausgestiegen ist und der Kernel gewartet hat bis zum IO-Error. Abhilfe hat ein USB-Hub mit Netzteil gebracht. Vll. liegt es an der Spannungsversorgung (die USB NIC startet kurz neu, da die Spannung zusammen bricht und der Kernel merkt es nicht usw ...) Oder es kan auch wirklich eine HW-Fehler sein. Teste es doch mal unter einem anderen System?
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema: USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf)
Besucher kamen mit folgenden Suchen
  1. usb reset linux komplett debian

    ,
  2. debian reset usb device

    ,
  3. corehob

    ,
  4. linux usb geräte neu einlesen
Die Seite wird geladen...

USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf) - Ähnliche Themen

  1. Chromebit verwandelt Monitore und TV-Geräte in eine Chromebox

    Chromebit verwandelt Monitore und TV-Geräte in eine Chromebox: Der von Asus und Google entwickelte PC-Stick Chromebit CS10, der im Frühjahr erstmals vorgestellt wurde, wird nun ausgeliefert. Weiterlesen...
  2. OTRS 5 mit Optimierungen für Mobilgeräte

    OTRS 5 mit Optimierungen für Mobilgeräte: Die OTRS AG, Hersteller und Dienstleister für OTRS, hat Version 5.0 des Ticket- und Helpdesk-Systems OTRS publiziert. Neu sind unter anderem ein...
  3. AllSeen Alliance entwickelt Service-Framework zur Kontrolle von Smart-Home-Geräten

    AllSeen Alliance entwickelt Service-Framework zur Kontrolle von Smart-Home-Geräten: Die AllSeen Alliance, ein Projekt unter dem Dach der Linux Foundation, hat das »Home Appliances and Entertainment Service-Framework« angekündigt,...
  4. OTRS 5 Beta mit Optimierungen für Mobilgeräte

    OTRS 5 Beta mit Optimierungen für Mobilgeräte: Die OTRS AG, Hersteller und Dienstleister für OTRS, hat eine Betaversion der kommenden Version 5.0 des Ticket- und Helpdesk-Systems OTRS...
  5. Vielfalt der Android-Geräte steigt drastisch

    Vielfalt der Android-Geräte steigt drastisch: Nach einer aktuellen Statistik ist Android das Betriebssystem von über 24.000 unterschiedlichen Geräten von fast 1300 Herstellern. Der Markt für...