
Rieccoci a parlare di nuovo di schede wireless Broadcom! Bene, a differenza del tutorial che scrissi qualche tempo fa, oggi andiamo ad installare direttamente i drivers originali forniti da Broadcom… o meglio, costruiremo insieme un modulo per il Kernel partendo da questi, e diremo al sistema come riconoscerlo.
Vi ho terrorizzati? Naaaah… è molto molto più semplice a farsi che a dirsi! In realtà il tutto si riduce ad una decina di comandi sequenziali che, però, tengo a spiegare uno per uno.
Andiamo per gradi:
Apriamo una shell e diamo il seguente comando (preleviamo la lista delle periferiche connesse al sistema, mostrando però soltanto quelle che contengono la stringa “i4e4″):
lspci -vnn | grep 14e4
L’output del comando dovrebbe essere del tutto simile a questo:
0001:01:01.0 Network controller [0280]: Broadcom Corporation BCM4311 [AirForce One 54g] 802.11g Wireless LAN Controller [14e4:4311] (rev 02)
Attenzione a questa stringa “[14e4:4311]” , in particolare a ciò che c’è scritto dopo 14e4 (nel nostro caso 4311): tramite quel numeretto, guardando la tabella sottostante, possiamo sapere se la scheda è pienamente supportata.
4311 2.4 Ghz
4311 Dualband
4311 5 Ghz
4312 2.4 Ghz
4313 2.4 Ghz
4321 Dualband
4321 Dualband
4321 2.4 Ghz
4321 5 Ghz
4322 Dualband
4322 2.4 Ghz
4322 5 Ghz
43224 Dualband
43225 2.4 Ghz
Non disperate, però : questo modulo potrebbe funzionare anche con schede non elencate di sotto.
Bene, come vi ho già detto stiamo andando a costruire un modulo per il kernel : e come facciamo se non abbiamo gli headers, i sorgenti e i tools di sviluppo del nostro kernel stesso?
Vediamo, innanzitutto, se ci sono già installati. Aprite un terminale, e date il seguente comando:
ls /lib/modules/`uname -r`/build
Se l’output dovesse essere positivo (la cartella esiste, e viene fatta la lista di tutti i files contenuta in essa) allora potrete tranquillamente saltare allo Step 2. Se, invece,l’output dovesse essere qualcosa come “/lib/modules/”release”/build: No such file or directory” non vi resta che continuare a leggere, e installare il tutto.
Questa volta, ragazzi miei, però dovrete darmi una mano… non c’è una procedura standard per tutte le distribuzioni di Linux, e purtroppo ho avuto a che fare (a livello di kernel) soltanto con Fedora, Slackware, Ubuntu/Debian e Gentoo, ragion per cui mi limiterò a illustrare le procedure d’installazione degli strumenti di sviluppo soltanto per loro (chiaramente, valgono anche per i loro “derivati”). Dovrebbero esserci informazioni in proposito sulla documentazione di tutte le altre distribuzioni. Qualora doveste avere difficoltà,non esitate a contattarmi.
Fedora/Red Hat:
su -c 'yum install kernel-devel'su -c ‘yum install kernel-headers’
Ubuntu:
sudo apt-get install build-essential linux-headers-generic
sudo apt-get build-dep linux
Gentoo:
su -c ‘emerge gentoo-sources’
Slackware :
Inseriamo il CD/DVD del sistema operativo, eseguiamo il tool pkgtool e selezioniamo per l’installazione “kernel sources”.
Adesso, una volta installati i tools necessari, procediamo.
Scarichiamo i drivers, a seconda della vostra architettura (32 o 64 bit) dal link in basso. Creiamo una cartella (ad es. “Drivers” ) ed estraiamo lì dentro il contenuto dell’archivio scaricato. Apriamo cioè un terminale,e scriviamo:
sudo -s
[inseriamo la password di root]
oppure
su
[inseriamo la password di root]
e poi:
mkdir Drivers
cd Drivers
wget url_dell’archivio_appropriato_al_vostro_sistema
ls
[vi apparirà il nome dell'archivio scaricato]
tar xovfz nome_dell’archivio_scaricato
Ora creiamo il modulo, digitando:
make clean
make
O, qualora doveste avere un kernel personalizzato, passate a make, come parametro, il percorso dei vostri headers/sorgenti. Solitamente ciò equivale a sostituire il make precedente con
make --include-dir=/usr/src/linux-source-`uname -r`
Oppure con
make –include-dir=/usr/src/linux-headers-`uname -r`
(o, in generale, --include-dir=percorso_dei_vostri_sorgenti_del_kernel). (Un ringraziamento va ad Angelo che ha segnalato (ed anche risolto) il problema.)
Attendiamo la procedura di creazione del modulo e, una volta terminata , lasciamo aperto il nostro terminale (ci servirà ancora) ed andiamo avanti.
NB : nel caso vi si dovesse presentare un errore di questo tipo : “make: *** /lib/modules/”release”/build: No such file or directory. Stop.” non disperate : vuol dire che la suite di sviluppo del kernel non è stata correttamente installata. Ritornate allo Step 1 e ripetete il procedimento.
Dovrebbe, intanto, apparire un file wl.ko nella vostra directory : abbiamo creato il nostro preziosissimo modulo. Adesso andiamo ad installarlo.
Se avete già tentato di installare i drivers Broadcom con altre procedure, oppure se siete da Ubuntu, NON dimenticate di eseguire il passo seguente! Infatti, nel malaugurato caso in cui il modulo che abbiamo appena creato dovesse coesistere con altri moduli simili, si scatenerà una guerra all’ultimo sangue nel vostro sistema (ahaha! =P ), e il vostro nuovissimo modulo si rifiuterà di funzionare! Andiamo quindi a verificare se avete installate altre versioni/avete tracce di precedenti installazioni. Riprendiamo il nostro terminale,e digitiamo:
lsmod | grep “b43\|ssb\|wl”
Lsmod è il comando che restituisce in output la lista dei moduli installati, e grep preleva dall’output le stringhe che gli abbiamo passato. Se lsmod non dovesse restituire nulla potete saltare la prossima sfilza di comandi ed andare a caricare direttamente il modulo. Nel caso contrario in cui, però, lsmod vi dice che avete qualcosa del genere installato, dovete innanzitutto eliminarlo, e poi mettere in blacklist ( = la lista nera dei moduli,che il sistema non proverà mai più a caricare) i moduli che non vi servono. Per fare ciò, riprendiamo il nostro terminale root e diamo in sequenza i seguenti comandi:
rmmod b43
rmmod ssb
rmmod wl
echo “blacklist ssb” >> /etc/modprobe.d/blacklist.conf
echo “blacklist b43″ >> /etc/modprobe.d/blacklist.conf
[non metteremo wl, invece, in blacklist,in quanto è proprio il modulo che dovremo ricaricare]
Sempre per precauzione, cerchiamo nelle directories /lib e /var altre eventuali versioni di wl.ko, e rinominiamole. E facciamo ciò copiando questo stralcio di script nel nostro terminale (permette, in una sola riga di comando, di scandire tutti i files wl.ko che trova nelle directories /var e /lib e rinominarli in wl.ko.orig … fiQo no?)
sh: for i in `find /lib /var -name wl\.ko`; do mv $i ${i}.orig; done
Abbiamo terminato anche la nostra opera di pulizia. Non ci resta che inserire - finalmente – il modulo al nostro kernel, ed inventarci qualche piccola miglioria per evitarci un po’ di lavoro immediatamente dopo ogni avvio del sistema.
Prima di inserire il modulo in sè, alcuni sistemi richiedono l’inserimento di un altro sotto-modulo per la sicurezza. Riprendiamo il nostro bel terminale di root, e inseriamolo:
modprobe lib80211
Se non dovesse funzionare, sappiate che lo stesso risultato può essere ottenuto caricando un modulo molto,molto simile (è una cosa che varia da sistema a sistema,se non funziona uno allora sicuramente funziona l’altro). Prendiamo nota di quale dei due, per noi, funziona.
modprobe ieee80211_crypt_tkip
Ed ora, finalmente, inseriamo il nostro modulo appena creato:
insmod wl.ko
La vostra scheda wireless sarà operativa dopo circa un minuto.
Credete che sia finita? Beh, se volete potrebbe esserlo ma..se terminate adesso, dovrete ripetere tutti i modprobe e gli insmod ad ogni avvio del sistema! Vi conviene? Certo che no! Cerchiamo, quindi, di dire al sistema “senti, prima di portarmi al login devi caricare il modulo della scheda di rete”. Ed è arrivato il momento di spiegarvi un’altra sottigliezza dei sistemi Unix.
Durante la sequenza di boot del sistema, vi sono delle routine che vengono sempre eseguite e, in tutti i sistemi unix, c’è sempre un file che permette di definire ulteriori operazioni da eseguire prima dell’accesso alla sequenza di login. Questo file differisce da sistema a sistema,ma ecco la lista di quelli più importanti:
Prendiamo nota del nome del nostro file.
Riprendiamo il nostro bel terminale di root, e scriviamo:
cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
depmod -a
echo modeprobe lib80211 >> /etc/rc.local
(o, in alternativa, echo modeprobe ieee80211_crypt_tkip >> /etc/rc.local)
echo modeprobe wl >> /etc/rc.local
Da questo momento in poi, i moduli saranno finalmente caricati automaticamente all’avvio e, all’atto del login, avremo finalmente pronta la nostra scheda wireless funzionante.
Abbiamo finalmente terminato! Il procedimento è stato un po’ ostico questa volta, lo so, ma l’importante è esserne usciti vincitori!
Ovviamente, per ogni problema, chiarimento o spiegazione,potrete contattarmi. Ecco i links e..al prossimo tutorial!
Pingback: Disponibili i driver Open Source Wireless per schede Broadcom - Chimera Revo
Pingback: Linux : Broadcom rilascia i drivers ufficiali per le sue schede. Ecco come installarli | Bloggosite
Commenti Lasciati