Menu Chiudi

Schede Wireless ACX100 e kernel 2.6

di d4rkst4r (bruno AT brunosalzano DOT com)

Sommario

1. Introduzione

2. Requisiti

3. Scelta del driver

4. Prepariamo il sistema

5. Avviamo la scheda di rete

6. Possibili problemi.. come risolvere?

1. Introduzione

1.1 Introduzione

Acx100 e’ sinonimo di due cose: 1) un chipset per schede wireless costruito dalla Texas Instruments; 2) un driver opensource rilasciato da un gruppo di volontari costituitosi per supplire alla mancanza di supporto linux da parte della casa costruttrice, ed il cui sito web e’ all’indirizzo: http://acx100.sourceforge.net.

Le schede wireless basate sul chipset ACX100 sono conformi agli standard 802.11a/b, quindi in grado di raggiungere i 22MBit. Il chipset ACX100 supporta inoltre una particolare modalita’ non standard, chiamata 4X in grado di far viaggiare i dati a 44Mbit in compressione. Tuttavia, questa particolare modalita’, chiamata 802.11b+ e’ una invenzione della Texas Instruments e non e’ supportata ne’ dal driver open source ne’ dagli altri produttori di chipset per schede wireless: cio’ si traduce, in una impossibilita’ pratica di utilizzo della modalita’ 4X se non in presenza di un access point che supporti la stessa tecnologia proprietaria.

Questo articolo ha ad oggetto la configurazione e la installazione del driver acx100 con un kernel 2.6. L’hardware su cui viene effettuata e’ il seguente: notebook Toshiba 1900s-303, Gentoo Linux, scheda WLAN DLINK G650+, access point DWL-900AP.

1.2 Licenza

Questo documento e’ libero; e’ possibile ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation; o in base alla versione 2 della Licenza, o (a vostra discrezione) in base ad una qualsiasi versione successiva della stessa.

Questo documento e’ distribuito nella speranza che possa risultare di utilita’, ma SENZA ALCUNA GARANZIA. Per maggiori dettagli, si faccia riferimento alla GNU General Public License. E’ possibile ottenerne una copia qui

2. Requisiti

Naturalmente, prima di procedere con l’installazione, accertiamoci di aver predisposto tutto. Lettura indispensabile per comprendere il funzionamento delle schede di rete wireless su linux, e’ la lettura del solito howto (esiste un howto per ogni cosa che si puo’ fare con linux.. anche le piu’ strane :) ): http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/

    I requisiti per questa installazione sono i seguenti:

  • hardware x86 (macchine PPC non sono ancora direttamente supportate, anche se gli autori del driver hanno avuto report positivi in alcuni test)
  • scheda di rete wireless PCI o PCMCIA integrante chipset acx100
  • uno slot PCI (gli autori suggeriscono uno slot busmaster) o uno slot PCMCIA, a seconda della tipologia di scheda.
  • sorgenti del kernel. In questo articolo verranno utilizzata l’ultima release del kernel: la 2.6.5
  • tool di sviluppo.
  • indispensabili sono anche i wireless-tools
  • una copia dei file binari contenenti il firmware per la vostra scheda.

Una specificazione si rende necessaria proprio in merito al firmware. Lo stesso e’ reperibile in vari modi: spesso, i files richiesti sono sul cd dei drivers per windows allegato alla scheda; in altri casi, come nel caso della dlink, potrete scaricare l’ultima versione dal sito del supporto tecnico.

    I files da cercare sono i seguenti:

  • RADIO0d.BIN
  • RADIO11.BIN
  • RADIO15.BIN
  • WLANGEN.BIN

Un modo semplice per ottenere una versione funzionante del firmware e’ la seguente:

$: wget --passive-ftp  ftp://ftp.dlink.com/Wireless/dwl650+/Driver/dwl650+_drivers_307.zip
$: unzip dwl650+_drivers_307.zip

Nella cartella Win2000 all’interno dello zip scaricato, troverete i files necessari. Se proprio avete difficolta’ nel reperire questi files, non esitate a contattarmi! Cerchero’ in qualche modo di aiutarvi.

Una volta ottenuta una distribuzione del firmware richiesto per avviare la scheda di rete, vi consiglio di creare una cartellina /drivers/acx100/firmware e copiarvi all’interno i files necessari (che, ripeto, sono: RADIO0d.BIN, RADIO11.BIN, RADIO15.BIN, WLANGEN.BIN): mi raccomando di rinominarli in maiuscolo. Faremo riferimento a questa cartella nella fase 4 (Preparazione del sistema).

3. Scelta del driver

Al momento della stesura di questo articolo, l’ultima versione del driver acx100 e’ la 0.2.0pre7_plus_fixes_7 che potete scaricare all’indirizzo: http://lisas.de/~andi/acx100/

Va notato che, fino alla versione 0.2.0pre7_plus_fixes_3 inclusa, il driver non puo’ essere compilato out-of-the-tree. Cio’ significa che i sorgenti del driver vanno inseriti a mano nel kernel source tree, con necessita’ di ricompilare tutto il kernel ex novo.

Dalla release 0.2.0pre7_plus_fixes_4, invece, e’ stata introdotta la possibilita’ di compilare out-of-the-tree. Anzi, da alcuni test fatti dal sottoscritto, nessuna versione superiore alla _plus_fixes_3 si compilera’ applicando a mano la patch. Inoltre, le ultime versioni del driver hanno cambiato il nome del modulo da acx100_pci ad acx_pci: pertanto, se si e’ utilizzata una versione precedente, occorre opportunamente modificare tutti gli scripts per aggiornare il riferimento.

Questa annotazione e’ importante perche’ nessuna delle documentazioni attualmente disponibili online marcano questa differenza, rendendo complicato dunque per l’utente normale capire qual’e’ il giusto procedimento.

Una volta scelta la versione e scaricato ed estratto l’archivio contenente il driver per la nostra scheda di rete, procediamo alla configurazione del kernel.

3.1 Compilazione del modulo in-the-tree (versioni < _plus_fixes_4)

