Conectando Toradex Colibri i.MX7 com WiFi

Toradex Colibri i.MX7 com WiFi
Este post faz parte da série Toradex Colibri i.MX7

Introdução

Neste artigo será abordada a instalação de um adaptador WiFi USB, configuração da rede wireless e o serviço para conectar na inicialização, como base será utilizada a Distribuição Linux do artigo Criando uma Distribuição Linux com Yocto Project para Toradex Colibri i.MX7, porém a maioria dos comandos é de fácil instalação em outras Distribuições, caso não a possua.

Hardwares

MóduloToradex Colibri i.MX7D 512M v1.1C
BaseBoardAster v1.1B
PeriféricoAdaptador USB Wireless 802.11b/g/n Edimax EW-7811Un

Softwares

Sistema OperacionalGNU Linux Angstrom v2018.06
Kernel4.1.44-2.7.4
iw4.14
wpasupplicantv2.6
systemd237

A image gerada no artigo Criando uma Distribuição Linux com Yocto Project para Toradex Colibri i.MX7 já possui o iw e wpasupplicant instalados. Caso a distribuição que esteja utilizando não os possua, pode instalar com apt, rpm ou opkg, exemplo com apt:

# apt-get update
# apt-get install iw wpasupplicant

Instalando adaptador wireless

Conectando o adaptador wireless na USB, logo em seguida podemos verificar que o kernel identificou e carregou o módulo do referido driver, analisando com “dmesg” e “lsusb”.

root@colibri-imx7:~# dmesg
[  238.028745] usb 1-1: new high-speed USB device number 3 using ci_hdrc
[  238.185240] rtl8192cu: Chip version 0x10
[  238.274212] rtl8192cu: MAC address: 80:1f:02:82:31:17
[  238.279423] rtl8192cu: Board Type 0
[  238.283193] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1
[  238.289170] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
[  238.302395] ieee80211 phy1: Selected rate control algorithm 'rtl_rc'
[  238.311459] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[  238.330820] usb 1-1: Direct firmware load for rtlwifi/rtl8192cufw_TMSC.bin failed with error -2
[  238.366795] usb 1-1: Falling back to user helper
[  238.396335] usb 1-1: Direct firmware load for rtlwifi/rtl8192cufw.bin failed with error -2
[  238.434118] usb 1-1: Falling back to user helper
[  238.465559] rtlwifi: Loading alternative firmware rtlwifi/rtl8192cufw.bin
[  238.487194] rtlwifi: Firmware rtlwifi/rtl8192cufw_TMSC.bin not available
root@colibri-imx7:~#
root@colibri-imx7:~# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Listando as interfaces de rede, pode-se visualizar somente as interfaces eth0 e lo:

root@colibri-imx7:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:14:2D:2C:6A:16  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Hosthttps://www.cisco.com/c/pt_br/support/docs/wireless-mobility/eap-fast/200322-Understanding-EAP-FAST-and-Chaining-imp.html
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B

Para não ter que reiniciar, pode-se subir a interface manualmente:

root@colibri-imx7:~# ifconfig wlan0 up
[   96.324277] rtl8192cu: MAC auto ON okay!
[   96.361411] rtl8192cu: Tx queue select: 0x05
[   97.234531] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready

Verificando novamente:

root@colibri-imx7:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:14:2D:2C:6A:16  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 80:1F:02:82:31:17  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Configurando interface e rede wireless

Próxima etapa, configurar o systemd com suporte ao nosso dispositivo wlan0, criando o arquivo /etc/systemd/network/12-wlan.network com o conteúdo a seguir:

root@colibri-imx7:/etc# cat /etc/systemd/network/12-wlan.network
[Match]
Name=wlan*

[Network]
DHCP=yes

Após incluir este arquivo, vamos reiniciar a placa. Ao voltar vamos usar o comando “iwlist” para realizar uma varredura na rede wireless e obter apenas SSID, Canal, Frequência e SNR.

