Arquivo da categoria: Linux
Problemas com adaptador USB wi-fi Ralink 2870 / 3070 em Raspberry Pi e Linux
ATENÇÃO: A informação abaixo só é válida se você utilizar o raspberry pi 3.6. A partir da versão 3.10 o driver rt2800usb nativo já reconhece esses adaptadores. Caso você tenha um raspberry pi versão 3.10 e mesmo assim o adaptador não seja reconhecido (provavelmente através de um upgrade da versão 3.6 para a 3.10) você precisa atualizar os firmwares utilizados pelo kernel com os comandos abaixo. Após o término do reboot o adaptador deve funcionar.
sudo apt-get install rpi-update
sudo rpi-update
sudo shutdown -r now
Comprei um mini adaptador Ralink para usar em um Raspberry Pi e percebi que ia ter algum trabalho quando precisei baixar o driver mais recente do fabricante para poder funcionar no Windows 7.
No Linux (Ubuntu 13.04) aparentemente funcionava normal, pois era reconhecido pelo comando lsusb ao ser plugado na porta USB:
Bus 001 Device 004: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter
Porém não conseguia conectar ou mesmo reconhecer nenhuma rede. Uma olhada com o comando dmesg mostrava algo errado:
[ 765.293113] ra0 -> rt2800_init_eeprom: Error - Invalid RF chipset 0x3070 detected. [ 765.293143] ra0 -> rt2x00lib_probe_dev: Error - Failed to allocate device.
Procurando nos forums achei uma dica, onde um usuário havia desmontado o adaptador e verificou que o chip usado era um Ralink RT5370:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=31305
E outro usuário (geekamole) postou a solução em seu blog para compilar um driver novo no Linux:
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=31305
Basicamente ele baixou o driver no site da Mediatek (empresa que comprou a Ralink) os drivers originais para Linux e editou dois arquivos (rt2800.h e rt2800lib.c) e adicionou para cada linha do RT5370 um linha idêntica, porém com a identificação USB do RT3070.
Os fontes para compilar o módulo para Linux estão nesse link:
http://www.mediatek.com/_en/07_downloads/01_windows.php?sn=501
Copiei o código exatamente como o geekamole postou, para dar uma idéia. O código dele está em formato diff, um utilitário unix muito usado para fazer alterações parciais em arquivos. As linhas importantes são as que tem um sinal de + na frente, são as linhas adicionadas.
--- /usr/src/linux/drivers/net/wireless/rt2x00/rt2800.h +++ rt2800.h @@ -68,6 +68,7 @@ #define RF3320 0x000b #define RF3322 0x000c #define RF3053 0x000d #define RF3290 0x3290 #define RF5360 0x5360 #define RF5370 0x5370 +#define RF3070 0x3070 --- /usr/src/linux/drivers/net/wireless/rt2x00/rt2800lib.c +++ rt2800lib.c @@ -2221,6 +2221,7 @@ break; case RF5360: case RF5370: + case RF3070: case RF5372: case RF5390: case RF5392: @@ -2234,6 +2235,7 @@ rt2x00_rf(rt2x00dev, RF3322) || rt2x00_rf(rt2x00dev, RF5360) || rt2x00_rf(rt2x00dev, RF5370) || + rt2x00_rf(rt2x00dev, RF3070) || rt2x00_rf(rt2x00dev, RF5372) || rt2x00_rf(rt2x00dev, RF5390) || rt2x00_rf(rt2x00dev, RF5392)) { @@ -2746,6 +2748,7 @@ case RF3290: case RF5360: case RF5370: + case RF3070: case RF5372: case RF5390: case RF5392: @@ -4775,6 +4778,7 @@ case RF3322: case RF5360: case RF5370: + case RF3070: case RF5372: case RF5390: case RF5392: @@ -5094,6 +5098,7 @@ rt2x00_rf(rt2x00dev, RF3322) || rt2x00_rf(rt2x00dev, RF5360) || rt2x00_rf(rt2x00dev, RF5370) || + rt2x00_rf(rt2x00dev, RF3070) || rt2x00_rf(rt2x00dev, RF5372) || rt2x00_rf(rt2x00dev, RF5390) || rt2x00_rf(rt2x00dev, RF5392)) { @@ -5182,6 +5187,7 @@ case RF3290: case RF5360: case RF5370: + case RF3070: case RF5372: case RF5390: case RF5392:
Após isso ser feito também é necessário alterar um arquivo do fonte da Ralink, o os/linux/config.mk e dentro dele e habilitar as opções para utilizar o wpa_supplicant:
HAS_WPA_SUPPLICANT=y HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
Sem isso o driver resultante não vai funcionar na maioria das configurações, já que todas as distribuições usam o wpa_supplicant.
Após essas alterações, basta compilar o driver :
$ make $ sudo make install
O arquivo com o módulo resultante da compilação é o rt5370sta.ko
Para compilar o driver para o Raspberry Pi ou você faz uma compilação cruzada (não consegui fazer, se eu acertar outra hora, colo o método aqui) ou compila direto no Raspberry, que foi o que eu fiz.
O usuário wiinick postou no fórum de suporte do Raspberry Pi o método que ele usou, segui a receita e tive sucesso:
http://www.raspberrypi.org/phpBB3/viewtopic.php?t=47830&p=387966
Primeiro é preciso preparar o Raspberry com os fontes, os comando abaixo são para quem tem a versão 3.6y, mas vale para as outras, bastando acertar os links de download. Baixe o pacote de download no github, pois ele tem um Makefile necessário para a configuração do sistema:
cd /usr/src sudo wget https://github.com/raspberrypi/linux/archive/rpi-3.6.y.tar.gz sudo tar xvfz rpi-3.6.y.tar.gz sudo su ln -s /usr/src/linux-rpi-3.6.y/ /lib/modules/3.6.11+/build cd /lib/modules/3.6.11+/build sudo make mrproper gzip -dc /proc/config.gz > .config make modules_prepare wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers exit
Após isso, baixe os drivers da Mediatek, altere os arquivos mencionados anteriormente e compile o módulo.
É necessário colocar o driver rt2800usb no blacklist para evitar conflitos com o driver modificado, edite o blacklist:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
e adicione a seguinte linha:
blacklist rt2800usb
Depois disso é só fazer o reboot e o adaptador wi-fi vai funcionar com seu Raspberry Pi.
Caso você tenha dificuldades para compilar o modulo, você pode baixar o arquivo binário compilado por mim por sua conta e risco.
Compilado nativamente em um Raspberry Pi versão 3.6.y:
https://dl.dropboxusercontent.com/u/29982302/rt5370sta.ko
Confira o checksum md5 para se certificar que o download não foi corrompido, copie para o diretório de módulos e acerte as permissões.
$ md5sum rt5370sta.ko 3673ade6dee27b9689722ca710830a9a $ sudo cp rt5370sta.ko /lib/modules/3.6.11+/kernel/drivers/net/wireless $ sudo chmod 644 /lib/modules/3.6.11+/kernel/drivers/net/wireless/rt5370sta.ko $ sudo chown root.root /lib/modules/3.6.11+/kernel/drivers/net/wireless/rt5370sta.ko