Hallo!
Ich habe heute mit dem Laptop eines Bekannten (Acer Aspire 7720Z unter intrepid) eine böse Überraschung erlebt: der madwifi-Treiber aus den backports hat praktisch über Nacht den Dienst versagt. dmesg liefert dazu folgende Informationen:
[...] ath5k phy0: Atheros AR2425 chip found [...]
[...] ath5k phy0: gain calibration timeout (2412MHz)
[...] ath5k phy0: can't reset hardware (-11)
Daran war auch nichts zu ändern. Leider bedeutet das eigentlich, dass ich nun wieder alles manuell kompilieren müsste, wo intrepid doch DKMS mitliefert. Das Ziel sollte nun sein, die Anleitung aus dem Eingangspost "DKMS-fähig" zu machen, damit das System nach einem Kernelupdate automatisch die madwifi-Komponenten neu kompiliert und einbindet. Also ans Werk.
1. Schritt: Vorbereitung
Sicherheitshalber sollte geprüft werden, ob unter System → Systemverwaltung → Hardware-Treiber alle Einträge (normalerweise nur ein Eintrag), die mit Atheros zu tun haben, deaktiviert sind. Ansonsten sind diese zu deaktivieren. Ist das passiert, wird der Punkt vor dem Eintrag grau.
Hinweis: Es ist möglich, dass auch nachdem der Treiber deaktiviert und das System ggf. neugestartet wurde, an der entsprechenden Stelle unter Hardware-Treiber die Meldung erscheint, dass eine andere Version in Benutzung ist.
Danach alle verbliebenen Kernel-Module des alten madwifi-Treibers deaktivieren:
sudo modprobe -r ath_pci
sudo modprobe -r ath_hal
Wie in der ursprünglichen Anleitung, müssen nun alle Pakete, die fürs Kompilieren erforderlich sind, installiert sein:
sudo apt-get install build-essential linux-headers-$(uname -r)
2. Schritt: Download des madwifi Snapshots und DKMS-gerechte Aufbereitung
Unter folgender URL das aktuelle Snapshot-Release herunterladen und auspacken:
http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/
tar xzvf madwifi-hal-0.10.5.6-*.tar.gz
Um eine homogenere Umgebung zu erzeugen, benennen wir das nun entstandene Verzeichnis noch um und entfernen das Archiv:
rm madwifi-hal-0.10.5.6-*.tar.gz
mv madwifi-hal-0.10.5.6-* madwifi-hal-0.10.5.6
In dem umbenannten Verzeichnis madwifi-hal-0.10.5.6 legen wir eine Datei mit dem Namen dkms.conf und folgendem Inhalt an:
PACKAGE_NAME="madwifi-hal"
PACKAGE_VERSION="0.10.5.6"
CLEAN="make clean"
BUILT_MODULE_NAME[0]="ath_pci"
BUILT_MODULE_LOCATION[0]="ath"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[1]="ath_hal"
BUILT_MODULE_LOCATION[1]="ath_hal"
DEST_MODULE_LOCATION[1]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[2]="wlan_acl"
BUILT_MODULE_LOCATION[2]="net80211"
DEST_MODULE_LOCATION[2]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[3]="wlan_ccmp"
BUILT_MODULE_LOCATION[3]="net80211"
DEST_MODULE_LOCATION[3]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[4]="wlan"
BUILT_MODULE_LOCATION[4]="net80211"
DEST_MODULE_LOCATION[4]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[5]="wlan_scan_ap"
BUILT_MODULE_LOCATION[5]="net80211"
DEST_MODULE_LOCATION[5]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[6]="wlan_scan_sta"
BUILT_MODULE_LOCATION[6]="net80211"
DEST_MODULE_LOCATION[6]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[7]="wlan_tkip"
BUILT_MODULE_LOCATION[7]="net80211"
DEST_MODULE_LOCATION[7]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[8]="wlan_wep"
BUILT_MODULE_LOCATION[8]="net80211"
DEST_MODULE_LOCATION[8]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[9]="wlan_xauth"
BUILT_MODULE_LOCATION[9]="net80211"
DEST_MODULE_LOCATION[9]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[10]="ath_rate_sample"
BUILT_MODULE_LOCATION[10]="ath_rate/sample"
DEST_MODULE_LOCATION[10]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[11]="ath_rate_amrr"
BUILT_MODULE_LOCATION[11]="ath_rate/amrr"
DEST_MODULE_LOCATION[11]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[12]="ath_rate_minstrel"
BUILT_MODULE_LOCATION[12]="ath_rate/minstrel"
DEST_MODULE_LOCATION[12]="/kernel/drivers/net/wireless"
BUILT_MODULE_NAME[13]="ath_rate_onoe"
BUILT_MODULE_LOCATION[13]="ath_rate/onoe"
DEST_MODULE_LOCATION[13]="/kernel/drivers/net/wireless"
POST_BUILD="post_build.sh /lib/modules/$kernelver/volatile"
MAKE[0]="make modules KERNDIR=/lib/modules/$kernelver"
AUTOINSTALL="yes"
Im gleichen Verzeichnis legen wir eine weitere Datei mit dem Namen post_build.sh und folgendem Inhalt an:
#!/bin/sh
cd $1 || exit 1
rm wlan_xauth.ko
depmod
(Kommentar zum Entfernen von wlan_xauth am Ende des Beitrages!)
Die Datei muss zusätzlich ausführbar gemacht werden:
chmod +x post_build.sh
In der Verzeichnishierarchie wieder eine Ebene nach oben wechseln und dort aus dem Verzeichnis madwifi-hal-0.10.5.6 ein neues Archiv erstellen:
tar cfz madwifi-hal-0.10.5.6-dkms.tar.gz madwifi-hal-0.10.5.6
3. Schritt: Neues Paket an DKMS übergeben, kompilieren und einbinden
Nun das Paket an den DKMS source tree übergeben:
sudo dkms ldtarball --archive=madwifi-hal-0.10.5.6-dkms.tar.gz
Anschließend soll DKMS den madwifi Treiber noch kompilieren:
sudo dkms build -m madwifi-hal -v 0.10.5.6
Zuletzt muss der Treiber installiert werden:
sudo dkms install -m madwifi-hal -v 0.10.5.6
Nach einem Neustart wird madwifi automatisch geladen und die erforderlichen Schnittstellen stehen damit zur Verfügung.
DKMS wird jetzt nach einem Kernel-Update automatisch den madwifi Treiber neu kompilieren und einbinden.
Folgende Artikel sind Grundlage dieser Anleitung:
http://madwifi-project.org/wiki/Compatibility/Atheros
http://blog.hyperandy.com/2008/11/01/atheros-ar242x-ubuntu-810-ibex/
http://myrtg.blogspot.com/2008/11/madwifi-hal-dkms-mini-how-to.html
Edit vom 01.02.: das Kernelupdate auf 2.6.27-11 hat gezeigt, dass in der Anleitung noch ein Fehler steckte. DKMS hat den madwifi-Treiber sauber kompiliert, aber nicht installiert, weil die mit jedem Kernel mitgelieferten linux-restricted-modules den defekten madwifi-Treiber enthalten, den wir am Anfang der Anleitung deaktiviert hatten. DKMS verweigert daraufhin die Installation unseres Treibers. Wir müssen deshalb nachdem der Kompilier-Vorgang unseres Treibers erfolgreich (!) abgeschlossen wurde (deshalb die Direktive POST_BUILD), das störende Modul entfernen, damit DKMS die Installation sauber durchführt. Damit ist bei der händischen Installation auch kein --force mehr erforderlich.
Alle, die ihr Paket für DKMS nun neu bauen müssen (da das Update nun ohnehin nicht funktioniert hat), müssen das fehlerhafte Paket mit folgendem Befehl aus DKMS entfernen:
sudo dkms remove -m madwifi-hal -v 0.10.5.6 --all
Danach am besten an Schritt 2 aus der Anleitung ansetzen, ein neues Paket bauen und an DKMS übergeben.
Viele Grüße,
Lossi