7.14.5. Konfiguracja kart bezprzewodowych z wykorzystaniem sterowników Windows

System Windows posiada dość dobrze wydzieloną warstwę odpowiedzialną za komunikację z urządzeniami sieciowymi, obsługiwaną przez API o nazwie Network Driver Interface Specification (NDIS). Możliwa jest emulacja tej warstwy pod Linuksem, dzięki czemu można uruchamiać niektóre urządzenia, korzystając ze sterowników przeznaczonych dla systemu Windows. Istnieje kilka projektów w ramach których powstaje oprogramowanie do emulacji NDIS, jednym z nich jest ndiswrapper. Ten rozdział opisuje konfigurację kart bezprzewodowych z wykorzystaniem ndiswrappera, opisany sposób został przetestowany z kartami na chipsecie Realtek 8180 (uwaga - na niektórych komputerach karta nie działała, na innych ruszyła) oraz z kartą D-Link DWL-520+ (chipset Texas Instruments ACX 100, identyfikator PCI 104c:8400).

Notatka: Karty na chipsecie TI ACX100, w tym D-Link DWL-520+ działają także na sterownikach tworzonych w ramach projektu acx100.sf.net.

Pierwszym elementem jest ściągnięcie ndiswrappera - narzędzia i modułu odpowiedniego dla używanego jądra. Warto także skorzystać z jak najnowszego jądra (zbyt stare nie będą wspierane przez ndiswrappera lub sprzęt może nie działać).

W przypadku Debiana należy upewnić się, że mamy pakiet z nagłówkami dla używanego jądra, a następnie ściągnąć narzędzia i źródła do modułów:

# apt-get install ndiswrapper-utils ndiswrapper-source wireless-tools
Ściągniętych zapewne zostanie kilka dodatkowych pakietów, w tym module-assistant.

Kolejnym krokiem jest zbudowanie modułów, co wykonujemy komendą:

# module-assistant auto-install ndiswrapper
Po kompilacji powinniśmy otrzymać automatycznie zainstalowane moduły dla aktualnie używanej wersji jądra.

Kolejnym krokiem jest ustalenie z jakim urządzeniem mamy do czynienia (lspci i lspci -n), oraz sprawdzenie na liście kart, jakiego drivera powinniśmy użyć, oraz skąd go ściągnąć. Zwykle dobre efekty uzyskamy korzystając ze sterowników umieszczonych na płycie dołączonej do karty - mamy przynajmniej pewność, że sterowniki będą pasować do zakupionej wersji karty. Jeżeli do wyboru są sterowniki dla różnych wersji Windows, warto wypróbować te dla Windows XP, 2000 lub NT (najlepiej w tej kolejności). Sterowniki mogą mieć postać archiwum zip (możemy wtedy użyć do rozpakowania programu unzip), czasami jednak są dostarczane w postaci pliku wykonywalnego. Jeżeli próba użycia na tym pliku narzędzi do rozpakowywania archiwów zip zawiedzie, możemy być zmuszeni do uruchomienia programu pod Windows, aby wydobyć interesujące nas pliki.

Te interesujące nas pliki to plik z rozszerzeniem INF (zawiera między innymi listę właściwych plików ze sterownikiem) oraz pliki z samym sterownikiem, zwykle o rozszerzeniach SYS, BIN lub DAT. Wszystkie te pliki powinniśmy umieścić w jednym katalogu, po czym wywołać komendę instalacji sterownika, podając jako argument plik INF, np.

# ndiswrapper -i RTL8180.INF
Możemy teraz sprawdzić czy sterownik zainstalował się poprawnie:
# ndiswrapper -l
Installed ndis drivers:
net8180 driver present, hardware present
# 
Powinniśmy otrzymać informację, jak powyżej, o obecności zarówno sterownika, jak i obsługiwanego sprzętu.

Następny krok to załadowanie modułu:

# modprobe ndiswrapper
W logach sprawdzamy czy wszystko poszło poprawnie:
# tail /var/log/kern.log
Mar 22 12:04:50 btw7 kernel: ndiswrapper version 1.0rc2 loaded (preempt=yes,smp=no)
Mar 22 12:04:50 btw7 kernel: PCI: Found IRQ 9 for device 0000:00:05.0
Mar 22 12:04:50 btw7 kernel: ndiswrapper: using irq 9
Mar 22 12:04:50 btw7 kernel: wlan0: ndiswrapper ethernet device 00:50:fc:d1:05:a4 \ 
using driver net8180
Mar 22 12:04:50 btw7 kernel: wlan0: encryption modes supported: WEP, WPA with TKIP,\  
WPA with AES/CCMP
Mar 22 12:04:50 btw7 kernel: ndiswrapper: driver net8180 (Realtek,10/07/2004, \
5.173.1007.2004) added
Przykładowe komunikaty donoszą o pomyślnym wykryciu i zainstalowaniu sterownika dla karty. Jeżeli na tym etapie napotkamy problemy, to mogą być spowodowane złą wersją sterowników (niedostosowaną do sprzętu), za starą wersją jądra lub po prostu oznaczać, że karta nie chce pracować pod kontrolą ndiswrappera. Jeżeli zaś wszystko wydaje się OK, to należy zapewnić, że moduł ndiswrapper będzie ładowany przy starcie systemu (w Debianie umieszczamy nazwę modułu w pliku /etc/modules).

Ostatni krok to konfiguracja interfejsu sieciowego (zwykle wlan0). Dokonujemy tego standardowo za pomocą narzędzi ifconfig i iwconfig lub w sposób specyficzny dla danej dystrybucji, np. w Debianie umieszczając w pliku /etc/network/interfaces następujące linie:

auto wlan0
iface wlan0 inet static
	address 192.168.3.47
	netmask 255.255.255.0
	broadcast 192.168.3.255
	gateway 192.168.3.1
	wireless-essid IDENTYFIKATOR_SIECI
	wireless-mode Managed
	wireless-key restricted KLUCZ_WEP
Po podaniu komendy ifup wlan0 powinniśmy mieć działającą sieć bezprzewodową. Sprawdzamy to za pomocą polecenia iwconfig, które powinno wyświetlić informacje w stylu:
wlan0     IEEE 802.11b  ESSID:"IDENTYFIKATOR SIECI"
          Mode:Managed  Frequency:2.412 GHz  Access Point: 00:06:25:BC:88:3B
          Bit Rate:11 Mb/s   Tx-Power:20 dBm   Sensitivity=0/3
          RTS thr:2432 B   Fragment thr:2432 B
          Encryption key:off
          Power Management:off
          Link Quality:100/100  Signal level:-53 dBm  Noise level:-256 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
Uwaga - interfejs może nie być prawidłowo skonfigurowany dopóki nie znajdzie się w zasięgu punktu dostępowego.