root@colibri-imx7:~# iwlist wlan0 scan | egrep 'SSID.|Channel.|Freq.|Quality'
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=50/70  Signal level=-60 dBm  
                    ESSID:"B2OpenAP"
                    Channel:10
                    Frequency:2.457 GHz (Channel 10)
                    Quality=28/70  Signal level=-82 dBm  
                    ESSID:"SupermercadoZico"
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=22/70  Signal level=-88 dBm  
                    ESSID:"SegHotelAP2"
                    Channel:9
                    Frequency:2.452 GHz (Channel 9)
                    Quality=26/70  Signal level=-84 dBm  
                    ESSID:"JF"
                    Channel:3
                    Frequency:2.422 GHz (Channel 3)
                    Quality=18/70  Signal level=-92 dBm  
                    ESSID:"Fidelix."
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=24/70  Signal level=-86 dBm  
                    ESSID:"EVERTON"

Pronto! O adaptador e a interface estão funcionando, neste momento será criado o arquivo com as informações para conectar a rede wireless, e neste caso será no SSID B2OpenAP.

Primeiro confirme se existe o diretório /etc/wpa_supplicant. Caso não exista, crie. A seguir vamos partir da hipótese que não existe o diretório. Ele será criado e na sequência gerado o arquivo com a configuração da rede wireless que se deseja conectar.

root@colibri-imx7:~# mkdir -p /etc/wpa_supplicant
root@colibri-imx7:~# wpa_passphrase B2OpenAP "SenhaDaWifiAqui" > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

Note o uso do comando “wpa_passphrase” onde informamos o nome da rede (SSID) como sendo B2OpenAP e, logo a seguir, a senha da rede. É redirecionada a saída do comando para um arquivo criado em /etc/wpa_supplicant/wpa_supplicant-wlan0.conf. O importante nesta etapa é o correto nome da rede, a senha e o nome da interface no arquivo gerado, a nossa interface é wlan0.

Visualizando o arquivo gerado:

root@colibri-imx7:~# cat /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
network={
    ssid="B2OpenAP"
    psk=602c378a0bac7219caf47d1d717f5e851c90379ad9445a20cd4bdaa7536ac398
}

Antes de criar o serviço e reiniciar, pode-se validar se a configuração gerada está correta com o comando “wpa_supplicant” como a seguir:

root@colibri-imx7:~# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-wlan0.conf -i wlan0
Successfully initialized wpa_supplicant
wlan0: SME: Trying to authenticat[   34.921931] wlan0: authenticate with 54:b8:0a:7d:XX:YY
e with 54:b8:0a:7d:XX:YY (SSID=''B2OpenAP freq=2437 MHz)
[   34.943269] wlan0: send auth to 54:b8:0a:7d:XX:YY (try 1/3)
[   34.967462] wlan0: authenticated
wlan0: Trying to associate with 54:b8:0a:7d:XX:YY (SSID=''B2OpenAP’ freq=2437 MHz)
[   34.979332] wlan0: associate with 54:b8:0a:7d:XX:YY (try 1/3)
[   34.998181] wlan0: RX AssocResp from 54:b8:0a:7d:XX:YY (capab=0x431 status=0 aid=2)
[   35.219868] wlan0: associated
wlan0: Associated with 54:b8:0a:7d:XX:YY
wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlan0: WPA: Key negotiation completed with 54:b8:0a:7d:XX:YY [PTK=CCMP GTK=TKIP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 54:b8:0a:7d:XX:YY completed [id=0 id_str=]

Analisando a saída do comando, o dispositivo foi autenticado, associado e conectado. Agora o mesmo comando, porém utilizando uma senha incorreta:

root@colibri-imx7:~# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-wlan0.conf -i wlan0
Successfully initialized wpa_supplicant
wlan0: SME: Trying to authenticat[  928.205105] wlan0: authenticate with 54:b8:0a:7d:XX:YY
e with 54:b8:0a:7d:XX:YY (SSID=''B2OpenAP' freq=2437 MHz)
[  928.224290] wlan0: send auth to 54:b8:0a:7d:XX:YY (try 1/3)
[  928.268251] wlan0: authenticated
wlan0: Trying to associate with 54:b8:0a:7d:XX:YY (SSID=''B2OpenAP' freq=2437 MHz)
[  928.279414] wlan0: associate with 54:b8:0a:7d:XX:YY (try 1/3)
[  928.290009] wlan0: RX AssocResp from 54:b8:0a:7d:XX:YY (capab=0x431 status=0 aid=4)
[  928.300836] wlan0: associated
[  928.303952] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
wlan0: Associated with 54:b8:0a:7d:XX:YY
wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
[  934.485116] wlan0: deauthenticated from 54:b8:0a:7d:XX:YY (Reason: 15=4WAY_HANDSHAKE_TIMEOUT)
wlan0: CTRL-EVENT-DISCONNECTED bssid=54:b8:0a:7d:XX:YY reason=15
wlan0: WPA: 4-Way Handshake failed - pre-shared key may be incorrect
wlan0: CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="'B2OpenAP" auth_failures=1 duration=10 reason=WRONG_KEY
^Cnl80211: deinit ifname=wlan0 disabled_11b_rates=0
wlan0: CTRL-EVENT-TERMINATING

Pode-se ver a linha referente ao WPA sobre falha na chave, é um excelente recurso para validar configuração antes de parametrizar os serviços e ficar reiniciando diversas vezes a placa.

Como última etapa, configurar o systemd para iniciar e conectar nossa wireless:

root@colibri-imx7:~# systemctl enable wpa_supplicant@wlan0
Created symlink /etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service → /lib/systemd/system/wpa_supplicant@.service.

root@colibri-imx7:~# systemctl start wpa_supplicant@wlan0

Para confirmar se deu certo, vamos passar o parâmetro status:

root@colibri-imx7:~# systemctl status wpa_supplicant@wlan0
● wpa_supplicant@wlan0.service - WPA supplicant daemon (interface-specific version)
   Loaded: loaded (/lib/systemd/system/wpa_supplicant@.service; indirect; vendor preset: enabled)
   Active: active (running) since Thu 2018-07-05 21:50:25 UTC; 14s ago
 Main PID: 375 (wpa_supplicant)
   CGroup: /system.slice/system-wpa_supplicant.slice/wpa_supplicant@wlan0.service
           └─375 /usr/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-wlan0.conf -iwlan0

Jul 05 21:50:25 colibri-imx7 systemd[1]: Started WPA supplicant daemon (interface-specific version).
Jul 05 21:50:25 colibri-imx7 wpa_supplicant[375]: Successfully initialized wpa_supplicant
Jul 05 21:50:26 colibri-imx7 wpa_supplicant[375]: wlan0: SME: Trying to authenticate with 54:b8:0a:7d:XX:YY (SSID='B2OpenAP' freq=2437 MHz)
Jul 05 21:50:26 colibri-imx7 wpa_supplicant[375]: wlan0: Trying to associate with 54:b8:0a:7d:XX:YY (SSID=''B2OpenAP freq=2437 MHz)
Jul 05 21:50:26 colibri-imx7 wpa_supplicant[375]: wlan0: Associated with 54:b8:0a:7d:XX:YY
Jul 05 21:50:26 colibri-imx7 wpa_supplicant[375]: wlan0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
Jul 05 21:50:26 colibri-imx7 wpa_supplicant[375]: wlan0: WPA: Key negotiation completed with 54:b8:0a:7d:XX:YY [PTK=CCMP GTK=TKIP]
Jul 05 21:50:26 colibri-imx7 wpa_supplicant[375]: wlan0: CTRL-EVENT-CONNECTED - Connection to 54:b8:0a:7d:XX:YY completed [id=0 id_str=]

Outra forma é executar o comando “dmesg” e uma saída como a abaixo será exibida em caso de sucesso:

root@colibri-imx7:~# dmesg
...
...
[   14.270921] wlan0: send auth to 54:b8:0a:7d:XX:YY (try 1/3)
[   14.284233] wlan0: authenticated
[   14.288719] wlan0: associate with 54:b8:0a:7d:XX:YY (try 1/3)
[   14.304973] wlan0: RX AssocResp from 54:b8:0a:7d:XX:YY (capab=0x431 status=0 aid=4)
[   14.525954] wlan0: associated

Reiniciando o módulo Colibri i.MX7 e verificando se ele se conecta na rede ao iniciar.

root@colibri-imx7:~# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 80:1F:02:82:31:17  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::821f:2ff:fe82:3117/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:65 errors:0 dropped:0 overruns:0 frame:0
          TX packets:98 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12756 (12.4 KiB)  TX bytes:15745 (15.3 KiB)

root@colibri-imx7:~# ping 8.8.8.8 -c 4
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=115 time=54.856 ms
64 bytes from 8.8.8.8: seq=1 ttl=114 time=78.194 ms
64 bytes from 8.8.8.8: seq=2 ttl=115 time=62.073 ms
64 bytes from 8.8.8.8: seq=3 ttl=114 time=88.165 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 62.073/70.822/88.165 ms

Dicas

O comando “wpa_passphrase” gera o básico, no entanto, existem diversos parâmetros que podem ser utilizados, alguns:

ctrl_interfaceNome do arquivo para se criar um UNIX domain socket para alguns programas userspace comunicarem, exemplo o wpa_cli
fast_reauth

EAP fast re-authentication – CISCO EAP-FAST

key_mgmt

WPA-PSK

WPA-EAP

IEEE8021X

NONE

pairwise

CCMP

TKIP

NONE

priorityConfiguração de prioridade quando se tem mais de uma rede configurada

Outras opções podem ser conferidas no manual do wpa_supplicant.conf.

Utilizando o comando “iwlist” é possível obter diversas informações sobre a rede, exemplo abaixo nossa rede B2OpenAP:

 Cell 02 - Address: 54:B8:0A:7D:XX:YY
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=70/70  Signal level=-36 dBm  
                    Encryption key:on
                    ESSID:"B2OpenAP"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                              18 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=0000000150adfce7
                    Extra: Last beacon: 160ms ago
                    IE: Unknown: 000743522D57494649
                    IE: Unknown: 010882848B961224486C
                    IE: Unknown: 030106
                    IE: Unknown: 2A0100
                    IE: Unknown: 32040C183060
                    IE: Unknown: 2D1AEE1117FFFF0000010000000000000000000000000C0000000000
                    IE: Unknown: 3D1606000600000000000000000000000000000000000000
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : TKIP CCMP
                        Authentication Suites (1) : PSK
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : TKIP CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD180050F2020101000003A4000027A4000042435E0062322F00
                    IE: Unknown: 0B05040008127A
                    IE: Unknown: 4A0E14000A002C01C800140005001900
                    IE: Unknown: 7F0101
                    IE: Unknown: DD07000C4307000000
                    IE: Unknown: 0706425220010D10

Boa diversão e até próxima!

Saiba mais

Amazon FreeRTOS, núcleos heterogêneos e os novos Apalis e Colibri iMX8

Embarcando ScadaBR com Yocto na Toradex Colibri i.MX6

CoM Toradex COLIBRI T20 e Carrier Board Iris

Referências

https://netbsd.gw.com/cgi-bin/man-cgi?wpa_supplicant.conf+5+NetBSD-current
https://www.cisco.com/c/pt_br/support/docs/wireless-mobility/eap-fast/200322-Understanding-EAP-FAST-and-Chaining-imp.html

Toradex Colibri i.MX7

Gravando imagem customizada Linux na Toradex Colibri i.MX7 Boot via microSD na Toradex Colibri i.MX7
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Linux Embarcado » Conectando Toradex Colibri i.MX7 com WiFi

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: