WiFi Channel 13 & 14 auf Alpine Linux aka ich kann mich nicht mit meinem Router verbinden aka crda Konfiguration

Drahtlos-Router

Zusammenfassung

Bei der Entwicklung eines eingebetteten, schreibgeschützten Testsystems für die Modifikation eines Pi Zero W WLAN-Ports, die wir für einen Kunden durchgeführt haben, stieß ich auf ein interessantes Problem.

Der Pi Zero W verbindet sich plötzlich nicht mehr mit unserem Router.

Nach einigen Nachforschungen ist es mir gelungen, die Ursache zu finden und zu beheben.

Der Grund dafür: WLAN-Regelungsbereiche

In verschiedenen Ländern stehen unterschiedliche WiFi-"Kanäle" (= Frequenzen) zur Verfügung. 

Wikipedia bietet einen guten Überblick:

https://en.wikipedia.org/wiki/List_of_WLAN_channels#2.4_GHz_(802.11b/g/n)

Die 2,4-GHz-Kanäle 12 und 13 sind in den USA nicht verfügbar, in den meisten anderen Ländern jedoch schon.

Wenn Sie Ihre WLAN-Geräte / Raspberry Pi's auf den Standardeinstellungen belassen, gehen sie davon aus, dass sie keine Verbindung zu diesen Kanälen herstellen dürfen. Sie haben keine Möglichkeit zu wissen, wo sie sich befinden, bis Sie es ihnen sagen, und wählen daher in Ihrem Interesse die sichere Option "weltweit".

Wenn Ihr Router hingegen auf Kanal 12 oder 13 konfiguriert ist, kann Ihr Raspberry Pi Zero W (oder jeder andere Pi, auch der Pi 3 B+) Ihren Router nicht sehen.

Aber ich habe meinen Router nicht für die Verwendung dieses Kanals eingerichtet.

Ich auch nicht. Bis etwa 4 Uhr morgens funktionierte alles einwandfrei - dann beschloss der Router plötzlich, auf diesen Kanal umzuschalten, da es dort weniger Störungen durch die Nachbarn gibt.

Es kann sein, dass Ihr Router plötzlich umschaltet und Sie sich dann mit einem schwierigen Problem konfrontiert sehen.

Wie kann ich feststellen, ob dies mein Problem ist?

Verwenden Sie ein WLAN-Scan-Tool.

Ich verwende inSSIDer für Home. Leider scheint es nicht mehr kostenlos zu sein, aber es gibt Alternativen.

Bild

Wie Sie auf diesem Screenshot sehen können, verwendet unser Netzwerk Kanäle 13 und 9 (da es sich um ein 802.11 n-Netz handelt, das Kanalbündelung für zwei 20 MHz breite Kanäle verwendet).

Kanal 13 ist in den USA nicht verfügbar und daher auch nicht standardmäßig auf dem Raspberry Pi.

Die Lösung: CRDA

Sie müssen einige Pakete installieren und sie entsprechend einrichten, um das WiFi-Land einzustellen.

Unter Raspbian ist dies sehr einfach und unkompliziert, da alle notwendigen Pakete für Sie vorinstalliert sind.

Verwenden Sie sudo raspi-config, um das WiFi-Land einzustellen.

Bei Alpine Linux ist etwas mehr Arbeit nötig. In diesem Blogpost führe ich Sie Schritt für Schritt durch das Programm, um Ihnen mitzuteilen, was ich gelernt habe und wofür ich etwa einen ganzen Tag Arbeit gebraucht habe. Hoffentlich werden Sie in 20 Minuten oder weniger fertig sein.

Es wird weitere Blog-Beiträge über Alpine Linux auf dem Raspberry Pi geben. Im Moment konzentrieren wir uns auf dieses spezielle Problem der WiFi-Verbindung für europäische Bürger.

Ausführen als root

Im folgenden Tutorium gehe ich davon aus, dass Sie die Operationen als Benutzer Wurzel.

Wenn Sie nicht Root sind, werden Sie Root, wenn es angebracht ist.

Ein Hinweis auf das RAM-only-Dateisystem von Alpine

Alpine Linux hat den großen Vorteil, dass es komplett schreibgeschützt von Ihrer SD-Karte läuft. Das bedeutet zum Beispiel, dass Sie den Raspberry Pi während des Betriebs ausstecken können, ohne dass das Dateisystem beschädigt wird.

Natürlich muss es eine Möglichkeit geben, Ihre Änderungen während der Entwicklung auf das Basissystem anzuwenden.

Der Befehl lautet:

lbu commit -d

Wichtig: lbu commit brauchen könnte eingerichtet werden, um zu speichern bestimmte Unterverzeichnisse die geändert werden (unter Verwendung von lbu include - siehe den unten stehenden Link für Details).

Weitere Einzelheiten finden Sie auf der folgenden Seite:

Repositories einrichten

Hinweis: Standardmäßig ist auf Alpine Linux nur vi installiert. Wenn Sie nano hinzufügen möchten, verwenden Sie den folgenden Befehl:

apk nano hinzufügen

Bearbeiten Sie die Repositories (wechseln Sie vi mit nano, wenn Sie es installiert haben):

vi /etc/apk/repositories

Fügen Sie Folgendes hinzu bzw. ersetzen Sie es (für weitere Informationen lesen Sie den Kommentar am Ende des Textes):

/media/mmcblk0p1/apks
http://dl-3.alpinelinux.org/alpine/edge/testing

http://dl-3.alpinelinux.org/alpine/edge/main

http://dl-3.alpinelinux.org/alpine/edge/community

Alle drei Edge-Repositories sind erforderlich, da sich verschiedene Pakete in unterschiedlichen Repositories befinden.

Installieren Sie die erforderlichen Pakete

Führen Sie den folgenden Befehl aus:

apk hinzufügen wireless-regdb crda iw

Erläuterung:

  • wireless-regdb enthält die Binärdateien der drahtlosen Regulierungsdatenbank.
  • crda ist das Userspace-Tool, das die regulatorischen Informationen für den Kernel aktualisiert
  • iw sind Dienstprogramme für die Drahtloskonfiguration, mit denen Sie die Regulierungsdomäne (Land) einstellen können

Aktuellen Regelungsbereich prüfen

Laufen:

iw reg get

Dies zeigt die aktuelle Domäne an (höchstwahrscheinlich Land 00: DFS-UNSET). Hier ist ein Bildschirmfoto von dem, was wir anstreben (in unserem Fall DE für Deutschland):

Bild

mdev-Regeln bearbeiten

Im Folgenden ist die Position des neuen Eintrags sehr wichtig - er muss sich ganz oben befinden, genau vor die Zeile $MODALIAS. Andernfalls wird dies nicht funktionieren!

vi /etc/mdev.conf

fügen Sie die folgende neue Zeile direkt vor der Zeile $MODALIAS ein:

$COUNTRY=.. root:root 0660 */sbin/crda

Hier ist ein Bildschirmfoto der bearbeiteten Datei:

Bild

Referenz:

Neuen modprobe.d-Eintrag erstellen

Laufen:

berühren Sie /etc/modprobe.d/cfg80211.conf

vi /etc/modprobe.d/cfg80211.conf

Fügen Sie die folgende Zeile ein (ggf. DE an Ihr Land anpassen - Zweibuchstabencode):

Optionen cfg80211 ieee80211_regdom=DE

Speichern Sie die Datei.

Diese Datei stellt sicher, dass Ihr Regelungsbereich beim Booten korrekt angewendet wird.

Referenz:

Alternativ: iw

Alternativ können Sie den Regelungsbereich mit iw festlegen (möglicherweise zusätzlich zu den oben genannten Maßnahmen erforderlich? Mein Test zeigt jedoch, dass dies nicht funktioniert.)

iw reg set DE

Hier ist ein Bildschirmfoto:

Bild

Fertigstellen

Ausführen (falls erforderlich):

lbu commit -d

Starten Sie neu. Ihr Pi Zero W sollte sich nun auch mit Kanal 12 und Kanal 13 verbinden können!

Eine Anmerkung zu crda

crda ist nicht soll von Ihnen, dem Benutzer, ausgeführt werden. Es wird als Hilfsanwendung von iw ausgeführt.

Es folgt ein grober Hack, der bei der Fehlersuche funktionieren "könnte". Manchmal funktioniert er. Selten, eigentlich.

iw reg set DE ; COUNTRY=DE /sbin/crda

Oft schlug es bei mir mit der folgenden Ausgabe fehl:

Regulierungsbereich konnte nicht festgelegt werden -22

Selbst jetzt, nachdem ich das Land richtig einstellen kann, schlägt dieser Befehl meistens fehl ... Ich nehme an, dass es an den Race Conditions liegt.

Soweit ich es verstanden habe, iw setzt bestimmte Umgebungsvariablen, die wiederum mdev veranlassen, /sbin/crda auszuführen, um diese Änderungen an den Kernel zu senden.

iw ist nicht das einzige Tool, das den Regulierungsbereich für den Kernel ändern kann; wpa-supplicant soll ebenfalls dazu in der Lage sein.

Und wie Sie gesehen haben, ist cfg80211.conf auch dazu in der Lage.

Die Datei regulatory.bin wird installiert in /usr/lib/crda.

Sie benötigen das Paket crda-dev NICHT für die in diesem Blogbeitrag beschriebene Lösung.

Ein Hinweis auf die Repository-Datei

Wenn Sie die zu Beginn hinzugefügten Repository-Quellen entfernen/auskommentieren, "verschwinden" Pakete aus Ihrem System.

Ich werde dies weiter untersuchen müssen, da ich gerade erst begonnen habe, mit Alpine Linux zu arbeiten.

Entfernen Sie vorerst keine Repository-Zeilen für Pakete, die Sie auf Ihrem System installiert haben.