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.

Ein Eingriff in das EEPROM der WLAN-Karte ist nicht trivial und kann unter Umständen zur Zerstörung der Karte führen. Außerdem gibt es Karten, die eine Änderung des EEPROM gar nicht erst zulassen.

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)

 

Es ist ebenfalls ratsam, über eine funktionierende Methode zu verfügen, um Dateien vom Fli4l kopieren zu können (z.B. SCP oder FTP). Dies dient lediglich dazu, sowohl die originale, als auch die modifizierte Firmware-Datei sichern zu können.

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