Wer an den USB Ports des Pi / eines USB Hubs z.B. ein 3G Modem oder einen WLAN-Adapter betreibt wird mitunter bemerkt haben, dass die Qualität der Verbindung, was Antwortzeiten und Datenübertragungsraten angeht, stark schwankt und mitunter abbricht. Ebenfalls haben manche User dann Probleme mit ihrer Tastatur, z.B. mit verschluckten Anschlägen, scheinbar hängenden Tasten, etc.
Vermutlich ist das ein Bug irgendwo im USB-Treiber des Pi, an dem aktuell eh gearbeitet wird. So lange gibt es aber einen einfach Workaround, nämlich die Deaktivierung der Netzwerkschnittstelle des Pi.
Manuelle Variante
Um diese manuell zu deaktivieren wechseln wir eben zum Benutzer root:
sudo su -
Nun gibt es zwei Kommandos, mit denen wir die Netzwerkschnittstelle deaktivieren (unbind) und wieder aktivieren (bind) können:
echo 1-1.1:1.0 > /sys/bus/usb/drivers/smsc95xx/unbind
echo 1-1.1:1.0 > /sys/bus/usb/drivers/smsc95xx/bind
Die Skriptvariante
Wer lieber ein fertiges Skript nutzen möchte, dem lege ich disable-ethernet von Robpol86 ans Herz:
#!/bin/bash
### BEGIN INIT INFO
# Provides: disable-ethernet
# Required-Start: $local_fs
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Disables on-board Ethernet to fix WiFi+Lapdock
# Description: When using the Raspberry Pi Model B on the
# Motorola Atrix Lapdock, inserting certain WiFi
# adapters into either the RPi's spare USB port or
# the Lapdock's USB ports causes the on-board
# Ethernet and WiFi adapter to malfunction.
# Disabling the on-board Ethernet driver allows
# the WiFi adapter to work simultaneously with the
# Lapdock.
### END INIT INFO
. /lib/lsb/init-functions
DEVICE_DIR=/sys/bus/usb/drivers/smsc95xx
BUS_ID="1-1.1:1.0"
INT_TOGGLE=true #issue ifdown and ifup?
#INT_TOGGLE=false
is_enabled () {
[ -L "$DEVICE_DIR/$BUS_ID" ] && return 0 || return 1
}
toggle_int () {
is_enabled || return 0 #ethernet not enabled
[ "$(ls -1 "$DEVICE_DIR/$BUS_ID/net" |wc -l)" -eq "1" ] || return 0 #something wrong
$INT_TOGGLE || return 0 #user doesn't want this
[ ! -f /run/network/ifstate ] && return 0 #run level S
int_name=$(ls -1 "$DEVICE_DIR/$BUS_ID/net")
if [ "$1" == "up" ]; then
log_action_begin_msg "Bringing on-board interface up"
ifup $int_name
else
log_action_begin_msg "Bringing on-board interface down"
ifdown $int_name
fi
log_action_end_msg $?
}
case "$1" in
start)
if ! is_enabled; then
log_failure_msg "Service already running. Exiting."
exit 0
fi
toggle_int down
log_action_begin_msg "Disabling on-board network interface"
echo "$BUS_ID" > $DEVICE_DIR/unbind
log_action_end_msg $?
exit $?
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
if is_enabled; then
log_failure_msg "Service not running. Exiting."
exit 0
fi
log_action_begin_msg "Enabling on-board network interface"
echo "$BUS_ID" > $DEVICE_DIR/bind
log_action_end_msg $?
toggle_int up
exit $?
;;
status)
if is_enabled; then
echo "Service is NOT running: on-board interface enabled" >&2
exit 1
else
echo "Service is running: on-board interface disabled"
exit 0
fi
;;
*)
echo "Usage: $0 start|stop|status" >&2
exit 3
;;
esacDieses Skript legen wir als /etc/init.d/disable-ethernet ab (als root pder mittels sudo). Anschließend machen wir es noch ausführbar:
sudo chmod 755 /etc/init.d/disable-ethernet
Um das Skript beim Booten automatisch auszuführen: sudo insserv disable-ethernet
Um die automatische Ausführung beim Booten zu deaktivieren: sudo insserv -r disable-ethernet
Um manuell die Netzwerkschnittstelle zu deaktivieren: sudo service disable-ethernet start
Um die Netzwerkschnittstelle zu reaktieren (WLAN-Adapter sollte vorher entfernt werden): sudo service disable-ethernet stop
Der Effekt
Bei mir hat die Deaktivierung der Netzwerkschnittstelle dafür gesorgt, dass Pings, selbst im internen Netz nicht mehr bis in den dreistelligen Millisekundenbereich dauerten, sondern intern wie extern konstant niedrig blieben.

5 Kommentare
Hallo Alexander,
Von pofoklempner -
Hallo Alexander,
das Programm funktioniert tadellos. Die Erkennung des USB-Sticks und das Laden der Firmware funktionieren so, wie man es erwartet. Warum trotzdem noch keine WLAN-Verbindung funktioniert, muss ich noch untersuchen. Gibt es eine Möglichkeit, dieses Programm auf weitere SD-Karten zu übertragen, ohne nochmals alle Fehler beim Eintippen zu machen.
MfG Pofoklempner
ist das in aktuellen
Von deepnight -
ist das in aktuellen versionen überhaupt noch nötig? also ich hab über w-lan kaum pings über 20ms egal ob LAN /bind oder /unbind ist. und man muss ja nich das script nehmen, die eine zeile bash command von oben reichen ;)
---
wer sich einbildet etwas zu sein, hat aufgehört etwas zu werden.
---
Ich bin mir nicht sicher, ob
Von Alexander Langer -
Ich bin mir nicht sicher, ob das Problem, dass hier umgangen werden soll, mit der aktuellen Firmware noch besteht. Mittlerweile habe ich umgerüstet und nutze keinen WLAN-Stick mehr, sondern habe einen Pi direkt neben Router und Switch liegen und darüber angeschlossen und der andere ist im Arbeitszimmer, das mittlerweile bei 500 Mbps DLAN + Switch versorgt wird.
Hallo,
Von pofoklempner -
Hallo,
ich wollte eigentlich nicht über Sinn oder Unsinn obigen Programms diskutieren, sondern nur wissen, wie ich ohne tippen das Programm auf SD-Karte 2-n bekomme. Da ich einen Lapdock benutze und dadurch mindestens 3 weitere USB-Schnittstellen am Raspi habe, ist so die sichere Funktionsweise erst einmal sicher gestellt. Von einer Lösung der USB-Probleme habe ich bisher nichts gelesen. Damit das funktioniert, hat Microsoft einige Jahre von Windows 95-XP gebraucht.
MfG Pofoklempner
Hallo,
Von pofoklempner -
Hallo,
nach Einspielung des Rasbian vom 18.09.12 startet der WLAN-Stick ohne Probleme, man muss natürlich unter Edit seine Netzwerkdaten eintragen und der Router muss unter DHCP laufen. Der Raspi schnappt sich die erste freie IP-Adresse.
MfG Pofoklempner