ÍNDICE DE CONTEÚDO
- Criando uma distribuição Linux com Yocto Project para Toradex Colibri i.MX7
- Gravando imagem customizada Linux na Toradex Colibri i.MX7
- Conectando Toradex Colibri i.MX7 com WiFi
- Boot via microSD na 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ódulo | Toradex Colibri i.MX7D 512M v1.1C |
BaseBoard | Aster v1.1B |
Periférico | Adaptador USB Wireless 802.11b/g/n Edimax EW-7811Un |
Softwares
Sistema Operacional | GNU Linux Angstrom v2018.06 |
Kernel | 4.1.44-2.7.4 |
iw | 4.14 |
wpasupplicant | v2.6 |
systemd | 237 |
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:
1 2 |
# 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”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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:
1 2 3 4 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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:
1 2 3 4 5 6 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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.
1 2 |
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:
1 2 3 4 5 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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:
1 2 3 4 |
Created symlink /etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service → /lib/systemd/system/wpa_supplicant@.service. |
Para confirmar se deu certo, vamos passar o parâmetro status:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
● 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:
1 2 3 4 5 6 7 8 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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_interface | Nome 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 |
priority | Configuraçã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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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