Freitag, 18. Januar 2013

PogoPlug WiFi Adapter

Ein PogoPlug am Netzwerkkabel ist einfach uncool, wenn das Netzwerkkabel quer durchs Wohnzimmer geht, so dass der PogoPlug in der Nähe der Stereoanlage stehen kann - das soll "AirPlay" sein...?! Also brauchte mein PogoPlug eine Netzwerkkarte und klein und günstig sollte sie auch noch sein. Deshalb habe ich auf gut Glück den Daumennagel-großen LogiLink (WL0084B) USB-WLAN Stick (<10EUR) bestellt. Der gelieferte Stick entpuppte sich als RaLink RT5370, der auf Anhieb unterstützt wird (rt2800usb).

Mit diesem Wissen bestellte ich weitere fünf Adapter beim gleichen Versender, ebenfalls von LogiLink. Das böse Erwachen deutete die leicht andere Blister-Verpackung an. Der Stick ist ein LogiLink WL0084A und er verwendet den Realtek Chipsatz 8188CUS.






Theoretisch unterstützt das Kernelmodul rtl8192cu diesen Stick. Mit einem Patch aus dem OpenWRT Forum lässt sich das Modul auch aktivieren und kompilieren. Einige Teile des Sticks lassen sich somit auch zum Leben erwecken, allerdings hängt ein Scan das System vollständig auf. Kernel Segfaults sind nicht gerade vertrauenerweckend wenn man ein stabiles System anstrebt...

Nach meinem erfolgreichen Erlebnis mit dem Crosscompile von OSCAM, habe ich als nächsten Schritt den original Treiber von der RealTek Webseite heruntergeladen und das "driver"-Verzeichnis auf meinen Build-Server geschoben.
Ich habe das Makefile auf meine Bedürfnisse angepasst und binnen weniger Sekunden hatte ich ein fertiges 8192cu.ko Kernel Modul.

CONFIG_PLATFORM_ARM_KIRKWOOD = y

ifeq ($(CONFIG_PLATFORM_ARM_KIRKWOOD), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := /home/alex/openwrt/attitude_adjustment/staging_dir/toolchain-arm_v5te_gcc-4.6-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-
KVER  := 3.3.8
KSRC ?= /home/alex/openwrt/attitude_adjustment/build_dir/linux-kirkwood/linux-3.3.8
endif

Da das Logging ziemlich intensiv ist, habe ich die Definition in "include/autoconf.h" auskommentiert:

#define DBG     0
//#define CONFIG_DEBUG_RTL819X

Sämtliche andere WLAN-verwandte Module sollten deinstalliert werden. Das Modul greift nicht auf die MAC802.11 Architektur des Linux Kernels zurück. Nach dem Laden gibt es sofort ein Interface "wlan0", welches sich mit den alten "wireless-tools" iwconfig und iwlist einstellen lässt. Für eine automatische Konfiguration unter OpenWRT muss die /etc/config/wireless so aussehen:

config wifi-device 'wlan0'
        option type     'wext'
        option channel  '6'

config wifi-iface
        option device   'wlan0'
        option network  'wlan'
        option mode     'sta'
        option ssid     'OpenWRT'
        option encryption 'psk2'
        option key      'SuperGeheimerSchlüssel'

Leider fehlt ein Script für die alten WirelessExtensions (WEXT). Hierfür schnappt man sich ein altes /lib/wifi/mac80211.sh, kopiert es nach /lib/wifi/wext.sh und ersetzt jedes Vorkommen von "mac80211" durch "wext" (Anleitung fürs Bifferboard).

cd /tmp
wget http://dev.openwrt.org/browser/tags/8.09/package/mac80211/files/lib/wifi/mac80211.sh
sed -i -e 's/mac80211/wext/g' mac80211.sh
mv mac80211.sh /lib/wifi/wext.sh

Mit etwas Glück startet das Netz nun beim Hochfahren des PogoPlug. In der Praxis verhielt sich mein WLAN-Stick nicht sehr vorhersehbar - manchmal wurde der Stick erst nach erneutem ab-/anstecken erkannt.

Zufriedenheit sieht anders aus, da muss ich wohl die vier verbliebenen, original verpackten Adapter zurückschicken... Insgesamt ziemlich viel Aufwand, verschwendet an ein zu günstiges Produkt.