L’installazione del modulo acx100 sul kernel 2.6 richiede che i sorgenti del kernel vengano patchati a mano con l’inserimento dei files sorgenti nel kernel source tree. Vediamo come si fa:

  • Create una directory drivers/net/wireless/acx100 nel kernel source tree.Es. Supponendo che i sorgenti del kernel siano in /usr/src/linux, dovrete creare una directory /usr/src/linux/drivers/net/wireless/acx100
  • Copiare i files:- src/Makefile- src/*.c- include/*.h

    dalla directory dei sorgenti del driver acx100 alla directory creata al punto 1.

  • Editare il file /usr/src/linux/drivers/net/wireless/Makefile ed aggiungere, alla fine, la seguente riga:
  • obj-m += acx100/

    Concluse queste operazioni preliminari, possiamo compilare come al solito il kernel. Durante la fase della compilazione, verra’ creato anche il modulo acx100_pci (acx_pci nel caso di una distribuzione recente dei drivers) che rappresenta, in definitiva, il driver per la nostra fiammante scheda wireless :).

    Installato il nuovo kernel e fatti i cambiamenti del caso (es. grub.conf o lilo.conf), procedete al riavvio del sistema.

    Se siete giunti indenni sin qui, potete passare al punto 4 (Prepariamo il sistema).

    3.2 Compilazione del modulo out-of-the-tree (versioni >= _plus_fixes_4)

    Vediamo ora come compilare il modulo senza ricompilare il kernel. Innanzitutto, come gia’ detto in precedenza, utilizziamo una versione del driver uguale o maggiore alla “_plus_fixes_4” (nel nostro caso, utilizzeremo l’ultima versione del driver (0.2.0pre7_plus_fixes_7).

    Scompattato l’archivio in una directory di nostra preferenza, procediamo come segue:

    root@linuxbox# cd acx100-0.2.0pre7_plus_fixes_7/
    root@linuxbox# make

    La compilazione del driver sara’ preceduta da una verifica dei requisiti di configurazione del kernel. Eventuali errori di configurazione comporteranno ovviamente la necessita’ di ricompilare il kernel per la dovuta correzione. Inoltre, essendo il driver ancora in beta, e’ naturale che si verifichino dei warning durante la compilazione. Una volta che quest’ultima e’ completata, e si ritorna al prompt dei comandi, digitare:

    root@linuxbox# make install

    Potrebbero verificarsi ancora dei warning. L’operazione e’ andata a buon fine, salvo che non vengano stampati a video degli errori. In tal caso, vi invito a fare riferimento al punto 6 (Possibili problemi.. come risolvere?).

    Una volta che il modulo e’ stato compilato (make) ed inserito nella directory dei moduli (make install), potete passare al punto 4 (Prepariamo il sistema) senza necessita’ di dover riavviare il sistema.

    4. Prepariamo il sistema

    Per poter avviare la scheda di rete, dovremo fare alcune impostazioni nel nostro sistema per rendere semplice l’avvio del driver. Dunque, come primo passaggio, occorre dire al modulo acx_pci dove sono i files del firmware. Vi invito a guardare l’output generato da modinfo:

    root@linuxbox# modinfo acx_pci
    author:         The ACX100 Open Source Driver development team
    description:    Driver for TI ACX1xx based wireless cards (CardBus/PCI/USB)
    license:        Dual MPL/GPL
    parm:           debug:Debug level mask: 0x0000 - 0x3fff (see L_xxx in
             include/acx100.h)
    parm:           use_eth_name:Allocate device ethX instead of wlanX
    parm:           firmware_dir:Directory where to load acx100 firmware files from
    vermagic:       2.6.5-darkstar SMP preempt PENTIUM4 gcc-3.3
    depends:
    alias:          pci:v0000104Cd00008400sv*sd*bc*sc*i*
    alias:          pci:v0000104Cd00008401sv*sd*bc*sc*i*
    alias:          pci:v0000104Cd00009066sv*sd*bc*sc*i*

    In particolare, fate caso ai parametri che accetta il driver:

  • parm: debug (per impostare un livello di debug.).
  • parm: use_eth_name (per cambiare il nome della interfaccia: ethX al posto di wlanX)
  • parm: firmware_dir (directory dalla quale il driver carichera’ i files del firmware).
  • Detto questo, e’ ovvio che dovremo passare al driver, in fase di caricamento, il parametro firmware_dir, nel modo seguente:

    root@linuxbox# modprobe acx_pci firmware_dir=/drivers/acx100/firmware

    Per verificare che il modulo sia stato caricato correttamente, diamo una scorciatina ai log di sistema:

    root@linuxbox# tail -n 60 /var/log/messages | less
    Apr 12 20:40:47 linuxbox acx100_init_module: dev_info is: TI acx100_pci
    Apr 12 20:40:47 linuxbox Found ACX100-based wireless network card, irq:5,
      phymem1:0x10810000, phymem2:0x10800000, mem1:0xd1a8a000,
      mem1_size:4096, mem2:0xd1a8c000, mem2_size:65536.
    Apr 12 20:40:47 darkstar acx100_probe_pci: using ACX100 io resource
      addresses (size: 108)
    [...]
    Apr 12 20:40:48 linuxbox Allocated 936 bytes for firmware module loading.
    Apr 12 20:40:48 linuxbox not using auto increment for firmware loading.
    Apr 12 20:40:48 linuxbox acx100_write_fw: Firmware written.
    Apr 12 20:40:48 linuxbox acx100_write_fw (radio): 1, acx100_validate_fw: 1
    [...]
    Apr 12 20:40:48 linuxbox acx100: form factor 0x01
      (D-Link DWL-520+/650+/G650+/Planet WL-8305?), radio type
      0x0d (Maxim), EEPROM version 0x0005. Uploaded firmware
      'Rev 1.9.8.b' (0x01020505).
    Apr 12 20:40:48 linuxbox creating /proc entry driver/acx_wlan0
    Apr 12 20:40:48 linuxbox creating /proc entry driver/acx_wlan0_diag
    Apr 12 20:40:48 linuxbox creating /proc entry driver/acx_wlan0_eeprom
    Apr 12 20:40:48 linuxbox creating /proc entry driver/acx_wlan0_phy
    Apr 12 20:40:48 linuxbox acx100_probe_pci: TI acx100_pci.o: Ver 0.2.0pre7
      Loaded Successfully

    Ora siamo certi che tutto funziona correttamente :) Dunque, possiamo modificare il file /etc/modules.conf scrivendo quanto segue:

    alias wlan0 acx_pci
    options acx_pci firmware_dir=/drivers/acx100/firmware

    5. Avviamo la scheda di rete

    Per avviare la scheda di rete, basta dare i seguenti comandi dal prompt:

    root@linuxbox# iwconfig wlan0 rate 22M (velocita' di trasmissione. Puo' anche
         essere 11M)
    root@linuxbox# iwconfig wlan0 channel 6 (o altro canale previsto sull'accesspoint)
    root@linuxbox# iwconfig wlan0 essid "essid_impostato_sull_accesspoint"
    root@linuxbox# iwconfig wlan0 txpower 18 (livello di potenza in dB)

    Possiamo verificare che tutto sia ok, attraverso il comando:

    root@linuxbox# iwconfig wlan0
    wlan0     IEEE 802.11b+  ESSID:"essid_impostato_sull_accesspoint"
          Nickname:"acx100 v0.2.0pre7"
              Mode:Auto  Channel:6  Access Point: 00:40:05:57:0A:4F
              Bit Rate=22Mb/s   Tx-Power:18 dBm   Sensitivity=176/255
              Retry min limit:5   RTS thr:off
              Encryption key:off
              Power Management:off
              Link Quality:100/100  Signal level:31/100  Noise level:0/100
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0

    Eccellente.. ora non resta che ottenere un ipaddress:

    a) se abbiamo un dhcp server nella nostra rete, potremo dare il comando:

    root@linuxbox# dhcpcd -d wlan0 -t 5

    b) altrimenti dovremo configurare a mano l’ip della nostra interfaccia di rete:

    root@linuxbox# ifconfig wlan0 192.168.0.1 netmask 255.255.255.0

    c) ed aggiungere una route verso il nostro default gateway:

    root@linuxbox# route add default gw 192.168.0.254

    Assumendo che sia questo il vostro gateway

    Naturalmente, io non voglio che facciate tanta fatica ogni volta che dovrete avviare la vostra preziosa WLAN NIC. Per cui, allego i due scripts per avviare e per arrestare la WLAN che dovrete opportunamente modificare per soddisfare i requisiti della vostra rete.

    Utilizzando lo script allegato a questo articolo, sara’ sufficiente dare il comando:

    root@linuxbox# start_wlan

    per avviare la wlan a 11Mbit. Oppure:

    root@linuxbox# start_wlan 22M

    per avviarla a 22Mbit.

    Siete invitati a modificare questo script e a renderlo ancora piu’ semplice. Ma questo e’ gia’ un buon inizio.. no?? :)

    6. Possibili problemi.. come risolvere?

    Le casistiche di installazione di un driver sono le piu’ disparate, proprio perche’ le possibili combinazioni di hardware e software sono innumerevoli. Per capire cosa voglio dire, date un’occhiata alla “Successes page” del sito di riferimento:

    http://acx100.sourceforge.net/qwiki/index.php?page=Successes

    Al sottoscritto, ad es. e’ successo di perdere una giornata intera nel vano tentativo di installare il driver per scoprire alla fine che la schedina PCMCIA se installata nello slot 1 causava un freeze del sistema….

    Dunque, per risolvere problemi di installazione vi consiglio di seguire sempre alcune regole, non necessariamente in ordine consequenziale:

    • Provare l’ultima versione del driver disponibile
    • Una volta compilato correttamente il modulo, se si verificano dei freeze provare a cambiare slot alla scheda (historia magistra vitae…)
    • Verificare i log di sistema alla ricerca di eventuali errori (nel README allegato ai drivers e’ spiegato come fare….)
    • Documentarsi opportunamente, magari cercando sui gruppi.

    Bene, la guida finisce qui, per domande o chiarimenti fate un salto in canale e con un po’ di fortuna mi trovate

    d4rkst4r

    3 commenti

    1. Raideiin

      Ahimè felipe, anch’io sono un’infelice possessore di una TI ACX 100, ma ero felice perchè da warty la scheda era supportata out of the box da ubuntu (uno dei motivi per cui me ne innamorai a suo tempo). Purtroppo oggi ho provato feisty e ubuntu si rifiuta di rilevare la scheda, mi sembra di ricadere nel passato e negli incubi più neri. Ho segnalato la cosa in launchpad, ora spero che aggiornino i driver… comunque non sono mai riuscito a farla funzionare installando manualmente… ma non possono semplificare la procedura? È un gran casino :(

    2. GianDO

      Salve,
      Possiedo un AMD64DualCore 4200+ con FC6 a 64 BIT e ho scaricato il driver per la mia DLink DWL.G520+ quelli dal sito da voi consigliato, la versione è acx100-0.2.0pre8_plus_fixes_57.tar.gz. Comincio a compilare il driver con ./configure ottengo un output dove la parte finale è:

      WARNING: Symmetric Multiprocessing support (CONFIG_SMP) i enabled. If
      you really have more than one cpu, be warned that this driver might
      still be not SMP safe.

      ******** Potential prolem found above, waiting 5 seconds to let know
      about it. *************

      dopo 5 secondi mi ritorna il crisore lampeggiante come se fosse interrotta l’operazione…

      che suggerite???

    3. igorhe

      ho anchio undual core amd 64 e la dlink funziona benissimo non so come ma va con ubuntu 7.10
      con suse mandriva kubuntu no

    Rispondi

    %d blogger hanno fatto clic su Mi Piace per questo:
    Vai alla barra degli strumenti