Deaktivierung der Netzwerkschnittstelle

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
        ;;
esac

Dieses 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.

 

Tags: 

5 Kommentare

Bild des Benutzers pofoklempner

Hallo Alexander,

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

Bild des Benutzers deepnight

ist das in aktuellen

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.

---

Bild des Benutzers pofoklempner

Hallo,

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

Bild des Benutzers pofoklempner

Hallo,

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