Há uns 15 dias instalei o Fedora Core 8 em meu notebook mas até hoje não tinha tido tempo para configurar tudo o que preciso para trabalhar. Aproveitei o fim de semana para colocar o note em dia e eis que a instalacão do adaptador Wi-Fi USB me deu um pouco de trabalho.
Primeiramente é preciso descobrir o chip que o adaptador utiliza. Normalmente a marca e nome fantasia não resolvem. Para saber o ID real do chip use o comando “lsusb” no shell do Linux.
O resultado deve ser algo tipo:
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 009: ID 0457:0163 Silicon Integrated Systems Corp.
A linha que nos interessa é a que tem o ID 0457:0163. Se você tiver vários dispositivos no USB e os nomes gerarem confusão, desligue-os temporariamente e teste com apenas o adaptador Wi-Fi para saber seu ID.
Jogando esse ID no Altavista encontro que o chip que possui esse ID é o SiS163u.
Agora que sabemos o modelo, precisamos encontrar um modulo de kernel para esse chip. No presente momento não me parece que exista um driver Linux para esse chip, assim precisamos utilizar o NDISWrapper para pegar emprestado um driver de Windows XP.
Instalando o NDISWrapper
Para comecar a instalacão, crio o diretorio /root/wifi para baixar os arquivos que vou precisar, compilar o ndiswrapper e etc.
O NDISWrapper, conforme o nome em inglês sugere, é um “embrulho” em torno do padrão NDIS do Windows. As chamadas do NDIS são interceptadas por essa camada de código e traduzidas para algo que o Kernel do Linux pode entender, assim migrando o driver do Windows para o Linux de forma quase transparente. Nem todos os drivers funcionam, mas pelo que se tem visto o desenvolvimento do Wrappers anda em ritmo acelerado e hoje grande parte dos cartões PCMCIA, placas PCI e dispositivos via USB estão funcionando através desse artifício. Mais uma conquista dos hackers Linux que, com isso, conseguiram migrar milhares de drivers nativos do Windows para o Linux. Como todo wrapper, este artificio torna o driver necessáriamente mais lento por inserir uma camada de compatibilidade entre o hardware e o kernel. Porém não é perceptível para redes caseiras visto que nossas conexões internet normalmente são muito mais lentas que o bus utilizado, neste caso o USB. Para redes de alta performance, clusters, etc, este tipo de wrapper poderia se tornar um gargalo. Não é nosso caso, então vamos prosseguir.
Baixe o ndiswrapper mais recente neste link do Sourceforge. Escolha a versão mais recente e estável da lista, no meu caso a 1.52. Baixe o pacote ndiswrapper-1.52.tar.gz dentro da pasta /root/wifi/ e instale seguindo os seguintes passos:
cd /root/wifi/
tar xjvf ndiswrapper-1.52.tar.gz
cd ndiswrapper-1.52
./configure –prefix=/usr
make install
O make install irá chamar as dependências, que incluem o make e instalará o ndiswrapper no /usr/sbin/ndiswrapper assim que a compilacão terminar. Não devem ocorrer erros nessa etapa, que é bastante simples. Se tiver algum problema me envie pelo campo de comentários deste post ou tente resolver lendo atenciosamente quaisquer mensagens na tela. Na instalacão padrão do Fedora não houve qualquer problema, então vamos adiante.
Encontrando o Driver NDISWrapper correto
Jogo a consulta ’0457:0163 ndiswrapper’ novamente no Altavista e recebo no primeiro resultado esta lista de dispositivos aceitos, há 2 ou 3 drivers compatíveis com esse chip. Escolho o seguinte, ao acaso:
# Card: Atlantis-Land Wireless USB Adapter (A02-UP-W54). 54mbps
* Chipset: SiS163
* usbid: 0457:0163
* Driver: http://www.atlantis-land.com/firmware/3463_A02-UP-W54%5BV10-20%5D.ZIP
* Other: I mount this on a slackware 10.2 with a 2.4.31 stable kernel. The device work very well!
Faco o download do link acima no diretorio /root/wifi e o descompacto assim:
cd /root/wifi
unzip 3463[teclo TAB para completar o nome extenso]
O pacote .ZIP descompactará um diretório Drivers, o qual acessamos e prosseguimos assim:
cd Drivers
cd Windows\ XP
E agora vem a parte importante, instalamos o driver Windows em nossa máquina com o seguinte comando:
ndiswrapper -i SiS163u.INF
Testamos a instalacão com o comando:
ndiswrapper -l
O qual deve retornar algo tipo:
sis163u: driver installed
device (0457:0163) present
Geramos o modules.dep novamente com o comando
depmod -a
E inserimos o módulo ndiswrapper no kernel atual através do comando:
modprobe ndiswrapper
Testamos se está tudo ok com o comando
lsmod | grep ndis
Cujo resultado deve ser algo semelhante a :
ndiswrapper 168860 0
Para termos certeza, vemos se o kernel tentou nos dizer algo no syslog através do comando
dmesg
Em alguma parte no fim do registro dmesg deve haver algo semelhante a :
ndiswrapper: driver sis163u (OEM,11/29/2004,5.1.1039.1020) loaded
wlan0: ethernet device 00:11:22:33:44:55 using NDIS driver: sis163u, version:0×10000000, NDIS version: 0×501, vendor: ‘NDIS Network Adapter 0457:0163.F.conf
wlan0: encryption modes supported: WEP, TKIP with WPA; AES/CCMP with WPA
No momento em que inserimos o módulo no kernel, este passa a enxergar o nosso hardware como um dispositivo de rede, wlan0 em nosso caso, que pode ser configurado com as ferramentas de rede tradicionais do Linux. No caso da interface Wi-Fi temos que fornecer os específicos da nossa rede para tentarmos obter um lease DHCP de nosso Access Point.
Configuracão Wi-Fi
Aquí em casa o access point é um D-Link DI-524 padrão 802.11g. O prédio onde moro está qualhado de access points abertos e sem senhas, porém já pago minha ADSL e não desejo abusar da rede alheia. Assim, fecho o access point com WPA e crio uma chave bem segura.
A configuracão do WPA no Fedora 8 é mais prática usando o wpa_supplicant. Este método exige que tenha algumas coisas configuradas corretamente na máquina, a saber: o arquivo /etc/wpa_supplicant/wpa_supplicant.conf
Primeiro vamos ver que redes estão disponíveis para conectar, usando o comando:
iwlist scan
Que resulta em
wlan0 Scan completed:
Cell 01 – Address: 77:88:99:aa:bb:cc
[DIVERSAS INFORMACÕES REMOVIDAS]
Procure a linha ESSID. Essa é a identificacão da rede encontrada, é nela que iremos conectar. Se você fechou seu AP com uma senha WPA, é preciso inserí-la no seu arquivo wpa_supplicant.conf. A senha não é fornecida em ASCII, e sim numa string hexadecimal que é facilmente gerada com o comando:
wpa_passphrase MEUSSID
Ele pedirá para digitar a senha do access point(AP) e o resultado pode ser colado diretamente no arquivo wpa_supplicant.conf. Exemplo:
#reading passphrase from stdin
teste123
O resultado é
network={
ssid=”minhawan”
psk=7d7ad77ad7ad7ad7a7d7ad7a7d7ad7a7d7ad7a7da7d7ad7a7d7ad
}
Copie e cole esse texto diretamente em /etc/wpa_supplicant/wpa_supplicant.conf substituindo, claro, o ssid pelo seu nome de rede e acrescentando quaisquer dados necessários à sua rede. Para cada rede sem fio que deseje conectar-se crie uma secão network={} nesse arquivo. Os parâmetros você obtem com o seguinte comando.
man wpa_supplicant.conf
Estamos quase lá! Agora coloque o wpa_supplicant para suplicar para você, através do comando:
wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -iwlan0 &
Substituindo o nome de interface e caminho do arquivo de acordo(exemplo, se voce tiver diversos arquivos, um para cada cidade onde trabalha ou algo assim) e dependendo do driver pode ser eth1 ou wlan0, etc. No caso do sis163u é wlan0. Coloco para trabalhar como processo de fundo utilizando o & no fim do comando.
Agora obtenha um endereco de rede à partir de seu AP com o comando:
dhclient wlan0
E se tudo correr bem você deverá receber um IP!!! O próprio dhcliente alterará seu /etc/resolv.conf para conter o nameserver correto.
Em meu caso precisei setar a rota principal na mão por algum motivo. Ainda não descobrí por que o DHCP não se encarregou disso, porém é muito simples em meu caso. Verifiquei que o IP obtido foi 192.168.1.25 e sabia que meu modem ADSL é o 192.168.1.1, então adicionei a rota default assim:
route add default gw 192.168.1.1
Novamente, não sei por que o DHCP não se encarregou desse passo final…deve haver uma solucão mais elegante, mas no momento preciso voltar ao trabalho!
Conclusão
São os mesmos passos que devem ser seguidos em qualquer sistema operacional, a diferenca principal é entre configurar as coisas em modo texto ou através de uma interface mais amigável. Existem diversas ferramentas para trabalhar essa configuracão em modo gráfico e outras para operar o wpa_supplicant dentro do X – como por exemplo o wpa_supplicant_gui – porém eu já tenho costume de trabalhar no shell. O NDISwrapper é uma mão na roda, esta solucão só foi possível gracas a ele!
Maravilha!!! mas não tem um jeito mais facil pra configurar??? To lutando ha uma semana pra instalar um em um iMac pra coloca-lo em rede com o Virtua roteado da minha maquina… O Adaptador conecta mas não acha o router, as vezes trava o some… So me diz isso…vou ter que fazer tudo que vc. fez? Valeu e parabens!!
Olá nanyx, eu tive alguns problemas com um router da LG. Ele não conversa muito bem com alguns adaptadores sem-fio de notebooks HP e Sony. Nunca tentei no iMac.
Se não tiver driver nativo pro iMac vai ter que fazer tudo isso aí acima! Mas você só faz uma vez, depois é transparente, demora uns 20 minutos apenas se tudo correr bem.
Se ele enxerga o router mas não acessa então parece problema de telecomunicação e não de hardware ou software. Você está longe do router ou tem paredes no caminho? Está usando a chave correta? Tem que verificar tudo isso…é trabalhoso, mas você só tem que acertar a primeira vez, depois é automático.
Um abraço, Zé
Fui fazer a instalação do ndiswrapper-1.53, no fedora7, quando digitei o comando: “./configure -prefix=/usr” deu o erro ./configure: Arquivo ou diretorio não encontrapa, por é isso, falta instalar mais alguma coisa no linux?
Agradeço antecipadamente pela atenção
Adérito
Olá Adérito, pode ser que você não tenha o Autoconf instalado.
Para compilar à partir dos fontes é preciso autoconf e a suite gcc instalada.
Ao digitar autoconf –help você obtém uma saída?
Caso negativo instale com
yum install autoconf
ou pegue os fontes em
http://www.gnu.org/software/autoconf/
E gcc -v ?
Se tudo estiver nos conformes, basta acessar o diretório do ndiswrapper-1.53 com
cd ndiswrapper-1.53
e rodar
./configure –prefix=/usr
Att
Zé Melo