WiFi kanaal 13 & 14 op Alpine Linux aka ik kan geen verbinding maken met mijn router aka crda configuratie

wireless-router

Samenvatting

Tijdens het ontwikkelen van een embedded, alleen-lezen testsysteem voor een Pi Zero W WLAN poort modificatie die we voor een klant hebben gedaan, stuitte ik op een interessant probleem.

De Pi Zero W maakte plotseling geen verbinding meer met onze router.

Na wat onderzoek, ben ik er in geslaagd om de reden te vinden, en te repareren.

De reden: WLAN regelgevende domeinen

In verschillende landen zijn verschillende WiFi "kanalen" (= frequenties) beschikbaar voor gebruik. 

Wikipedia heeft een goed overzicht:

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

Voor 2,4 GHz zijn kanaal 12 en 13 niet beschikbaar in de VS, maar wel in de meeste andere landen.

Als u uw WLAN-apparaten / Raspberry Pi's op de standaardinstellingen laat staan, zullen ze aannemen dat ze geen verbinding mogen maken met deze kanalen. Ze hebben geen enkele manier om te weten waar ze zijn totdat u het hen vertelt, en kiezen dus de veilige "wereldwijd" optie in uw belang.

Als uw router daarentegen op kanaal 12 of 13 is geconfigureerd, kan uw Raspberry Pi Zero W (of elke andere Pi, inclusief de Pi 3 B+) uw router niet zien.

Maar ik heb mijn router niet ingesteld om dit kanaal te gebruiken

Ik ook niet. Alles werkte prima tot ongeveer 4 uur 's nachts - toen besloot de router plotseling dat hij naar dit kanaal wilde overschakelen, omdat er minder storing is van buren.

Uw router kan plotseling overschakelen, en u zult een moeilijk probleem moeten onderzoeken.

Hoe kan ik bepalen of dit mijn probleem is?

Gebruik een WLAN scantool.

Ik gebruik inSSIDer voor Home. Helaas schijnt het niet meer gratis te zijn, maar er zijn alternatieven.

afbeelding

Zoals je in deze schermafbeelding kunt zien gebruikt ons netwerk kanalen 13 en 9. (Omdat het een 802.11 n netwerk is dat channel bonding gebruikt voor twee 20 MHz brede kanalen).

Kanaal 13 is niet beschikbaar in de VS, en dus ook niet standaard op de Raspberry Pi.

De oplossing: CRDA

U moet enkele pakketten installeren, en ze op de juiste manier instellen, om het WiFi land in te stellen.

Op Raspbian is dit zeer eenvoudig en rechttoe rechtaan, aangezien alle noodzakelijke pakketten reeds voorgeïnstalleerd zijn.

Gebruik sudo raspi-config als een hulpmiddel om het WiFi land in te stellen.

Op Alpine Linux, is wat meer werk nodig. Ik zal je er in deze blogpost stap voor stap doorheen leiden, om te delen wat ik geleerd heb, en wat me ongeveer een hele dag werk kostte om te leren. Hopelijk ben je in 20 minuten of minder klaar.

Er zullen nog meer blog posts volgen over Alpine Linux op de Raspberry Pi, voor nu richten we ons op dit specifieke WiFi connectiviteitsprobleem voor Europese burgers.

Draaien als root

In de volgende handleiding ga ik ervan uit dat je de bewerkingen uitvoert als gebruiker root.

Als je geen root bent, word dan root als dat nodig is.

Een opmerking over het RAM-only bestandssysteem van Alpine

Alpine Linux heeft het grote voordeel dat het volledig read-only kan draaien vanaf je SD-kaart. Dit betekent bijvoorbeeld dat u de Raspberry Pi tijdens het gebruik kunt loskoppelen zonder het bestandssysteem te beschadigen.

Natuurlijk moet er een mogelijkheid zijn om uw wijzigingen tijdens de ontwikkeling op het basissysteem toe te passen.

Het commando is:

lbu commit -d

Belangrijk: lbu commit nodig kunnen hebben om te worden ingesteld om specifieke subdirectories die worden gewijzigd (met behulp van lbu include - zie de onderstaande link voor details).

Zie de volgende bladzijde voor meer details:

Repositories opzetten

opmerking: standaard is alleen vi geïnstalleerd op Alpine Linux. Als u nano wilt toevoegen, gebruikt u het volgende commando:

apk add nano

Bewerk de repositories (schakel vi over met nano als je dat geïnstalleerd hebt):

vi /etc/apk/repositories

Voeg het volgende toe / vervang het volgende (lees de opmerking onderaan voor meer info):

/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 drie de edge repositories zijn nodig, omdat verschillende pakketten in verschillende repositories staan.

Installeer de nodige pakketten

Voer het volgende commando uit:

apk add wireless-regdb crda iw

Uitleg:

  • wireless-regdb bevat de binaire bestanden van de database voor draadloze regelgeving.
  • crda is het gebruikersruimtehulpmiddel dat regelgevingsinformatie voor de kernel bijwerkt
  • iw zijn hulpprogramma's voor draadloze configuratie, die u zult gebruiken om het regelgevingsdomein (land) in te stellen

Controleer de huidige regelgeving

Rennen:

iw reg get

Dit zal het huidige domein tonen (hoogstwaarschijnlijk land 00: DFS-UNSET). Hier is een screenshot van wat we beogen (in ons geval DE voor Duitsland):

afbeelding

Bewerk mdev regels

In het volgende is de positie van het nieuwe item zeer belangrijk - het moet helemaal bovenaan staan, net voor de $MODALIAS lijn. Anders zal dit niet werken!!!

vi /etc/mdev.conf

voeg de volgende nieuwe regel in, net voor de regel $MODALIAS:

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

Hier is een screenshot van het bewerkte bestand:

afbeelding

Referentie:

Maak een nieuw modprobe.d item

Rennen:

touch /etc/modprobe.d/cfg80211.conf

vi /etc/modprobe.d/cfg80211.conf

De volgende regel invoegen (indien nodig DE aanpassen aan uw land - tweelettercode):

options cfg80211 ieee80211_regdom=DE

Sla het bestand op.

Dit bestand zal ervoor zorgen dat uw regelgevend domein correct wordt toegepast bij het opstarten.

Referentie:

Alternatief: iw

Als alternatief kunt u het reglementaire domein instellen met iw (misschien nodig als aanvulling op het bovenstaande? Mijn test toont echter aan dat dit niet blijft hangen).

iw reg set DE

Hier is een screenshot:

afbeelding

Afronden

Uitvoeren (indien nodig):

lbu commit -d

Herstart. Uw Pi Zero W zou nu ook verbinding moeten kunnen maken met kanaal 12 en kanaal 13!

Een opmerking over crda

crda is niet wordt verondersteld door u, de gebruiker, te worden uitgevoerd. Het wordt uitgevoerd als een hulptoepassing door iw.

Een ruwe hack die "misschien" werkt bij het debuggen volgt. Het werkt, soms. Zelden, eigenlijk.

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

vaak mislukte het bij mij met de volgende uitvoer:

niet gelukt om regelgevend domein in te stellen -22

Zelfs nu, nadat ik het land goed kan instellen, zal dit commando meestal falen ... Ik neem aan dat het te wijten is aan race conditions.

Voor zover ik het begrijp, iw stelt bepaalde omgevingsvariabelen in, die op hun beurt mdev triggeren om /sbin/crda uit te voeren, om deze veranderingen naar de kernel te sturen.

iw is niet het enige gereedschap dat het reguleringsdomein voor de kernel kan veranderen; wpa-supplicant wordt ook verondersteld dit te kunnen doen.

En, zoals je hebt gezien, is cfg80211.conf ook in staat om het te doen.

De regelgevende.bin is geïnstalleerd in /usr/lib/crda.

U hebt het pakket crda-dev NIET nodig voor de oplossing die in deze blogpost wordt beschreven.

Een opmerking over het archiefbestand

Als je de archiefbronnen die in het begin zijn toegevoegd verwijdert / becommentarieert, "verdwijnen" de pakketten van je systeem.

Ik zal dit verder moeten onderzoeken, aangezien ik net met Alpine Linux ben begonnen te werken.

Verwijder voorlopig geen regels uit de repository voor pakketten die je op je systeem hebt geïnstalleerd.