Conectando Toradex Colibri i.MX7 com WiFi

Toradex Colibri i.MX7 com WiFi

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".

 

[email protected]:~# 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
[email protected]:~#
[email protected]:~# 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:

 

[email protected]:~# 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:

 

[email protected]:~# 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:

 

[email protected]:~# 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:

 

[email protected]:/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.

 

[email protected]:~# 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.

 

[email protected]:~# mkdir -p /etc/wpa_supplicant
[email protected]:~# 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:

 

[email protected]:~# 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:

 

[email protected]:~# 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:

 

[email protected]:~# 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:

 

[email protected]:~# systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected]

[email protected]:~# systemctl start [email protected]

 

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

 

[email protected]:~# systemctl status [email protected][email protected] - WPA supplicant daemon (interface-specific version)
   Loaded: loaded (/lib/systemd/system/[email protected]; 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/[email protected]
           └─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:

 

[email protected]:~# 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.

 

[email protected]:~# 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)

[email protected]:~# 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

 

http://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

Outros artigos da série

<< Gravando imagem customizada Linux na Toradex Colibri i.MX7Boot via microSD na Toradex Colibri i.MX7 >>
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Cleiton Bueno
Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

Deixe um comentário

avatar
 
  Notificações  
Notificar