Canal WiFi 13 & 14 no Alpine Linux, também conhecido como configuração crda Não consigo conectar-me ao meu router, também conhecido como configuração crda

roteador com fio

Sumário

Ao desenvolver um sistema de teste embutido e somente leitura para uma modificação de porta WLAN Pi Zero que fizemos para um cliente, deparei-me com um problema interessante.

O Pi Zero W de repente parou de se ligar ao nosso router.

Depois de alguma investigação, consegui encontrar a razão, e consertar.

A razão: domínios regulatórios da WLAN

Em diferentes países, estão disponíveis diferentes "canais" WiFi (= frequências) para utilização. 

A Wikipédia tem uma boa visão geral:

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

Para os canais de 2,4 GHz 12 e 13 não estão disponíveis nos EUA, mas estão na maioria dos outros países.

Se você deixar seus dispositivos WLAN / Raspberry Pi's nas configurações padrão, eles irão assumir que não estão autorizados a se conectar a esses canais. Eles não têm maneira de saber onde estão até que você lhes diga, e assim escolher a opção segura "mundial" no seu interesse.

Se o seu router, por outro lado, estiver configurado no canal 12 ou 13, o seu Raspberry Pi Zero W (ou qualquer outro Pi, incluindo o Pi 3 B+) não poderá ver o seu router.

Mas eu não preparei o meu router para usar este canal.

Nem eu. Tudo estava funcionando bem até cerca das 4 da manhã - então o roteador de repente decidiu que queria mudar para este canal, já que há menos interferência dos vizinhos.

Seu roteador pode mudar de repente, e você se verá investigando um problema difícil.

Como posso determinar se este é o meu problema?

Use uma ferramenta de digitalização WLAN.

Eu uso o inSSIDer para casa. Infelizmente não parece mais ser grátis, mas existem alternativas por aí.

imagem

Como pode ver nesta imagem de ecrã, a nossa rede utiliza canais 13 e 9. (Porque é uma rede 802.11 n que utiliza a ligação de canais para dois canais de 20 MHz de largura).

O Canal 13 não está disponível nos EUA e, portanto, não está disponível no Raspberry Pi por padrão.

A solução: CRDA

Você precisa instalar alguns pacotes, e configurá-los adequadamente, a fim de configurar o país WiFi.

No Raspbian, isto é muito fácil e direto, já que todos os pacotes necessários foram pré-instalados para você.

Use sudo raspi-config como uma ferramenta para definir o país WiFi.

No Alpine Linux, mais algum trabalho é necessário. Vou guiá-lo passo a passo neste blog, para compartilhar o que aprendi, e o que me levou a um dia inteiro de trabalho para aprender. Espero que você esteja pronto em 20 minutos ou menos.

Haverá mais posts no blog sobre o Alpine Linux no Raspberry Pi, por enquanto focamos nesta questão específica de conectividade WiFi para os cidadãos europeus.

Funcionando como raiz

No seguinte tutorial, presumo que você execute as operações como usuário raiz.

Se você não é root, torne-se root como apropriado.

Uma nota sobre o sistema de arquivos apenas de RAM da Alpine

O Alpine Linux tem a grande vantagem de poder correr completamente só de leitura a partir do seu cartão SD. Isto significa, por exemplo, que você pode desconectar o Raspberry Pi durante a operação sem corromper o sistema de arquivos.

É claro que deve haver a possibilidade de aplicar as suas alterações ao sistema base durante o desenvolvimento.

O comando é:

lbu commit -d

Importante: lbu commit talvez precise a ser criado para salvar subdiretórios específicos que são modificados (usando lbu include - consulte o link abaixo para obter detalhes).

Consulte a página seguinte para obter mais detalhes:

Criar Repositórios

nota: por padrão apenas o vi é instalado no Alpine Linux. Se você quiser adicionar o nano, use o seguinte comando:

apk add nano

Edite os repositórios (mude vi com nano se você o instalou):

vi /etc/apk/repositorios

Adicione / substitua o seguinte (leia o comentário no final para mais informações):

/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

Todos os três repositórios de borda são necessários, já que pacotes diferentes residem em repositórios diferentes.

Instalar os pacotes necessários

Execute o seguinte comando:

apk adicionar wireless-regdb crda iw

Explicação:

  • wireless-regdb contém os binários do banco de dados regulatório sem fio.
  • crda é a ferramenta de espaço do usuário que atualiza a informação regulatória para o kernel
  • iw são utilitários de configuração sem fio, que você usará para definir o domínio regulatório (país)

Verifique o domínio regulatório atual

Corre:

iw reg get

Isto mostrará o domínio actual (muito provavelmente o país 00: DFS-UNSET). Aqui está um screenshot do que pretendemos (no nosso caso DE para a Alemanha):

imagem

Editar regras mdev

A seguir, a posição da nova entrada é muito importante - ela deve estar no topo, apenas antes de a linha $MODALIAS. Caso contrário, isto não vai funcionar!!

vi /etc/mdev.conf

insira a seguinte nova linha imediatamente antes da linha $MODALIAS:

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

Aqui está uma captura de tela do arquivo editado:

imagem

Referência:

Criar nova entrada modprobe.d

Corre:

touch /etc/modprobe.d/cfg80211.conf

vi /etc/modprobe.d/cfg80211.conf

Insira a seguinte linha (se necessário ajuste DE ao seu país - código de duas letras):

opções cfg80211 ieee80211_regdom=DE

Salve o arquivo.

Este ficheiro irá garantir que o seu domínio regulador é aplicado correctamente no arranque.

Referência:

Alternativamente: iw

Você pode, alternativamente, definir o domínio regulador usando iw (pode ser necessário, além do acima mencionado? O meu teste mostra que isto não cola, no entanto).

iw reg set DE

Aqui está uma imagem do ecrã:

imagem

Finalizar

Corra (se necessário):

lbu commit -d

Reiniciar. Seu Pi Zero W agora também deve ser capaz de se conectar ao canal 12 e ao canal 13!

Uma nota sobre o crda

crda é não supostamente gerido por ti, o utilizador. É executado como uma aplicação de ajuda por iw.

Um hack em bruto que "pode" funcionar quando a depuração se segue. Funciona, às vezes. Raramente, na verdade.

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

muitas vezes falharia para mim com o seguinte resultado:

não definiu o domínio regulatório -22

Mesmo agora, depois de eu conseguir definir o país correctamente, este comando falhará a maior parte do tempo... Presumo que seja devido a condições raciais.

Tanto quanto eu entendo, iw define certas variáveis de ambiente, que por sua vez disparam o mdev para executar /sbin/crda, para enviar estas alterações para o kernel.

iw não é a única ferramenta que pode alterar o domínio regulador do kernel; o wpa-supplicant também deve ser capaz de o fazer.

E, como você já viu, cfg80211.conf também é capaz de fazer isso.

O regulatory.bin é instalado em /usr/lib/crda.

Você NÃO precisa do pacote crda-dev para a solução descrita neste post do blog.

Uma nota sobre o arquivo do repositório

Se você remover / comentar os fontes do repositório que foram adicionados no início, os pacotes "desaparecem" do seu sistema.

Precisarei investigar isso mais a fundo, pois acabei de começar a trabalhar com o Alpine Linux.

Por enquanto, não remova linhas de repositório para pacotes que você instalou no seu sistema.