piątek, 14 września 2012

Instalacja Dell Broadcom BCM4311 802.11b/g na Ubuntu 12.04

Poniższy opis dotyczy instalacji sterownika bezprzewodowej karty sieciowej Broadcom Corporation BCM4311 802.11b/g WLAN na laptopie Dell Inspiron 1720 w systemie Linux Ubuntu 12.04 LTS. Na podobnych konfiguracjach jednak instalacja powinna przebiegać w analogiczny sposób.

1. Wstęp

Ze swojego własnego doświadczenia wiem, jak bardzo kłopotliwym może być na początku uruchomienie bezprzewodówki Broadcom Corporation BCM4311 802.11b/g na Linuxie. Osobiście spędziłem kilka dni na mozolnym przekopywaniu się przez Google’a w poszukiwaniu pomocy. Pomoc oczywiście znalazłem, ale rozwiązań problemu było praktycznie tyle co ludzkich pomysłów. Każdy opisywał to inaczej, w dodatku czasami bardzo chaotycznie. Sugerując się sugestiami innych opracowałem w końcu swoją własną metodę na rozwiązanie tego problemu. Z punktu widzenia czasu, wydaje mi się ona teraz banalnie prosta. Zdaję sobie jednak sprawę, że zapewne w tym momencie jest wiele osób, które tak jak ja na początku - “błądzą” po forach, by rozwiązać powyższy problem. Dlatego też postanowiłem napisać krótki opis - jak krok po kroku zainstalować ową nieszczęsną kartę. Mam nadzieję, że komuś się przyda.

2. Problem

Obecne dystrybucje Linuxa zawierają w sobie imponującą liczbę sterowników do różnorakich podzespołów i ich uruchomienie nie stanowi żadnego problemu. Istnieją jednak producenci, którzy Linuxa w ogóle nie wspierają i nie oferują do swoich urządzeń żadnych sterowników. Czasami też takie sterowniki są, ale są to sterowniki o charakterze zamkniętym. A przecież nie w tym cała magia wolnego oprogramowania. Do jednej z tych kategorii należy właśnie nasza karta - Broadcom Corporation BCM4311 802.11b/g. Można to jednak w prosty sposób obejść. Całość sprowadza się do ściągnięcia firmware’u karty i zainstalowaniu programu, który pozwoli nam na jego uruchomienie w systemie.

Dostęp do internetu

Aby instalacja się powiodła będziemy niestety musieli mieć dostęp do internetu, aby ściągnąć wymagane archiwa. Można więc na razie podłączyć się za pomocą kabla ethernet, albo ściągnąć wszystko na innym komputerze i przenieść za pomocą pendrive’a na system, na którym będziemy sterowniki instalować.

3. Instalacja

Uwaga: całą procedurę można nieco zautomatyzować, gdyż istnieje program o nazwie firmware-b43-installer, który większość z poniżej opisywanych rzeczy może zrobić za nas, jednak w tym przypadku nie zawsze daje to oczekiwane rezultaty. Zainteresowani mogą spróbować:

$> sudo apt-get install firmware-b43-installer

W poniższym opisie nie będziemy jednak używać tego programu, a całą procedurę instalacji przeprowadzimy ręcznie krok-po-kroku, gdyż według mnie, taka forma będzie lepsza.





3.1. Pobranie sterowników


a) Sprawdzenie modelu karty

 

Uwaga: istnieje kilka modeli kart z tej serii, w zależności od modelu będziemy musieli pobrać odpowiedni plik. Po pierwsze sprawdzamy jaka karta jest zainstalowana w naszym komputerze. Dokonujemy tego z poziomu konsoli, wpisując:

$> lspci

Wyświetli nam się lista wszystkich urządzeń w systemie. Nasza karta powinna być wykryta jako Network Controller. Sprawdzamy teraz jaki dokładnie jest model karty, np. u mnie wygląda to tak:
0c:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 01)

Interesuje nas to: BCM43xx - jest to nazwa modelu naszej karty WLAN.
Najlepiej teraz zapiszmy sobie gdzieś ten model, bo będzie nam to potrzebne za chwilę. Następnie (w zależności od modelu karty) pobieramy odpowiedni firmware:


Dla modeli: BCM4306/3, BCM4311, BCM4312, BCM4318, BCM4320 
pobierzemy sterownik b43 w wersji 5.100.138

Dla modeli: BCM4301, BCM4306, BCM4306/2
pobierzemy sterownik b43legacy w wersji 5.10.56.27.3

Uwaga: wymienione sterowniki przeznaczone są dla kernela 3.2 i nowszych.
Wersję swojego kernela sprawdzisz wpisując w konsoli:

$> uname -r

b) Pobranie sterownika

 

Zanim rozpoczniemy pobieranie sterowników utwórzmy sobie w katalogu domowym katalog o nazwie instalacja - wszystkie pliki będziemy pobierać właśnie do niego.
$> cd ~
$> mkdir instalacja
$> cd instalacja
Gdy już wiemy jaki model karty mamy w systemie - pobieramy jeden z poniższych sterowników:

- b43 (dla modeli: BCM4306/3, BCM4311, BCM4312, BCM4318, BCM4320):
http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
lub
- b43legacy (dla modeli: BCM4301, BCM4306, BCM4306/2):
http://mirror2.openwrt.org/sources/broadcom-wl-5.10.56.27.3_mipsel.tar.bz2
Pliki możemy pobrać bezpośrednio z przeglądarki (jeśli np. korzystamy z innego komputera), lub za pomocą polecenia wget, tak jak to jest przedstawione na listingu poniżej:
- b43 (dla modeli: BCM4306/3, BCM4311, BCM4312, BCM4318, BCM4320):

$> wget http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
$> tar xjf broadcom-wl-5.100.138.tar.bz2
lub
- b43legacy (dla modeli: BCM4301, BCM4306, BCM4306/2):

$> wget http://mirror2.openwrt.org/sources/broadcom-wl-5.10.56.27.3_mipsel.tar.bz2
$> tar xjf broadcom-wl-5.10.56.27.3_mipsel.tar.bz2

Jeśli plik został pobrany na innym komputerze, to umieszczamy go w katalogu /home/użytkownik/instalacja (gdzie użytkownik=nasza_nazwa_użytkownika) i rozpakowujemy poleceniem:

$> tar xjf nazwa_pliku

Teraz czas na pobranie programu b43-fwcutter w wersji 015.
Będąc w katalogu /home/użytkownik/instalacja wpisujemy w konsoli:

$> wget http://bues.ch/b43/fwcutter/b43-fwcutter-015.tar.bz2
$> tar xjf b43-fwcutter-015.tar.bz2

Spowoduje to pobranie programu i jego rozpakowanie.
Teraz musimy go tylko skompilować:

$> cd b43-fwcutter-015
$> make
$> sudo make install
$> cd ..

Mamy już wszystko, co będzie nam potrzebne do instalacji.


3.2 Instalacja sterowników

Kolejnym krokiem będzie instalacja sterownika w systemie za pomocą programu b43-fwcutter. Upewnijmy się, czy jesteśmy w katalogu, do którego pobraliśmy nasze pliki (w naszym przypadku jest to /home/użytkownik/instalacja, lub w skrócie ~/instalacja).

Następnie wpiszmy w konsoli:

$> export FIRMWARE_INSTALL_DIR="/lib/firmware"

Stworzy nam to zmienną FIRMWARE_INSTALL_DIR, w której przechowywana będzie ścieżka do katalogu z firmware w systemie. W naszym przypadku, na Ubuntu jest to /lib/firmware.

Uruchomijmy teraz program b43-fwcutter, jednym z poniższych sposobów, w zależności od sterownika jaki pobraliśmy:
- sterownik b43 v.5.100.138 (dla modeli: BCM4306/3, BCM4311, BCM4312, BCM4318, BCM4320):

$> sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.100.138/linux/wl_apsta.o
lub
- sterownik b43legacy v.5.10.56.27.3 (dla modeli BCM4301, BCM4306, BCM4306/2):

$> sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.10.56.27.3/driver/wl_apsta/wl_prebuilt.o


4. Uruchamianie sterowników

W tym momencie (na Ubuntu 12.04 LTS) karta bezprzewodowa powinna już działać. Odczekajmy chwilę i sprawdżmy, czy system wykrywa jakieś dostępne sieci bezprzewodowe. Interfejs karty powinien być widoczny w systemie jako wlan0. Aby sprawdzić, czy interfejs jest "podniesiony", wpiszmy w konsoli:
$> ifconfig wlan0

Jeśli wszystko poszło dobrze powinny nam się wyświetlić informacje o interfejsie.


Uwaga: istnieje możliwość, że w pamięci załadowane są wciąż poprzednie sterowniki, więc musimy je wyłączyć za pomocą polecenia modprobe.

Zależnie od uprzednio zainstalowanych sterowników, wyłączamy je z pamięci:

$> modprobe -r b43 bcma
$> modprobe -r brcmsmac bcma
$> modprobe -r wl

Możemy wpisać wszystkie 3 polecenia po koleji - jeśli nie ma danego sterownika w pamięci, to modprobe po prostu to zignoruje.
Następnie uruchamiamy nasz sterownik:

$> modprobe b43 (jeśli instalowaliśmy sterownik b43)
$> modprobe brcmsmac (nie opisywany w artykule)
$> modprobe wl (jeśli instalowaliśmy sterownik b43legacy)

Polecenie działa od razu, nie trzeba restartować komputera.

Bardzo możliwe też, że będziemy musieli jeszcze wpisać stare sterowniki na tzw. czarną listę, tak aby nie ładowały się już do systemu.

Czarna lista urządzeń znajduje się w pliku /etc/modprobe.d/blacklist.conf

Przykład z pliku blacklist.conf:

[...]
# replaced by b43 and ssb.
blacklist bcm43xx
[...]

Taki wpis sprawi, że sterownik bcm43xx nie będzie uruchamiany.
Jeśli natomiast chcemy “wypisać” sterownik z czarnej listy dajemy przed jego nazwą znak #, np.:

# replaced by b43 and ssb.
# blacklist bcm43xx

Uwaga: aby edytować plik blacklist.conf musimy mieć uprawnienia administratora.


5. Tips & tricks: szybkie uruchamianie z LiveCD/USB

Istnieją dwie opcje instalacji Ubuntu na pamięci USB - jedna w wersji LiveCD uruchamianej jednorazowo do pamięci, bez możliwości zapisu zmian, gdzie po restarcie wszystkie zapisane dane znikają oraz druga - z tzw. persistence file, dzieki któremu wszystkie zapisane dane pozostają, a pendrive traktowany jest jak dysk twardy. W tym drugim przypadku nie ma problemu, gdyż raz zainstalowane sterowniki pozostają w systemie nawet po ponownym uruchomieniu komputera.
W pierwszym przypadku sprawy maja się inaczej. Tutaj po każdorazowym uruchomieniu systemu wszystko instalować musimy od nowa.

Na szczęście procedurę tą można w znaczny sposób sobie zautomatyzować i nie dotyczy to jedynie sterowników. Wystarczy przygotować sobie katalog na pendrive z najważniejszymi rzeczami oraz kilka skryptów w bashu, które po uruchomieniu systemu zrobią całą “mokrą robotę” za nas.

Podam teraz skrypt, który automatycznie uruchomi nam sterowniki od karty WLAN w ułamku dosłownie sekundy, a wszystkie te kroki, które wykonywaliśmy podczas instalacji zrobi za nas.

Pamiętacie, że wszystkie wymagane do instalacji pliki zapisywaliśmy w katalogu instalacja w naszym katalogu domowym. Wróćmy więc do niego raz jeszcze.
Stwórzmy sobie skrypt w bashu, który będzie instalował to wszystko automatycznie. Jako iż wszystkie pliki mamy już pobrane, wystarczy jedynie ich instalacja.

Stwórzmy w katalogu instalacja plik o nazwie “instaluj.sh”.

W pliku tym wpiszmy to co poniżej:

#!/bin/bash

cd b43-fwcutter-015
make
sudo make install


export FIRMWARE_INSTALL_DIR="/lib/firmware"
cd ..
sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.100.138/linux/wl_apsta.o
modprobe b43

Oczywiście, dotyczy to sterownika b43, w przypadku wersji b43legacy dwie ostatnie linijki wyglądały będą tak:

sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.10.56.27.3/driver/wl_apsta/wl_prebuilt.o
modprobe wl

Następnie zapiszmy nasz plik i nadajmy mu prawa pliku wykonywalnego:

$> chmod +x instaluj.sh

Cały katalog instalacja skopiujmy sobie na pendrive’a z zainstalowanym Ubuntu.
Ale tutaj mała uwaga: jeśli mamy uruchomiony system jako LiveCD/USB to Linux nie pozwoli nam na pendrivie niczego zapisać, gdyż będzie on traktowany jako płyta CD (a więc tylko do odczytu). Można to ominąć prostym, aczkolwiek trochę ryzykownym sposobem. Wystarczy podczas pracy systemu wyjąć pendrive'a z portu USB (ale pod warunkiem, że nie będzie w tym czasie pracował!) Następnie wkładamy go z powrotem i Linux wykryje go jak normalną pamięć flash - od tej pory zapis jest już możliwy.
No i to wszystko - od tej pory za każdym razem po uruchomieniu systemu wystarczy, że wejdziemy do folderu instalacja na pendrivie,  skopiujemy go np. na /home) i uruchomimy skrypt instaluj.sh - sterowniki zainstalują się same. Jest to bardzo przydatne, naprawdę. W ogóle warto przygotować sobie kilka najpotrzebniejszych programów i sterowników, a następnie nagrać to wszystko na pendrive'a z Linuxem - oszczędza to naprawdę dużo czasu podczas każdego ponownego rozruchu systemu.

6. Podsumowanie

Tak jak napisałem - mam nadzieję, że artykuł choć trochę pozwolił zaoszczędzić komuś czasu i nerwów związanych z instalacją tej nieszczęsnej karty. Jeśli macie jakieś pytania lub sugestie skorzystajcie z opcji komentarza na dole. Jeśli artykuł okazał się pomocny - to również możecie mnie o tym poinformować w komentarzu. Możecie też do mnie napisać na adres szczyglis@o2.pl , lub szczyglis83@gmail.com. Wszelkie sugestie lub poprawki będą mile widziane :)


7. Testowana platforma

Laptop Dell Inspiron 1720
Karta WLAN Broadcom Corporation BCM4311 802.11b/g
Ubuntu precise 12.04 LTS 32-bit
Kernel: 3.2.0-23-generic-pae


8. Przydatne liki:




Artykuł na licencji GNU/GPL
Autor: Marcin Szczygliński
Wersja 1.1
Ostatnia modyfikacja 15/09/2012 godz. 01:28






Artykuł został zamieszczony również tutaj: http://www.ubuntu-pomoc.org/instalacja-broadcom-4311-na-ubuntu-12-04/

1 komentarz:

  1. A co jeżeli wersja jądra to 3.19.0-32 i686 ?

    OdpowiedzUsuń