Website-Icon .: blog cscholz.io :.

RT5370 USB WLAN Stick unter Debian 8

Wie im Artikel Projekt: Linux Router mit Fitlet XA-10 bauen beschrieben, betreibe ich seit etwas mehr als 2 Monaten einen WLAN Router mit einem USB RT5370 WLAN Dongle. Im Laufe dieser zwei Monate habe ich folgendem Fehlermeldungen im syslog festgestellt, wobei ich noch nicht für jede Meldunge eine Lösung gefunden habe.

Warning – TX queue 2 DMA timed out, invoke forced forced reset

Dieser Fehlermeldung scheint mit der Aktivierung von 802.11n zusammen zu hängen, wie in folgendem OpenWRT Ticket zu lesen ist.

Warning – TX status timeout for entry" and "Got TX status for an empty queue

Die Fehlermeldung scheint bis Kernel 4.1 noch nicht behoben zu sein, wie aus folgendem Bug-Report hervorgeht.

Warning – TX HW queue 0 timed out, invoke forced kick

Hierzu habe ich nicht wirklich viel gefunden, außer folgenden Beitrag.

Warning – Data pending for entry ? in queue ?

Im Eventlog taucht mehrfach die in der Überschrift genannte Fehlermeldung auf. Die Anzahl dieser Meldungen konnte ich durch das aktualisieren des Treibers sowie der Deaktivierung der Hardwareverschlüsselung reduzieren.

Treiber aktualisieren

Das Paket firmware-ralink liefert für den RT5370 die notwendigern Treiber um diesen zu betreiben. Aus der Beschreibung des Paketes geht jervor, dass der mitgliefert Treiber (rt2870.bin) in der Version 0.29 vorliegt. Diese Information kann man übrigens auch auch dem syslog entnehmen:

ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
rt2800usb 3-1.1:1.0: firmware: direct-loading firmware rt2870.bin
ieee80211 phy0: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29

Vom Hersteller selber gibt es auch ein Treiberpaket, welches aus dem Jahr 2013 stammt. Auch wenn dieses Treiberpaket selber mittlerweile schon mehr als 2 Jahre alt ist, enthält es dennoch einen neue Version des Treibers (rt2870.bin) in der Version 0.33. Leider ist der Changelog für zwischen Version 0.29 bis 0.33 unvollständig.

Um diesen Treiber zu verwenden reicht es den alten Treiber zu entladen, sich das Treiberpaket herunterzuladen, zu entpacken und die Datei rt2870.bin auszutauschen.

rmmod rt2800usb

cd /usr
wget wget http://www.mediatek.com/AmazonS3/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
bunzip2 DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
tar xfv DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar
cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/mcu/bin/
cp rt2870.bin /lib/firmware/rt2870.bin

modprobe rt2800usb

Anschließend ist im syslog zu sehen, dass der neue Treiber geladen wurde.

ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
rt2800usb 3-1.1:1.0: firmware: direct-loading firmware rt2870.bin ieee80211 phy0:
rt2x00lib_request_firmware: Info - Firmware detected - version: 0.33

Hardwareverschlüsselung deaktivieren

Die Hardwareverschlüsselung kann entwender testweise oder dauerhaft deaktiviert werden. Testweise emfpiehlt sich, um Performance Probleme vor der dauerhaften Aktivierung zu identifizieren, da eine Abschaltung der Hardwareverschlüsselung die CPU Last erhöht.

rmmod rt2800usb
modprobe rt2800usb  nohwcrypt=1

Um das ganze dauerhaft zu aktivieren, wird die Einstellung in eine Konfig-Datei geschrieben

echo 'options rt2800usb nohwcrypt=1' > /etc/modprobe.d/rt2800usb.conf

Module Parameter kontrollieren

Wer sicherstellen möchte, dass nach der permanenten Aktivierung das Module mit der option nohwcrypt correct geladen wurde, kann sich die Modul Optionen auflisten lassen. Dort sollte dann eine entsprechender Eintrag vorhanden sein.

$ systool -vm rt2800usb
Module = "rt2800usb"

  Attributes:
    coresize            = "28672"
    initsize            = "0"
    initstate           = "live"
    refcnt              = "0"
    srcversion          = "10BE053D7391DE77EB2FD99"
    taint               = ""
    uevent              = <store method only>
    version             = "2.3.0"

  Parameters:
    nohwcrypt           = "Y"

  Sections:
    .bss                = "0xffffffffa0427740"
    .data               = "0xffffffffa0425000"
    .exit.text          = "0xffffffffa042348b"
    .gnu.linkonce.this_module= "0xffffffffa04273c0"
    .init.text          = "0xffffffffa0455000"
    .note.gnu.build-id  = "0xffffffffa0424000"
    .rodata             = "0xffffffffa0424340"
    .rodata.str1.1      = "0xffffffffa0424024"
    .rodata.str1.8      = "0xffffffffa0424040"
    .smp_locks          = "0xffffffffa0424314"
    .strtab             = "0xffffffffa0458a90"
    .symtab             = "0xffffffffa0456000"
    .text               = "0xffffffffa0422000"
    __bug_table         = "0xffffffffa0424320"
    __mcount_loc        = "0xffffffffa04249d8"
    __param             = "0xffffffffa04249b0"
    __verbose           = "0xffffffffa0427320"

Hostapd ht_capab korrekt setzten

Der Parameter ht_capab teilt Hostapd mit, über welche Funktionen eine WLAN Karte verfügt, wie zum Beispiel die möglichen Frequenzen, Stromsparfunktionen, Fragementierung oder ähnliches. Hostapd erkennt die möglichen Funktionen der WLAN Karten jedoch meißt nicht richtig, weswegen es zu empfehlen ist, diese manuell zu setzten. Dazu müssen diese zuerst ausgelesen werrden.

Capabilities auslesen

Wenn der Treiber für die WLAN Karte geladen ist, kann man die Capabilities der Karte über iw list auslesen. Interessant sind dabei die Angaben im Abschnitt Capabilities

$ iw list | grep Bitrates -B 100 | grep Capabilities -B 1 -A 100

        Band 1:
                Capabilities: 0x172
                        HT20/HT40
                        Static SM Power Save
                        RX Greenfield
                        RX HT20 SGI
                        RX HT40 SGI
                        RX STBC 1-stream
                        Max AMSDU length: 3839 bytes
                        No DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 2 usec (0x04)
                HT RX MCS rate indexes supported: 0-7, 32
                TX unequal modulation not supported
                HT TX Max spatial streams: 1
                HT TX MCS rate indexes supported may differ
                Bitrates (non-HT):

Anhand der dort gelieferten Einträge muss man sich nun leider den dazu passenden Parameter für ht_capab manuell heraussuchen. Dies geht entweder indem man in die Beispielconfig von hostapd schaut oder sich die Parameter mittels iw anzeigen lässt

iw --help |less

Capabilities setzten

Nachdem alle Paremter für die unterstützten Paremter rausgesucht und gesetzt wurden,

ht_capab=[HT20][HW40][SMPS-STATIC][GF][SHORT-GI-20][SHORT-GI-40][RX-STBC-1][MAX-AMSDU-3839][MAX-A-MPDU-LEN-EXP3][ht-mcs-7 32]

empfiehlt es sich, hostap mit dem Debug Parameter im Vordergrund zu starten, um die sehen ob alles sauber läuft.

/usr/sbin/hostapd -td /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid

Links

Die mobile Version verlassen