REGDOMAIN bei ath5k / ath9k ändern
Intro
Viele WLAN-Karten werden mit einem fest programmierten REGDOMAIN-Wert von ‘0x00‘ ausgeliefert. Das sorgt dafür, dass man nicht alle Kanäle benutzen kann, die in Deutschland eigentlich zulässig wären, selbst wenn man im OPT_WLAN die richtige Länderkennung setzt (WLAN_REGDOMAIN=‘DE‘).
Es existieren im Internet zwar einige Anleitungen für Atheros-basierte Karten, jedoch nie für die Umgebung des Fli4l. In so ziemlich allen Fällen, die mir begegnet sind, wird außerdem ein falscher REGDOMAIN-Wert verwendet (meist 0x65). Dieser funktioniert nur bedingt, da er z.B. die Kanäle 12 und 13 im 2,4 GHz-Band nicht im AP-Mode zulässt.
Dieses HowTo beschreibt exemplarisch das Vorgehen um die im EEPROM der WLAN-Karte gespeicherte REGDOMAIN entsprechend auf den richtigen Wert zu ändern.
Anmerkungen
Die hier beschriebenen Methoden stellen keinesfalls ein "Universalrezept" dar! Entsprechende Sorgfalt und Aufmerksamkeit sind auf jeden Fall ein absolutes Muss. Jeder sollte sich der möglichen Gefahr bewusst sein, die von einem Eingriff in die Firmware einer WLAN-Karte ausgehen kann.
Bisher wurden diese Methoden erfolgreich auf folgende Karten angewandt:
Compex WLM200NX (miniPCI), Atheros AR9220 Chipsatz
Compex WLM54AGP23 200mW (miniPCI), Atheros AR5414 Chipsatz
Compex WLE200NX (MiniPCIe), Atheros AR9280 Chipsatz
Voraussetzungen
Es wird ein lauffähiger Fli4l (ab Version 3.10.0) mit konfiguriertem OPT_WLAN vorausgesetzt. Die WLAN-Karte muss dabei entweder über einen ath5k oder ath9k Chipsatz verfügen und mit dem entsprechenden Treiber verwendet werden.
Der Fli4l muss einen Zugriff auf die Konsole per SSH, direkter oder serieller Verbindung ermöglichen.
Zusätzlich wird das Paket OPT_TOOLS benötigt, aus dem folgende Pakete aktiviert sein müssen:
- OPT_LSPCI
- OPT_IWLEEPROM (nur für ath9k)
- OPT_ATH_INFO (nur für ath5k)
Anleitung für ath5k
- Herstellen der Konsolen-Verbindung
- Deaktivieren des WLAN-Interface
ip link set dev wlan0 down
- Speicheradresse des Interface ermitteln. Benötigt wird der Wert bei "Memory at". In diesem Beispiel wird die Adresse e0080000 angenommen.
lspci -v
- EEPROM auslesen und Backup erstellen. Die ermittelte Speicheradresse muss ab hier mit vorangestelltem "0x" angegeben werden. Der Dump wird im aktuellen Verzeichnis als "ath-eeprom-dump.bin" agbelegt
ath_info –d 0xe0080000
- EEPROM Dump umbenennen
mv ath-eeprom-dump.bin ath5k_0x00.bin
- Ändern der REGDOMAIN im EEPROM. Sicherheitsabfrage mit "y" bestätigen.
ath_info -w 0xe0080000 regdomain 37
- Geändertes EEPROM auslesen und Backup erstellen. Der Dump wird wieder im aktuellen Verzeichnis als "ath-eeprom-dump.bin" agbelegt
ath_info –d 0xe0080000
- EEPROM Dump umbenennen
mv ath-eeprom-dump.bin ath5k_0x37.bin
- Treiber neu initialisieren und Interface wieder starten
rmmod ath5k
modprobe ath5k
ip link set dev wlan0 up
- Die beiden EEPROM Dumps vom Fli4l sichern, z.B. per SCP oder FTP, um sie zu archivieren.
- Den Fli4l neustarten
reboot
Anleitung für ath9k
- Herstellen der Konsolen-Verbindung
- Deaktivieren des WLAN-Interface
ip link set dev wlan0 down
- Interfaceadresse der WLAN-Karte ermitteln. In diesem Beispiel wird die Adresse 00:0c.0 angenommen.
lspci
- Die ermittelte Interfaceadresse muss ab hier mit vorangestelltem "0000:" angegeben werden. In diesem Beispiel also dann 0000:00:0c.0.
- Interface initialisieren
iwleeprom -d 0000:00:0c.0 –I
- Informationen des Interface auslesen
iwleeprom -d 0000:00:0c.0 –s
- EEPROM Dump als Backup erstellen. Der Dump wird dabei im aktuellen Verzeichnis als „ath9k_0x00.bin“ abgelegt.
iwleeprom -d 0000:00:0c.0 -o ath9k_0x00.bin
- Arbeitskopie erstellen und entsprechende Änderungen einfügen
cp ath9k_0x00.bin ath9k_tmp.bin
echo -ne '\x37' | dd of=ath9k_tmp.bin bs=1 seek=520 conv=notrunc
- Modifizierte Firmware ins EEPROM schreiben
echo Y|iwleeprom -d 0000:00:0c.0 -i ath9k_tmp.bin
- Informationen des Interface auslesen und den Wert der „calculated CRC“ notieren. In diesem Beispiel wird der Wert 7a1b angenommen.
iwleeprom -d 0000:00:0c.0 –s
- Anpassen der gespeicherten CRC in der Firmware-Datei. ACHTUNG: Die Bits der CRC sind in dem folgenden Befehl vertauscht anzugeben! Aus dem CRC-Wert 7a1b resultiert also in diesem Beispiel der Eintrag \x1b\x7a.
echo -ne '\x1b\x7a' | dd of=ath9k_tmp.bin bs=1 seek=514 conv=notrunc
- Modifizierte Firmware ins EEPROM schreiben
echo Y|iwleeprom -d 0000:00:0c.0 -i ath9k_tmp.bin
- Informationen des Interface auslesen und die Werte der „calculated CRC“ und der „stored CRC“ vergleichen. Diese müssen jetzt identisch sein.
iwleeprom -d 0000:00:0c.0 –s
- EEPROM Dump als Backup erstellen. Der Dump wird dabei im aktuellen Verzeichnis als „ath9k_0x37.bin“ abgelegt.
iwleeprom -d 0000:00:0c.0 -o ath9k_0x37.bin
- Treiber neu initialisieren und Interface wieder starten
rmmod ath9k
modprobe ath9k
ip link set dev wlan0 up
- Die beiden EEPROM Dumps vom Fli4l sichern, z.B. per SCP oder FTP, um sie zu archivieren.
- Den Fli4l neustarten
reboot