Good to Know Database

Raspbian Wheezy: USB-Port am Raspberry Pi zurücksetzen


Es gibt einige USB-Geräte die am Raspberry Pi gelegentlich die Verbindung verlieren. Nachdem man das USB-Gerät kurz vom Raspberry Pi getrennt und wieder angeschlossen hat, funktioniert dieses in der Regel wieder für eine gewisse Zeit. Damit man nicht ständig das USB-Gerät abstecken muss, kann man auch das folgende Programm verwenden. Dieses erzwingt einen Portreset vom Linux USB-Stack und eine anschließende Hardwareerkennung. Der folgende Quellcode wurde von Alan Stern unter http://marc.info/?l=linux-usb&m=121459435621262 veröffentlicht. Die nachfolgende Anleitung soll Ihnen zeigen wie Sie den Quellcode kompilieren und das Programm einsetzen.

Erstellen Sie eine neue Datei mit dem Namen usbreset.c.

pi@raspberrypi ~ $ vi usbreset.c

Fügen Sie in diese Datei den folgenden Quellcode ein.

/* usbreset -- send a USB port reset to a USB device */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>

int main(int argc,char **argv)
{
  const char *filename;
  int fd;
  int rc;

  if(argc != 2)
  {
    fprintf(stderr,"Usage: usbreset device-filename\n");
    return 1;
  }

  filename = argv[1];

  fd = open(filename,O_WRONLY);
  if(fd < 0)
  {
    perror("Error opening output file");
    return 1;
  }

  printf("Resetting USB device %s\n",filename);

  rc = ioctl(fd,USBDEVFS_RESET,0);
  if(rc < 0)
  {
    perror("Error in ioctl");
    return 1;
  }

  printf("Reset successful\n");

  close(fd);
  return 0;
}

Nachdem Sie die Datei gespeichert haben, können Sie den Quellcode mit gcc kompilieren.

pi@raspberrypi ~ $ gcc usbreset.c -o usbreset

Verschieben Sie jetzt das erzeugte Binary in das Verzeichnis /usr/local/sbin.

pi@raspberrypi ~ $ sudo mv usbreset /usr/local/sbin/

Als nächstes sollten Sie den Eigentümer der Programmdatei und die Zugriffsrechte wie folgt anpassen.

pi@raspberrypi ~ $ sudo chown root:root /usr/local/sbin/usbreset
pi@raspberrypi ~ $ sudo chmod 0755 /usr/local/sbin/usbreset

Beim Aufruf von usbreset müssen Sie nur den USB-Port angeben, an welchem das USB-Gerät angeschlossen ist.

pi@raspberrypi ~ $ sudo usbreset /dev/bus/usb/001/006
Resetting USB device /dev/bus/usb/001/006
Reset successful


Dieser Eintrag wurde am 27.08.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2304.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer