Usare l'adattatore USB 802.11n WN111v2 con Ubuntu

Questo articolo è molto vecchio e potrebbe essere obsoleto

Ormai ogni negozio di informatica sta commercializzando i nuovi prodotti WiFi compatibili con il nuovo standard 802.11n che dovrebbe garantire una velocità massima di trasferimento di 300Mbps oltre ad una maggiore copertura, il tutto grazie all'uso di 2 canali radio anziché uno. Ma torniamo a noi, ho acquistato un nuovo router NetGear con incluso un adattatore WiFi USB siglato WN111v2. Se avete già l'adattatore WPN111 sappiate che cambia profondamente dal WN111v2. Purtroppo Linux non supporta nativamente il chipset impiegato il quale sembra essere un Atheros. La soluzione c'è, è un po' macchinosa ma è possibile far funzionare la WN111v2 su Linux grazie ai driver otus, ancora piuttosto instabili.
Post image

Con Ubuntu 9.10 ed in generale col kernel 2.6.31 la scheda viene rilevata correttamente grazie ai driver ar9170usb ma solo con lo standard 802.11g.

Iniziamo col verificare di avere il giusto adattatore USB:

$ lsusb | grep 0846:9001
Bus 004 Device 009: ID 0846:9001 NetGear, Inc.

Se restituisce una linea con la scritta NetGear, Inc. e i numeri 0846:9001 possiamo continuare.

Procediamo quindi col preparare tutti i pacchetti necessari per compilare i driver otus e una versione modificata di wpa_supplicant.

sudo apt-get install linux-headers-generic git-core libssl-dev


Un volta installati questi pacchetti scarichiamo i driver otus

git clone git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/otus.git


Adesso è necessario effettuare una patch ai driver in modo da fargli rilevare correttamente il nostro adattatore USB. Scarichiamo le due patch da qui. Adesso spostiamo i due file nella cartella di otus appena creata e digitiamo questi comandi:

patch -u OAL/Otus/Linux/zdusb.h zdusb.h.diff
patch -u OAL/Otus/Linux/zdusb.c zdusb.c.diff

Adesso se le patch sono state correttamente applicate procediamo con la compilazione dei driver:

make
sudo make install


Possiamo già provare se funziona, con l'adattatore collegato diamo il seguente comando

sudo modprobe arusb_lnx

In pratica carichiamo manualmente il modulo del kernel responsabile del funzionamento degli adattatori 802.11n Atheros-based USB.
Se tutto è andato bene con iwconfig dovremo avere una nuova interfaccia nominata ath0 (o ath1 se avete già un'altra interfaccia di rete con chipset Atheros).

ath0 IEEE 802.11-MIMO Frequency:inf GHz Access Point: F9:BF:FF:03:00:00
Sensitivity=0
Power Management:off

Proviamo ad "accenderla" con

sudo ifconfig ath0 up

Dovremmo notare che il LED posto sull'adattatore inizia a lampeggiare lentamente. Quindi adesso proviamo a rilevare le reti WiFi vicine:

iwlist ath0 scan

Se almeno una rete viene rilevata il grosso è fatto!

Compilazione wpa_supplicant (per cifratura WPA/WPA2/WPS)

Adesso se si utilizza la protezione WPA va scaricata una versione modificata di wpa_supplicant con il supporto ai driver otus.

wget http://www.kernel.org/pub/linux/kernel/people/mcgrof/otus/wpa_supplicant-0.4.8_otus.tar.bz2
tar -xjvf wpa_supplicant-0.4.8_otus.tar.bz2

Quindi andiamo all'interno della directory appena creata con

cd wpa_supplicant-0.4.8

e modifichiamo il file .config:

gedit .config

Cerchiamo la riga con

#CONFIG_DRIVER_WEXT=y

e decommentiamola togliendo la gratella '#'. Salviamo.

Adesso compiliamo anche wpa_supplicant.

make
sudo make install

Ora abbiamo la versione di wpa_supplicant modificata in /usr/local/sbin.

Creiamo il file di configurazione di wpa_supplicant. A me questa configurazione funziona bene, sul router ho impostato la cifratura WPA.

network={
ssid="nomerete"
psk="passwordrete"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
}

Sostituite nomerete e passwordrete con i dati della vostra rete WiFi, rispettivamente con il nome della rete (SSID) e la password (anche detta passphrase) della rete.

Salviamo tutto questo dentro wpa_supplicant.conf e mettiamolo ad esempio nella nostra home. Da qui per associarsi all'access point diamo questo comando:

sudo /usr/local/sbin/wpa_supplicant -Dotus -iath0 -cwpa_supplicant.conf

Dovremmo vedere un output di questo tipo:


******WSC_IE: In wsc_ie_init

UdpLib: Entered udp_open
UdpLib: Socket open successful, sd: 7
UdpLib: Entered udp_write; len = 5
l2_packet_init Successful
CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
Trying to associate with 00:22:3f:51:31:44 (SSID='DnaX-Wireless' freq=2437 MHz)
CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
wpa_driver_otus_get_bssid : 0:22:3f:51:31:44
Associated with 00:22:3f:51:31:44
wpa_driver_otus_get_bssid : 0:22:3f:51:31:44
WPA: Key negotiation completed with 00:22:3f:51:31:44 [PTK=TKIP GTK=TKIP]
CTRL-EVENT-CONNECTED - Connection to 00:22:3f:51:31:44 completed (auth)

Adesso siamo associati all'access point. Prendiamo l'IP, Gateway e DNS automaticamente tramite DHCP, quindi da un'altra console digitiamo:

sudo dhclient ath0

Dovremmo avere un output simile:

Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/ath0/00:1f:33:f3:59:34
Sending on LPF/ath0/00:1f:33:f3:59:34
Sending on Socket/fallback
DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 7
DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 7
DHCPOFFER of 192.168.0.12 from 192.168.0.1
DHCPREQUEST of 192.168.0.12 on ath0 to 255.255.255.255 port 67
DHCPACK of 192.168.0.12 from 192.168.0.1
bound to 192.168.0.12 -- renewal in 114528 seconds.

Abbiamo finito.

Inconvenienti

Vi avevo detto che i driver sono instabili e che il supporto è precario, vediamo quali sono i problemi in cui potete incorrere.

  • Kernel panic, durante l'uso dell'adattatore il pc vi si può piantare all'improvviso. Senza possibilità di ripristino, occorre resettarlo. Non è affatto raro che capiti.
  • NetworkManager non supporta i driver otus, il che vuol dire che dovrete fare sempre tutto a mano
  • Necessità di attivare l'interfaccia di rete ogni volta che viene scollegato e ricollegato l'adattatore.
  • wpa_supplicant funziona la prima volta e basta. In pratica se mi scollego alla rete non riesco più a ricollegarmici, devo per forse disconnetterla e riconnetterla.

Aggiornamento (1/2/2009): Il driver risulta perfettamente stabile quando si usa lo standard 802.11g, diventa instabile solo con la rete 802.11n e la crittografia WPA. Vedo se modificando wpasupplicant si risolve.
Aggiornamento (23/2/2009): NetworkManager fallisce a gestire l'interfaccia poiché non esegue un ifup e quando richiede alcuni dati al driver esso si rifiuta di dargliele. Ho trovato altri driver, quelli che dovranno sostituire gli otus, gli ar9170.

Però in definitiva funziona dai...

ath1 IEEE 802.11-MIMO ESSID:"DnaX-Wireless" Nickname:"DnaX-Wireless"
Mode:Managed Frequency:2.437 GHz Access Point: 00:22:3F:51:31:44
Bit Rate:270 Mb/s Tx-Power=-2147483648 dBm Sensitivity=0/3
Retry RTS thr:off Fragment thr:off
Power Management:off


Piccolo script di connessione

Visto che NetworkManager non gestisce l'adattatore effettuiamo la connessione manualmente con questo script:

#!/bin/bash

# Script la connessione tramite WL111v2 USB

sudo ifconfig ath0 up

sudo /usr/local/sbin/wpa_supplicant -Dotus -iath0 -cwpa_supplicant.conf &

sleep 5

sudo dhclient ath0


Pulizia

E' possibile rimuovere i pacchetti installati all'inizio di questa guida e tutte le cartella create dei driver otus e di wpa_supplicant oltre alle patch.

Risorse per la creazione di questa guida:
Thread su WL111v2 del forum SuseItalia
Sito ufficiale driver otus

Articoli correlati

Abbonati al feed RSS. Se non sai cos'è guarda qui.

Abbonati alla newsletter per ricevere via email ogni nuovo articolo pubblicato. L'indirizzo verrà gestito da FeedBurner.

Dai il tuo parere, commenta questo articolo!
commenti su Usare l'adattatore USB 802.11n WN111v2 con Ubuntu
  1. gian scrive —

    Ciao, ho usato la guida su jaunty e all’inizio funzionava tutto bene, poi (credo con update del kernel al 2.6.28.13) non funziona +, ho ricompilato naturalmente. l’errore è questo, qualche idea x risolvere?
    :~$ sudo dhclient ath0
    Internet Systems Consortium DHCP Client V3.1.1
    Copyright 2004-2008 Internet Systems Consortium.
    All rights reserved.
    For info, please visit http://www.isc.org/sw/dhcp/

    Listening on LPF/ath0/00:22:3f:06:38:de
    Sending on LPF/ath0/00:22:3f:06:38:de
    Sending on Socket/fallback
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 5
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 6
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 8
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 12
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 14
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 14
    DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 2
    No DHCPOFFERS received.
    No working leases in persistent database - sleeping.

    e questo è /etc/network/interfaces:
    auto lo
    iface lo inet loopback

  2. gian scrive —

    Riciao! come al solito dopo un bel pezzo che provo, mi mecido a scrivere x chiedere aiuto e 10 minuti dopo trovo la soluzione ;) (chissà xche?) comunque x sistemare il problema dell‘ upgrade di kernel ho dovuto dare il comando make clean prima di dare il make e sudo make install.
    Adesso va! ti consiglio di aggiungerlo alla tua ottima guida! grazie e ciao!

  3. DnaX scrive —

    Infatti penso che ad ogni aggiornamento del kernel va ricompilato il modulo. Ah, speriamo bene ma col kernel 2.6.30 non va niente, anzi, va in kernel panic.

  4. Peppe scrive —

    ciao DnaX, prima di tutto voglio ringraziarti della guida esaustiva, sono un nuovo utente Ubuntu (9.04) da un paio di giorni, sto scoprendo un mondo a me ignoto. Ho un adattatore usb Tp-Link TL-WN821N con chip Atheros, ho seguito la tua guida fino alla "accensione" con esito positivo.
    Tramite il comando "iwlist ath0 scan" trovo 4-5 reti tra cui la mia (nascosta) ma non ho capito come fare ad agganciare il mio router (o un’altra rete) dato che l’applet NetworkManager non mi segnala reti senza fili. Dove sbaglio?

  5. DnaX scrive —

    @Peppe: Ciao, grazie per i complimenti. Al momento NetworkManager non è compatibile con il driver di questo chipset. Per connetterti dovrai usare lo script di connessione modificando opportunamente il file wpa_supplicant.conf. Speriamo che includano il supporto per tale driver al più presto!

  6. mr.rosmarino scrive —

    bella guida... ma a me qualcosa non funge...
    io ho una scheda Tp-Link TL-WN821N con chip Atheros, dopo aver compilato il modulo, nella lista lsusb risulta come sempre, ma se do il comando iwconfig... non me la vede... niente ath0 o altro...
    qualche idea?

  7. DnaX scrive —

    Ma dopo aver compilato il modulo del kernel e installato nel sistema, lo hai caricato con modprobe?

    Comunque lsusb fa vedere solo le perifariche collegate al sistema ed associa l’ID con il nome della periferica tramite una sua lista interna. Non mostra affatto se una periferica è riconosciuta o meno, ma solo la sua presenza.

  8. fabrixx scrive —

    Ciao, complimenti per la guida, sono andato avanto mesi con quella chiavina e credo di essere stato uno dei primi a scrivere una guida sul mio blog (nom bella come la tua pero..).

    Ho attivato il wireless integrato e mi pare che usavo la chiavina la connessione fosse piu performante.

    Usando ora network-manager ho paura che l’installazione mi scombussoli tutto, comunque dovrei disinstallarlo e rieditare a mano /network/interfaces.

    Mi piacerebbe poter implementare la chiavina al network manager, secondo te col tuo script riuscirei a gestire chiavina e scheda integrata in modo autonomo o rischierei di far casino?
    Ora ho svariati blocchi di connessione, usandola con il dgn2000 per te ho dei vantaggi rispetto al wireless integrato?

    Ciao e complimenti per il blog :)

  9. DnaX scrive —

    Ciao, Fabrixx, effettivamente confrontando il parametro tx-power, indicante la potenza di trasmissione (dalla scheda all'ap, non viceversa), della WN111v2 con quello della scheda PCI che ho nello stesso pc (una D-Link basata dal chipset Atheros AR5001X+) risulta maggiore di 7dB.

    Al momento per la nostra scheda esistono due driver: otus e ar9170usb. Attualmente il driver Otus supporta correttamente lo standard 802.11n ma è ancora instabile, alle volte si blocca e devo scollegare e reinserire la pennina. Inoltre per funzionare con reti criptate con WPA e WPA2 è necessario 8come è qui descritto) compilare una veccia versione modificata di wpa_supplicant, anche dopo questo ho provato in lungo e in largo a far funzionare NetworkManager ma funziona solo bloccando NM, attivare l'interfaccia di rete (ifconfig ath0 up) e avviando NM. Nonostante ciò non permette l'associazione con le reti protette da WPA e WPA2. In definitiva, usalo (questo driver) solo se non puoi farne a meno.

    Con il mio script (non quello pubblicato) puoi effettuare la connessione, però devi impostare a mano il file di configurazione di wpa_supplicant che generalmente viene generato automaticamente da NM.

    Attualmente sto usando Karmic la quale con il kernel 2.6.31 ha già il driver ar9170usb di serie, sto utilizzando quello infatti. Funziona senza alcun problema con NetworkManager ma è limitato allo standard 802.11g (max 54Mbps).

    Riguardo il dgn2000 ho paura di non aver fatto un ottimo acquisto, quando saturo la banda per scaricare un file non posso più navigare, non mi risolve manco gli indirizzi. vedi se hai anche tu questo problema oppure è solo un fatto di canale "rumoroso".

  10. fabrixx scrive —

    Sono riuscito ad attivare la chiavina anche col kernel 2.6.30 in debian compilandomi i compat-wireless.

    Debbo dire che mi trovo molto meglio adesso, non ho piu cali di connessione e con l’indirizzo MAC riesco a gestire entrambi i dispositivi.

    Sinceramente era un po macchinoso il metodo degli otus.
    Attendo che in Debian arrivi il kernel con i driver già a posto.

    Ciao e complimenti per il tuo blog :)

    ..notifica attivata :)

  11. fabrixx scrive —

    Reintervengo: in pratica prima io invece di usare il tuo script inserivo il comando up wpa_supplicant -Dotus -iath0 -c/etc/wpa_supplicant.conf -dd in /etc/network/interfaces senza il network manager.

    Ciao

  12. Aro scrive —

    Ciao e grazie per la guida, a me non funziona o molto probabilmente sbaglio Io. Ho installato Ubuntu 9.10, fino alla patch tutto bene poi con il comando make mi da il seguente errore:
    danacinzia@danacinzia-laptop:~/otus$ make
    make -C OAL/Otus/Linux/
    make[1]: ingresso nella directory «/home/danacinzia/otus/OAL/Otus/Linux»
    /lib/modules/2.6.31-16-generic/build
    /home/danacinzia/otus/OAL/Otus/Linux
    -I/lib/modules/2.6.31-16-generic/build/include -I/../../../80211Core -I -I/../../../HalPlus/OTUS_FB50 -fomit-frame-pointer -O2 -Wall -Wstrict-prototypes -pipe -DAMAC -DGCCK -DOFDM -DTXQ_IN_ISR -DWLAN_HOSTIF=0 -DZM_USB_STREAM_MODE=1 -DZM_USB_TX_STREAM_MODE=0 -DZM_PCI_DMA_TEST=0 -DZM_LARGEPAYLOAD_TEST=0 -DZM_FW_LOOP_BACK=0 -DZM_LINUX_TPC=1 -DZM_HOSTAPD_SUPPORT -DZM_HALPLUS_LOCK -DZM_OTUS_LINUX_PHASE_2
    make -C /lib/modules/2.6.31-16-generic/build SUBDIRS=/home/danacinzia/otus/OAL/Otus/Linux modules
    make[2]: ingresso nella directory «/usr/src/linux-headers-2.6.31-16-generic»
    CC [M] /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/ccmd.o
    In file included from /home/danacinzia/otus/OAL/Otus/Linux/usbdrv.h:35,
    from /home/danacinzia/otus/OAL/Otus/Linux/oal_marc.h:18,
    from /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/cprecomp.h:7,
    from /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/ccmd.c:13:
    /home/danacinzia/otus/OAL/Otus/Linux/zdcompat.h:82: error: conflicting types for â??irqreturn_tâ??
    include/linux/irqreturn.h:16: note: previous declaration of â??irqreturn_tâ?? was here
    In file included from /home/danacinzia/otus/OAL/Otus/Linux/usbdrv.h:35,
    from /home/danacinzia/otus/OAL/Otus/Linux/oal_marc.h:18,
    from /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/cprecomp.h:7,
    from /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/ccmd.c:13:
    /home/danacinzia/otus/OAL/Otus/Linux/zdcompat.h:85:1: warning: "IRQ_RETVAL" redefined
    In file included from include/linux/interrupt.h:10,
    from include/linux/netdevice.h:1058,
    from /home/danacinzia/otus/OAL/Otus/Linux/oal_dt.h:19,
    from /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/cprecomp.h:6,
    from /home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/ccmd.c:13:
    include/linux/irqreturn.h:17:1: warning: this is the location of the previous definition
    make[3]: *** [/home/danacinzia/otus/OAL/Otus/Linux/../../../80211Core/ccmd.o] Errore 1
    make[2]: *** [_module_/home/danacinzia/otus/OAL/Otus/Linux] Errore 2
    make[2]: uscita dalla directory «/usr/src/linux-headers-2.6.31-16-generic»
    make[1]: *** [all] Errore 2
    make[1]: uscita dalla directory «/home/danacinzia/otus/OAL/Otus/Linux»
    make: *** [build] Errore 2
    provato anche a cancellare il tutto e rifare installazione dando comando make clean prima di make come suggerito nei post precedenti ma mi da sempre stesso errore.
    suggerimenti?
    grazie
    Aro

  13. DnaX scrive —

    @Aro: Ciao, se hai letto bene l'articolo questo adattatore wireless funziona di serie con Ubuntu 9.10. Gli errori che ti capitano sembrano dovuti a modifiche del kernel successive alla scrittura del driver proposto in questa guida. L'unico motivo per installare il driver Otus è il protocollo 802.11n, vedi se il gioco vale la candela.

  14. Aromatico scrive —

    Grazie DanX per la risposta, vorrei far funzionare l’adattare in N avento un router che lavora in questa modalità, considerando che è dalla parte opposta della casa e al primo piano (io sono al terzo) ne guadagnerei in segnale.
    La 9.10 ho notato che la riconosce senza problemi in modalità G.
    Ci sono in giro altre guide? secondo te nella 9.4 sarà implementate la funzione N?
    grazie

  15. DnaX scrive —

    @Aromatico: Non so... lo sviluppo è fermo, lo spero vivamente anche io. Semmai vedo appena ho tempo di ricompilare il driver Otus nel kernel nuovo. Ti aggiornerò qui, abbonati ai commenti ;)

Lascia un commento

CC BY-NC-SA 3.0 2004-2020 Daniele Napolitano — Per informazioni sulla licenza leggere le Note legali