Old:Intel PRO/Wireless 3945ABG : Installazione dei moduli senza kernel patching

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca

Prerequisiti

Prima di seguire quanto riportato nella guida, assicuriamoci di avere a nostra disposizioni gli headers per il nostro kernel. Se abbiamo compilato noi stessi il kernel, allora possiamo essere tranquilli, ma se stiamo usando un kernel precompilato (ad esempio quello installato durante il setup di Debian, oppure scaricato tramite APT) allora dobbiamo necessariamente scaricare il pacchetto Debian contenente gli headers. Ecco come procedere:

$ uname -r
linux-image-2.6.18-3-686

questo significa che dobbiamo procurarci gli headers relativi a questa release del kernel:

# apt-get install kernel-headers-2.6.18-3-686

Software Occorrente

E' consigliabile scaricare le versioni stabili (quelle con numero di versione che termina con .0) dei sorgenti del driver per Intel PRO/Wireless 3945ABG e dello stack ieee80211. Creiamoci uno spazio di lavoro in cui scaricare e compilare i sorgenti:

mkdir ipw3945

Compilazione e installazione del sottosistema ieee80211

tar xzvf ieee80211-1.1.14.tgz
cd ieee80211-1.1.14
make

Potremmo essere avvisati del fatto che nel kernel installato siano già presenti componenti ieee80211:

/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt_wep.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt_ccmp.ko
/lib/modules/2.6.18-3-686/net/ieee80211/ieee80211_crypt_tkip.ko
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211.mod
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211_crypt.mod
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211_crypt_wep.mod/lib/modules/2.6.18-suspend2/net/ieee80211/.tmp_versions/ieee80211_crypt_ccmp.mod
/lib/modules/2.6.18-3-686/net/ieee80211/.tmp_versions/ieee80211_crypt_tkip.mod
/lib/modules/2.6.18-3-686/include/net/ieee80211.h
/lib/modules/2.6.18-3-686/include/net/ieee80211_crypt.h
/lib/modules/2.6.18-3-686/include/net/ieee80211_radiotap.h
Above files found.  Remove? [y],n

Rispondendo affermativamente i componenti verranno eliminati e il successivo comando make install provvederà a installare i componenti ieee80211 che stiamo compilando. Infine (questa istruzione potrebbe necessitare dei diritti di super utente)

make install 
cd ..

Compilazione e installazione del modulo ipw3945

tar xzvf ipw3945-1.1.3.tgz
cd ipw3945-1.1.3
make

Per rendere il modulo compilato visibile al tool modprobe dobbiamo copiarlo nel path di depmod:

cp ipw3945.ko  /lib/modules/$(uname -r)/kernel/drivers/net/wireless
depmod -a

Ora possiamo utilizzare

modprobe ipw3945

per caricare il modulo nel kernel e

modprobe ipw3945 -r

per rimuoverlo.

Installazione del firmware

tar xzvf ipw3945-ucode-1.13.tgz
cp ipw3945-ucode-1.13/ipw3945.ucode /usr/local/lib/firmware/

Installazione del regulatory daemon

tar xzvf ipw3945d-1.7.22.tgz

Per sistemi a 32 bit:

cp ipw3945d-1.7.22/x86/ipw3945d /sbin

Per sistemi a 64 bit:

cp ipw3945d-1.7.22/x86_64/ipw3945d /sbin

Caricamento del modulo

Ora che compilazione e installazione sono completate possiamo procedere al caricamento del modulo nel kernel. Riportiamoci nella directory del driver ipw3945:

cd ipw3945-1.1.3

e carichiamo il modulo (ripulendo anche il log del kernel)

./load debug=0

Eseguendo iwconfig dovremmo poter essere in grado di vedere l'interfaccia associata al chip wifi:

# ifconfig
eth2      unassociated  ESSID:off/any
          Mode:Managed  Channel=0  Access Point: 00:00:00:00:00:00
          Bit Rate=0 kb/s   Tx-Power=20 dBm
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Automatizzare l'esecuzione del regulatory daemon mediante modprobe

Per farlo basta creare un file nella directory /etc/modprobe.d

nano /etc/modprobe.d/

contenente le seguenti due righe:

install ipw3945 /sbin/modprobe --ignore-install ipw3945 ; sleep 0.5 ; /sbin/ipw3945d --quiet
remove ipw3945  /sbin/ipw3945d --kill ; /sbin/modprobe -r --ignore-remove ipw3945

Predisporre un demone SysV per l'esecuzione del regulatory daemon

Come super utenti:

nano /etc/init.d/ipw3945d

Editiamo il file nel seguente modo:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/sbin/ipw3945d
NAME=ipw3945d
DESC=ipw3945d

test -x $DAEMON || exit 0

# Include ipw3945d defaults if available
if [ -f /etc/default/ipw3945d] ; then
        . /etc/default/ipw3945d
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
               --exec $DAEMON
        echo "$NAME."
        ;;
  #reload)
        #
        #       If the daemon can reload its config files on the fly
        #       for example by sending it SIGHUP, do it here.
        #
        #       If the daemon responds to changes in its config file
        #       directly anyway, make this a do-nothing entry.
        #
        # echo "Reloading $DESC configuration files."
        # start-stop-daemon --stop --signal 1 --quiet --pidfile \
        #       /var/run/$NAME.pid --exec $DAEMON
  #;;
  restart|force-reload)
        #
        #       If the "reload" option is implemented, move the "force-reload"
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Salviamo (ctrl-o) e usciamo (ctrl-x). Ora attribuiamo al file appena editato permessi di esecuzione:

chmod +x /etc/init.d/ipw3945d

A questo punto possiamo aggiungere il demone al runlevel che fà al caso nostro. Vi rimando, a tal fine, alla seguente guida: SysV


Autore: fulvio Feb 06, 2007