Compreendendo o wpa_supplicant

6

TL; DR . Eu preciso chegar ao fundo:

  1. por que há erros relacionados a ioctl ao usar o wext driver,
  2. por que não consigo usar o nl80211 driver.

Ao executar wpa_supplicant I obtenha erros estranhos (observe as linhas que começam com ioctl abaixo):

$ sudo wpa_supplicant -D wext -i wlan0 -c wpa_supplicant.conf
Successfully initialized wpa_supplicant
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan0: Trying to associate with 04:8d:38:59:2d:63 (SSID='netis' freq=2457 MHz)
wlan0: Association request to the driver failed
wlan0: Associated with 04:8d:38:59:2d:63
wlan0: WPA: Key negotiation completed with 04:8d:38:59:2d:63 [PTK=CCMP GTK=TKIP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 04:8d:38:59:2d:63 completed [id=0 id_str=]

Eu preciso saber o porquê de haver ioctl errors .

Algumas notas:

  • meu objetivo aqui é aprender ; Eu quero me livrar dos erros, mesmo que isso signifique enviar um patch para wpa_supplicant , para Raspbian, ou para o próprio kernel / driver do linux,
  • não há problema com WiFi; está funcionando; Eu obtenho a conexão com a saída acima, não há problema com isso,
  • se é impossível se livrar de erros no meu caso, eu gostaria de entender por que isso é exatamente
  • Eu não tentei testar a versão mais atualizada de & Versões RC do kernel Linux; procurando evidências (um commit no repositório de kernel do linux) que eu ajudei antes de mergulhar na compilação do meu próprio kernel,
  • Encontrei os erros no código-fonte, aqui e aqui respectivamente. Não tenho certeza de onde ir a partir daí.

O que aprendi até agora

  1. A execução de wpa_supplicant com nl80211 não está funcionando:

    $ sudo wpa_supplicant -D nl80211 -i wlan0 -c wpa_supplicant.conf
    Successfully initialized wpa_supplicant
    nl80211: Driver does not support authentication/association or connect commands
    wlan0: Failed to initialize driver interface
    

    Por que não? Eu pensei que nl80211 é superior a wext :

    Is WE being further developed? No it is not. Only bug fixes are being accepted for WE.

    What is Wireless-Extensions' replacement? New development should be focused on cfg80211 and nl80211.

    https://wireless.wiki.kernel.org/en/developers/Documentation/Wireless-Extensions

  2. De acordo com esta lista , o meu dispositivo RTL8188CUS é suportado pelo driver 8192cu , que é carregado como um módulo do kernel (veja abaixo),

  3. Compilar e executar wpa_supplicant versão 2.5 produz os mesmos erros ioctl .

Sobre o meu ambiente

Versão da ação de wpa_supplicant :

$ wpa_supplicant -v 
wpa_supplicant v2.3
Copyright (c) 2003-2014, Jouni Malinen <[email protected]> and contributors

Conteúdo de wpa_supplicant.conf :

$ cat wpa_supplicant.conf 
network={
  ssid="my_network_name"
  psk="my_password"
}

Lista de dispositivos USB:

$ lsusb
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Versão da distribuição:

$ uname -a
Linux raspberrypi 4.1.18+ #846 Thu Feb 25 14:11:56 GMT 2016 armv6l GNU/Linux

Módulos de kernel carregados:

$ lsmod
Module                  Size  Used by
cfg80211              479279  0 
rfkill                 21508  1 cfg80211
8192cu                556175  0 
bcm2835_gpiomem         3703  0 
snd_bcm2835            22502  0 
bcm2835_rng             2207  0 
snd_pcm                92829  1 snd_bcm2835
snd_timer              22164  1 snd_pcm
snd                    67534  3 snd_bcm2835,snd_timer,snd_pcm
uio_pdrv_genirq         3526  0 
uio                    10078  1 uio_pdrv_genirq
ipv6                  358702  24

Conteúdo de ifconfig :

$ ifconfig
eth0      (...omitted for brevity...)

lo        (...omitted for brevity...)

wlan0     Link encap:Ethernet  HWaddr 00:f1:40:41:03:a7  
          inet addr:192.168.1.104  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::c085:fb91:3e68:a44d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:38 errors:0 dropped:61421 overruns:0 frame:0
          TX packets:62 errors:0 dropped:4 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19804518 (18.8 MiB)  TX bytes:1192972 (1.1 MiB)

Atualização em 10/8/2016 : por sugestão Rui F Ribero abaixo, eu tentei usar drivers não oficiais . Resultados:

  1. Este erro: ioctl[SIOCSIWENCODEEXT]: Invalid argument agora desapareceu! No entanto ioctl[SIOCSIWAP]: Operation not permitted ainda está presente.

  2. wpa_supplicant ainda não funciona com o driver nl80211 agora não oficial. Só que desta vez a saída tem uma nova mensagem começando com deinit :

    $ sudo ./wpa_supplicant -D nl80211 -i wlan0 -c wpa_supplicant.conf
    Successfully initialized wpa_supplicant
    nl80211: Driver does not support authentication/association or connect commands
    nl80211: deinit ifname=wlan0 disabled_11b_rates=0
    wlan0: Failed to initialize driver interface
    
por gmile 09.03.2016 / 18:33

2 respostas

5

O firmware barato do Realtek, os drivers do kernel do linux e o hardware em si são terrivelmente problemáticos.

As pessoas na comunidade ARM têm trabalhado dia e noite para tentar mitigar alguns dos problemas, suportando versões antigas dos módulos do kernel do realtek e versões antigas do hostapd, e também versões antigas do firmware.

Um dos drivers deportados para o seu chip está em link e este tópico fala sobre como instalá-lo.

Por favor, leia também a minha resposta relacionada: Problemas de Wi-Fi usando o adaptador ASUS USB-N13 e o tópico relacionado no fórum do armbian que eu indico lá. Lamobo-R1 wifi instável no modo AP ("host") - melhor comprar um bom dongle wifi com suporte linux adequado

Eu também tenho uma máquina framboesa compatível e um chip realtek. Esqueça usar seu chip para serviços de AP, é um mundo de dor. Como cliente wifi, também terá seus problemas.

Eu aconselho a comprar um ralink dual frequency 2.4GHz / 5GHz para cerca de 10USD no aliexpress, e ser feito com ele. link

    
por 09.03.2016 / 18:57
1

Instale dkms Faça o download do fixo:

 git clone https://github.com/pvaret/rtl8192cu-fixes.git

Configure o módulo DKMS (como root):

dkms add ./rtl8192cu-fixes

Compile e instale-o (como root):

 dkms install 8192cu/1.9

Atualize a lista de módulos:

 depmod -a

Bloqueie o módulo do kernel e desative a economia de energia:

 echo "blacklist rtl8192cu" > /etc/modules.d/8192.conf 
 echo "options 8192cu rtw_power_mgnt=0 rtw_enusbss=0" >> /etc/modules.d/8192cu

Descarregue o driver antigo e carregue o driver fixo:

 rmmod rtl8192cu rtl_usb rtlwifi rtl8192c_common 
 modprobe 8192cu
    
por 10.03.2016 / 01:11