Scheda WiFi Broadcom BCM4322 su Fedora 27 nightly compose

Da lumacawiki.

Scenario

Installazione di Fedora 27 nightly compose Branched 20170919.n.0

Con versioni successive, installando l'RPM funziona senza fare altro.

L'installazione su questo hardware funziona.

In ogni caso, in ogni versione di Fedora, sia essa stabile che Rawhide, per far funzionare la wireless in questione, bisogna utilizzare il repository RPMFusion non-free. Questo perché il modulo viene rilasciato con licenza non libera e non può essere incluso nei repository ufficiali di Fedora.

Il kernel Linux su Fedora Rawhide e nelle pre-release, cambia spesso, e altrettanto spesso ha abilitati, a quanto ho capito, debug e altre storie: invidio chi ci capisce.

Hardware

Hardware: MacBookPro5,5

sudo dmidecode -s system-product-name

Scheda wireless: Broadcom BCM4322 802.11a/b/g/n Wireless LAN Controller

lspci

Il problema

Seguendo la procedura per installare il modulo relativo alla scheda wireless, tramite il repository RPMFusion, ovvero

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install -y broadcom-wl kernel-devel
sudo akmods --force --kernel `uname -r` --akmod wl
sudo modprobe -a wl

nel punto in cui si lancia akmods si ottiene un errore

Building and installing wl-kmod                            [FAILED]
Building rpms failed; see /var/cache/akmods/wl/6.30.223.271-14-for-4.13.2-300.fc27.x86_64.failed.log for details

e andando a guardare nel file di log, l'errore principale è questo:

 FATAL: modpost: GPL-incompatible module wl.ko uses GPL-only symbol '__init_work'

This means that the module is licensed as proprietary, but it tries to use a function that is GPL only.

La soluzione (forse)

Si potrebbe scaricare il file tar dal sito Broadcom, ma già RPMFusion fa questo, oltre ad includere delle patch. Il tutto si trova nel file /usr/src/akmods/wl-kmod.latest.

Creare quindi una directory temporanea, con un nome indicativo, ed entrarci

mkdir /var/tmp/antani
cd /var/tmp/antani

Estrarre i file da wl-kmod.latest, che un src RPM.

rpm2cpio /usr/src/akmods/wl-kmod.latest | cpio -idmv

Starrare l'archivio tar.gz relativo alla propria architettura (es. 64 bit)

tar xzvf hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz

Applicare le patch

for i in *patch ; do patch -p1 < $i ; done

Lanciando il comando make otterremo l'errore in questione (quello che si è fatto finora a mano è probabilmente quello che fa akmods).\\ Modificare quindi il file src/wl/sys/wl_linux.c mettendo GPL al posto di MIXED/Proprietary nella definizione di MODULE_LICENSE. Forse Stallman si arrabbia, forse non è filosoficamente corretto, ma chiudiamo un occio :-(

sed -i 's/MIXED\/Proprietary/GPL/' src/wl/sys/wl_linux.c

Lanciamo make, make install ed infine depmod.

make && sudo make install
sudo depmod

Rimuovere i moduli incompatibili con questo appena installato (anche se alcuni non sono caricati), cosi come definito nel file /usr/lib/modprobe.d/broadcom-wl-blacklist.conf, oppure riavviate ghiozzamente il sistema.

rmmod ssb bcma b43 brcmsmac brcmfmac

Infine caricate il modulo wl.

modprobe wl

Verificate con il comando iwconfig[1] se la scheda adesso viene vista.

wlp3s0    IEEE 802.11  ESSID:off/any  
         Mode:Managed  Access Point: Not-Associated   
         Retry short limit:7   RTS thr:off   Fragment thr:off
         Power Management:off


Al reboot il modulo viene caricato automaticamente.
Probabilmente ad ogni aggiornamento del kernel va effettuata nuovamente parte della procedura.

Link di riferimento

Note

  1. sudo dnf install wireless-tools