Łopatologiczne odpalanie karty wlan PCI na układzie rtl8180l pod Linuxem

Changelog:
v1.3.1 - 06.05.2004
- udalo sie odpalic karte pod 2.6.5 na ndiswrapperze
v1.3 - 17.04.2004
- Ndiswrapper, parę poprawek w tekscie (ehh, do opisu wkradl sie powazny blad, pomylilem sie przy dodawaniu sterownika windowsowego, blad dotyczyl komendy ndiswrapper -i) v1.2.1 - 12.12.2003
- na końcu strony dodałem swoje gg ;P
v1.2 - 12.11.2003
- nowa metoda odpalania karty za pomocą DriverLoadera (stery dla Windows XP, pod Linuxem :) ), punkt 1, 5
- drobne zmiany odnośnie pojawienia się nowych sterowników v1.4, punkt 2.3, 2.5
v1.1 - 02.11.2003
- poprawki w punkcie 4, odnośnie problemów z połączeniem
- parę małych korekt treści
v1.0 - 11.09.2003
- kompletna przebudowa tekstu, sterowniki 1.3
v0.9 - 24.08.2003
- pierwsza wersja dokumentu, opis dla sterowników w wersji 1.2, 0.5

Spis Treści


1. WSTĘP
2. INSTALACJA (RedHat, Aurox, SuSE
2.1. Co będzie potrzebne ?
2.2. Kompilacja
2.3. Edycja plików wlanup i /etc/resolv.conf
2.4. Odpalanie skryptu wlanup
2.5. Testowanie instalacji karty
3. INSTALACJA (Gentoo, PLD i inne)
4. PROBLEMY !!!
5. Driverloader
6. Ndiswrapper <- new



1. WSTĘP


Realtek udostępnił w połowie binarne sterowniki dla Linux. Pod tym adresem znajdują się prekompilowane wersje modułów (v1.4 04.11.2003), które na 100% powinny chodzić w systemach: RedHat 7.1-3, 8.0, 9.0, SuSE 8.2, Aurox 8.0, 9.0, 9.1, a także pod innymi dystrybucjami gdzie mamy jajo 2.4.x z gcc 2.96 lub gcc 3.xx, ale jest to tylko teoria ;]

Na płycie instalacyjnej można znaleźć przekompilowane moduły dla RedHat 7.x, ale nie polecam ich odpalać, najlepiej jest przekompilować to co jest najświeższe ze strony producenta.

Druga metoda instalacji, dość mało konwencjonalna, to zastosowanie DriverLoadera, który od niedawna umożliwia odpalanie niektórych sterowników przeznaczonych dla Windowsa, pod Linuxem. Niestety za prostotę używania i w tym wypadku, lepszą obsługę sprzętu, a niżeli przeznaczonych dla tej karty sterowników dla Linuxa, trzeba zapłacić (około 20$, dla zainteresowanych dostępny jest także FreeTrial na 30 dni).
Więcej o DriverLoaderze można poczytać w archiwum LinuxNews i na stronie producenta DriverLoader.

Konkurentem DriverLoadera powoli staje się projekt wolnych źródeł Ndiswrapper, działający na tych samych zasadach, ale za free.
Powoli dodawane są nowe urządzenia na listę obsługiwanego sprzętu http://ndiswrapper.sourceforge.net/supported_chipsets.html.
Od niedawna można na niej znaleźć chipset Realteka rtl8180l (dość popularny wśród lokalnych providerów internetowych).

2. INSTALACJA (RedHat, Aurox, SuSE)


2.1. Co będzie potrzebne ?

Do samej kompilacji na pewno potrzebne będą, kernel-source i gcc, konfigurację karty zapewni nam pakiet wireless-tools, przyda się także unzip, ponieważ sterowniki spakowane są zipem :). Wszystko można znaleźć na płytach instalacyjnych, bądź w Internecie http://rpm.pbone.net/.
Najlepiej od razu zainstalować system, zaznaczając w pewnym momencie, zbiór paczek Kernel Developers i narzędzi programistycznych, inaczej trzeba się męczyć z ręcznym dogrywaniem rpm'ów, co nie jest wygodne w tych systemach.

Dla przykładu ręczna instalacja paczek wygląda tak:

# rpm -i wireless-tools-*


2.2. Kompilacja

Ściągamy sterownik, odpowiedni dla naszej dystrybucji (wcześniej sprawdzając posiadaną wersje gcc, komenda gcc -dumpversion).
# cd /opt
# wget "ftp://210.51.181.211/cn/wlan/rtl8180l/rtl8180_linuxdrv_v13(gcc3.xx).zip"
# unzip rtl8180_linuxdrv_v13(gcc3.xx).zip
# cd /opt/release
Teraz potrzebny będzie dokładny numerek jaja dystrybucyjnego. Można go znaleźć w katalogach /usr/src lub /lib/modules.

Mała ściągawka:
RedHat 7.3 - 2.4.18-3
RedHat 8.0 - 2.4.18-14
RedHat 9.0 - 2.4.20-8
SuSE 8.2 - 2.4.20-4
Aurox 8.0 - ?
Aurox 9.0 - 2.4.20-9

Edytujemy plik Makefile, podając numerek własnego jaja, jako zmienna KERNELRELEASE.
#-----------------------------------------------
#Specify kernel version and include path
#-----------------------------------------------
KERNELRELEASE=2.4.20-8
INCLUDEPATH=-I /usr/src/linux-$(KERNELRELEASE)/include/ 
Ostatnia linijka oznacza, że numerek jaki podamy w zmiennej KERNELRELEASE jest częścią nazwy katalogu źródeł, zainstalowanego w naszym systemie jaja.

Będąc w katalogu /opt/release, zaczynamy kompilacje.
# make
gcc -O6 -Wall -DMODULE -D__KERNEL__ -DLINUX -I /usr/src/linux-2.4.20-9/include/ -DRTL_IO_MAP -DRTL_LITTLE_ENDIAN
 -DRTL_ACT_AS_STA -c -o r8180_pci_init.o r8180_pci_init.c
gcc -O6 -Wall -DMODULE -D__KERNEL__ -DLINUX -I /usr/src/linux-2.4.20-9/include/ -DRTL_IO_MAP -DRTL_LITTLE_ENDIAN
 -DRTL_ACT_AS_STA -c -o r8180_if.o r8180_if.c
--- Generate open part open_part.o ---

--- Generate rtl8180 linux driver  rtl8180_24x.o on 2.4.20-xfs-r3 --- 
Tak mniej, więcej powinno się to zakończyć :)

Jeśli wystąpią w tym miejscu jakieś błędy, prawdopodobnie: zastosowany został sterownik do złej wersji gcc lub błędny numerek kernela w Makefile.


2.3. Edycja plików wlanup i /etc/resolv.conf

Będąc klientem jakiegoś punktu dostępowego, praktycznie powinny wystarczyć poniższe ustawienia.
Plik /opt/release/wlanup:
#!/bin/bash
insmod -q -f  rtl8180_24x.o
iwpriv wlan0 wlan_para ssid2scan=SSID
iwpriv wlan0 wlan_para networktype=infra
iwpriv wlan0 msglevel 1 #wiecej informacji od kernela w logach ( tylko stery v1.4 )
iwpriv wlan0 enable

ifconfig wlan0 ADRES_IP netmask MASKA
route add default gw BRAMA
Parametry SSID, ADRES_IP, MASKA, BRAMA nadawane są przez providera.
Inne parametry wlan opisane są w pliku readme.

Plik z nazwami serwerów DNS /etc/resolv.conf:
nameserver 194.204.159.1
nameserver 194.204.152.34

2.4. Odpalanie skryptu wlanup
# ./wlanup
Warning: loading rtl8180_24x.o will taint the kernel: forced load
  See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module rtl8180_24x loaded, with warnings 
Powyższym komunikatem proszę się nie przejmować, jeśli się pojawi lub w ogóle się nie pojawi, oznacza że moduł jest załadowany z małym ostrzeżeniem.
Jeśli wszystko jest OK, karta radiowa nie koliduje z innymi urządzeniami i komputer się nie zawiesi, to po odpaleniu tego skryptu w logach /var/log/messages (bądź od razu na konsoli) powinno się pojawić coś w tym stylu:
Sep 11 17:08:24 xlog kernel: ******** RTL8180 Wireless Lan Driver 2003-06-11 loaded********
Sep 11 17:08:24 xlog kernel: PCI: Found IRQ 11 for device 02:02.0
Sep 11 17:08:24 xlog kernel: RTL8180: 02:02.0: region #0 IS a PIO resource!
Sep 11 17:08:24 xlog kernel: RTL8180: request_region(0x0000c000,0x00000100) !
Sep 11 17:08:24 xlog kernel: RTL8180: STA is NOT acting as AP!
Sep 11 17:08:24 xlog kernel: RTL8180: LITTLE_ENDIAN memory access
Sep 11 17:08:24 xlog kernel: RTL8180: station mode eeprom info
Sep 11 17:08:24 xlog kernel: RTL8180: EEpromAddressSize = 6!
Sep 11 17:08:24 xlog kernel: RTL8180: eepromID = 0x8129
Sep 11 17:08:24 xlog kernel: RTL8180: EEPROMVersion = 0x0102
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 0 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 1 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 2 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 3 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 4 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 5 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 6 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 7 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 8 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 9 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 10 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 11 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 12 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: Tx Power Level, channel 13 = 0xdd
Sep 11 17:08:24 xlog kernel: RTL8180: ChannelPlan = 0x0002
Sep 11 17:08:24 xlog kernel: RTL8180: RFChipID = 0x0003
Sep 11 17:08:24 xlog kernel: RTL8180: EEPROMVersion > 0x0101
Sep 11 17:08:24 xlog kernel: RTL8180: AntennaDiversity = FALSE
Sep 11 17:08:24 xlog kernel: RTL8180: CSThreshold = 0x000b
Sep 11 17:08:24 xlog kernel: RTL8180: DigitalPhy = FALSE
Sep 11 17:08:24 xlog kernel: RTL8180: DefaultAntennaB = TRUE
Sep 11 17:08:24 xlog kernel: RTL8180: CSMethod = RCR_EnCS1
Sep 11 17:08:24 xlog kernel: RTL8180: wlan driver loaded. ioaddr=0xc000, irq=11, MAC_addr=0:50:fc:d0:90:e4
Sep 11 17:08:24 xlog kernel: RTL8180: Use RTL private command [channel]
Sep 11 17:08:24 xlog kernel: RTL8180: Use RTL private command [ssid]
Sep 11 17:08:24 xlog kernel: RTL8180: Use RTL private command [ssid2scan]
Sep 11 17:08:24 xlog kernel: RTL8180: Use RTL private command [networktype]
Sep 11 17:08:24 xlog kernel: RTL8180:  ------ Enable wlan driver ------
Sep 11 17:08:24 xlog kernel: RTL8180: WLAN driver version 1.3
Sep 11 17:08:24 xlog kernel: RTL8180: wireless LAN controller RTL8180 + philips RF.
Sep 11 17:08:24 xlog kernel: RTL8180: PHILIPS_Config()
Sep 11 17:08:24 xlog kernel: RTL8180: PHILIPS_Config() - Analog mode
Sep 11 17:08:25 xlog kernel: RTL8180: ENABLE_RTL_DCST
Sep 11 17:08:25 xlog kernel: RTL8180:  Set dot11PrivacyInvoked = 0.
Sep 11 17:08:25 xlog kernel: RTL8180:  encryptmode = RTL_ENC_NONE
Sep 11 17:08:25 xlog kernel: RTL8180:  wepkeymode = WEP_MODE_OFF
Sep 11 17:08:26 xlog kernel: RTL8180: Select a BSS and Join it NR_KANAŁU
Sep 11 17:08:26 xlog kernel: RTL8180: ----------------------------------------------------------
Sep 11 17:08:26 xlog kernel: RTL8180: wlan0 Link status:
Sep 11 17:08:26 xlog kernel: RTL8180:    Channel number = NR_KANAŁU
Sep 11 17:08:26 xlog kernel: RTL8180:    beacon period = 100
Sep 11 17:08:26 xlog kernel: RTL8180:    BSSID = 0x00:0x30:0x1a:0x09:0x3c:0x1d
Sep 11 17:08:26 xlog kernel: RTL8180:    SSID = SSID
Sep 11 17:08:26 xlog kernel: RTL8180:    Capability = 0x01
Sep 11 17:08:26 xlog kernel: RTL8180:    AID = 0x51
Sep 11 17:08:26 xlog kernel: RTL8180:    Operational rate = 0x0F 
Sep 11 17:08:26 xlog kernel: RTL8180: ----------------------------------------------------------
Ostatnie 11 linijek oznaczają, wejście karty na określony kanał i przyjęcie nadanych wyżej parametrów. Gdy tak się nie stanie, trzeba dokładnie sprawdzić wpisane w skrypcie wartości. Więcej o problemach w punkcie 4.


2.5. Testowanie instalacji karty

Sprawdzamy, czy interfejs wlan0 jest poprawnie postawiony:
# cat /proc/rtl8180/status
---------------------------------------
             Driver status
---------------------------------------

  rtl8180_pci_driver version 1.4 loaded.
  The Network is configured as Infrastructure mode.
  MacAddr = 00:50:fc:d0:90:e4
  ioaddr = 0xac00
  irq = 22


---------------------------------------
          Wireless Link status
---------------------------------------

   Link Success!

   Channel number = 1
   beacon period = 100
   BSSID = 0x00 0x30 0x1a 0x09 0x37 0xb1
   SSID = KOM11_2
   Capability = 0x01
   AID = 0x7f
   Operational rates = <1><2><5.5><11>Mbps
   Current TX operational rates = <11>Mbps
# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:50:FC:D0:90:E4
          inet addr:80.51.130.254  Bcast:80.255.255.255  Mask:255.255.255.192
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:709 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:350302 (342.0 Kb)  TX bytes:0 (0.0 b)
          Interrupt:11 Base address:0xc000
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
ADRES_SIECI     0.0.0.0         MASKA          U     0      0        0 wlan0
127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo
0.0.0.0         BRAMA           0.0.0.0         UG    0      0        0 wlan0
Z wyglądu, wszystko jest OK :), teraz czas na test praktyczny:
# ping onet.pl
PING onet.pl (213.180.130.200) 56(84) bytes of data.
64 bytes from f1virt.onet.pl (213.180.130.200): icmp_seq=2 ttl=247 time=58.4 ms
64 bytes from f1virt.onet.pl (213.180.130.200): icmp_seq=3 ttl=247 time=19.6 ms
64 bytes from f1virt.onet.pl (213.180.130.200): icmp_seq=4 ttl=247 time=33.7 ms
64 bytes from f1virt.onet.pl (213.180.130.200): icmp_seq=5 ttl=247 time=32.6 ms
64 bytes from f1virt.onet.pl (213.180.130.200): icmp_seq=6 ttl=247 time=28.0 ms
No i się udało :)

Do zatrzymania interfejsu wlan0, przyda się skrypt wlandown. W dalszej części opisu wytłumaczę dlaczego ma się on przydać !!!


3. INSTALACJA (Gentoo, PLD i inne)


W Gentoo nie miałem żadnych problemów z instalacją, wystarczy zastosować się do powyższych wskazówek i użyć sterowników w wersji dla jaja 2.4.xx, gcc 3.xx, do tego jeszcze dystrybucyjny wireless-tools. To samo się tyczy Slackware i Mandrake, osobiście nie instalowałem, ale chyba powinno być ok.

Uwaga !!! Text odnosnie PLD może być już nieaktualny (pojawił się nowy kernel cieciwy 2.4.20-10, prawdopodobnie na nim karta da sie odpalić).
Nie udało mi się odpalić karty na PLD 1.0 Ra z jajem 2.4.20-9 (cięciwy). Sterownik rtl8180_linuxdrv_v13(gcc2.9x).zip, kompiluje się poprawnie, lecz załadowanie modułu do pamięci powoduje Segmentation Fault. To samo działo się na starszych sterownikach. (nie testowałem na PLD sterów v1.4, ale obawiam się ze jest to samo)

Jedynym wyjściem jest instalacja kernela z innej dystrybucji np. RedHat'a, SuSE, Aurox. Paczki można znaleźć w http://rpm.pbone.net/.
Najlepiej zainstalować sobie kernel-source* i samemu skompilować jajo, po czym zabrać się za kompilacje modułu karty radiowej. Wcześniej trzeba pamiętać o przystosowaniu PLD do kernela 2.4.x (więcej o tym procesie można się dowiedzieć na stronie http://pld-linux.org)

Edytujemy /etc/poldek.conf dodając nowe źródło pakietów:
source = 2.4.20,noauto ftp://ep09.kernel.pl/pub/People/cieciwa/Ra-2.4.20-9.i686_gcc2/
Po czym wykonujemy komendy:
# poldek --up
# poldek -n 2.4.20 --upgrade-dist
Teraz można zainstalować źródła wcześniej ściągniętego kernela i skompilować jajo (pamiętając o statycznym dodaniu używanego systemu plików i sterownika dysku twardego).
Do odpalenia karty w PLD nie nadaje się dystrybucyjny wireless-tools, konieczne jest ściągnięcie źródeł i ręczna kompilacja. Także iptables będzie tego wymagał, ale jak się z niego nie korzysta, ta czynność nie będzie konieczna.


4. PROBLEMY !!!

Sterowniki nie są jeszcze dopracowane, nie umożliwiają monitorowania siły sygnału itp., jedyna informacja jaką można uzyskać z interfejsu wlan0 jest liczba wysłanych i odebranych pakietów: RX i TX (w wersji 1.3 i 1.4 można czytać tylko przelicznik np. RX bytes:2726984 (2.6 Mb)).
Ogólnie problemów z sygnałem i jakością transferu nie ma, ale jest jeden problem który najbardziej denerwuje.
Gdy w eterze nic się nie dzieje, karta nie wysyła, ani nie odbiera pakietów, potrafi się zawiesić komputer, jedynym ratunkiem jest twardy RESET. Jak nie korzystam z Internetu musze zawsze wyładowywać moduł z pamięci (do tego przydaje się skrypt wlandown), inaczej po jakimś czasie się zawiesi (w wersji 1.3, 1.4 widoczna jest poprawa tego stanu, lecz dalej można zauważyć niestabilność, wysokie obciążenie systemu).

Ostatnio zauważyłem że karta od czasu do czasu ma problemy z połączeniem się z punktem dostępowym i nie była to wina ze strony providera. Działo się to wtedy gdy, korzystałem z karty pod windowsem i po soft resecie przechodziłem pod linuxa. Problem nie pojawia się gdy uruchamiając komputer przechodzimy od razu do Linuxa, nie resetując go po pracy w Windowsie. W logach objawia się to, takimi komunikatami:
Oct 30 16:40:24 xhost kernel: ******** RTL8180 Wireless Lan Driver 2003-06-11 loaded********
Oct 30 16:40:24 xhost kernel: RTL8180: 02:06.0: region #0 IS a PIO resource!
Oct 30 16:40:24 xhost kernel: RTL8180: request_region(0x0000ac00,0x00000100) !
Oct 30 16:40:24 xhost kernel: RTL8180: STA is NOT acting as AP!
Oct 30 16:40:24 xhost kernel: RTL8180: LITTLE_ENDIAN memory access
Oct 30 16:40:24 xhost kernel: RTL8180: station mode eeprom info
Oct 30 16:40:24 xhost kernel: RTL8180: EEpromAddressSize = 6!
Oct 30 16:40:24 xhost kernel: RTL8180: eepromID = 0x8129
Oct 30 16:40:24 xhost kernel: RTL8180: EEPROMVersion = 0x0102
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 0 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 1 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 2 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 3 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 4 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 5 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 6 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 7 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 8 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 9 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 10 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 11 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 12 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: Tx Power Level, channel 13 = 0xdd
Oct 30 16:40:24 xhost kernel: RTL8180: ChannelPlan = 0x0002
Oct 30 16:40:24 xhost kernel: RTL8180: RFChipID = 0x0003
Oct 30 16:40:24 xhost kernel: RTL8180: EEPROMVersion > 0x0101
Oct 30 16:40:24 xhost kernel: RTL8180: AntennaDiversity = FALSE
Oct 30 16:40:24 xhost kernel: RTL8180: CSThreshold = 0x000b
Oct 30 16:40:24 xhost kernel: RTL8180: DigitalPhy = FALSE
Oct 30 16:40:24 xhost kernel: RTL8180: DefaultAntennaB = TRUE
Oct 30 16:40:24 xhost kernel: RTL8180: CSMethod = RCR_EnCS1
Oct 30 16:40:24 xhost kernel: RTL8180: wlan driver loaded. ioaddr=0xac00, irq=22, MAC_addr=0:50:fc:d0:90:e4
Oct 30 16:40:24 xhost kernel: RTL8180: Use RTL private command [channel]
Oct 30 16:40:24 xhost kernel: RTL8180: Use RTL private command [networktype]
Oct 30 16:40:24 xhost kernel: RTL8180: Use RTL private command [ssid]
Oct 30 16:40:24 xhost kernel: RTL8180: Use RTL private command [ssid2scan]
Oct 30 16:40:24 xhost kernel: RTL8180:  ------ Enable wlan driver ------
Oct 30 16:40:24 xhost kernel: RTL8180: WLAN driver version 1.3
Oct 30 16:40:24 xhost kernel: RTL8180: wireless LAN controller RTL8180 + philips RF.
Oct 30 16:40:24 xhost kernel: RTL8180: PHILIPS_Config() 
Oct 30 16:40:24 xhost kernel: RTL8180: PHILIPS_Config() - Analog mode
Oct 30 16:40:25 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x00, data = 0x98, ReadData = 0xd1
Oct 30 16:40:25 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x03, data = 0x38, ReadData = 0xd1
Oct 30 16:40:26 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x04, data = 0xe0, ReadData = 0xd1
Oct 30 16:40:26 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x05, data = 0x90, ReadData = 0xd1
Oct 30 16:40:26 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x06, data = 0x1a, ReadData = 0xd1
Oct 30 16:40:27 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x07, data = 0x64, ReadData = 0xd1
Oct 30 16:40:27 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x11, data = 0x80, ReadData = 0xd1
Oct 30 16:40:28 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x12, data = 0x47, ReadData = 0xd1
Oct 30 16:40:28 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x13, data = 0x9b, ReadData = 0xd1
Oct 30 16:40:29 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x19, data = 0x00, ReadData = 0xd1
Oct 30 16:40:29 xhost kernel: RTL8180: BB Reg Write Fails! offset = 0x1a, data = 0xa0, ReadData = 0xd1
Oct 30 16:40:29 xhost kernel: RTL8180: ENABLE_RTL_DCST
Oct 30 16:40:29 xhost kernel: RTL8180:  Set dot11PrivacyInvoked = 0. 
Oct 30 16:40:29 xhost kernel: RTL8180:  encryptmode = RTL_ENC_NONE
Oct 30 16:40:29 xhost kernel: RTL8180:  wepkeymode = WEP_MODE_OFF
Oct 30 16:40:34 xhost kernel: RTL8180: TX NORMAL Descriptor unavailable!
Oct 30 16:40:46 xhost last message repeated 144 times

Mimo szczerych chęci nie udało mi się odpalić karty na jajach 2.4.22 i 2.4.23pre7, ludziom mającym płyty na układach i865 polecam 2.4.21, nie ma w nim obsługi APM BIOS, ale przynajmniej jest Serial ATA.

Pod Windows'em nie ma z kartą żadnych problemów, niestety trzeba czekać, aż producent bardziej poważnie zajmie się wersja sterowników pod Linuxa, na razie obsługa tej karty jest w nim marna ...


5. DRIVERLOADER

Tak jak producent zapewnia, nie powinno być problemów z odpaleniem driverloadera na kernelach 2.4.x (ewentualny patch dla ACPI, szczegóły w README) i 2.6.x.

Do instalacji wymagane są: kernel-sources, gcc, wireless-tools, unzip.

Na początku należy się zarejestrować. Po zatwierdzeniu formularza i potwierdzeniu prawidłowo podanego e-maila, wybieramy Free Trial aby przetestować produkt.
Teraz można podać adres sprzętowy (MAC) posiadanej karty, dla którego będzie wygenerowany 30 dniowy nr. licencji.
Z działu download ściągamy odpowiednie paczki dla naszej dystrybucji i instalujemy je w systemie.
W przypadku (*tar.gz) postępujemy w następujący sposób:
# tar -xzf driverloader-{wersja}.tar.gz
# cd cd driverloader-{wersja}
# make install
# dldrconfig
Po kompilacji modułu, przechodzimy do interfejsu konfiguracyjnego, http://127.0.0.1:18020/, podajemy login i hasło dla roota. Ściągamy sterowniki dla Windowsa XP ze strony Realteka i rozpakowujemy je.
# unzip winxp-8180\(154\).zip
Po czym, w interfejsie konfiguracyjny podajemy lokalizację (Upload Windows Driver) dwóch plików (inf i sys) z katalogu windowsowych sterowników. Następnie wchodzimy w Settings, podajemy swój e-mail, nr. licencji, w Advanced, parametry dla Channel i SSID.

Do /etc/modules.conf dopisujemy:
alias eth1 driverloader
Ładujemy moduł do pamięci, sprawdzając wcześniej czy czasem go tam nie ma, za pomocą komendy "lsmod".
modprobe driverloader
Gdy wszystko będzie ok, w logach powinno sie pojawić cos takiego:
eth1: Realtek RTL8180 Wireless LAN (Mini-)PCI NIC at 02:06.0
(MAC address 00:50:FC:D0:90:E4) ready
eth1: New link status: Connected (0001)
Wystarczy teraz, tylko skonfigurować interfejs eth1. W dystrybucjach opartych na rc-scripts (RedHat, Mandrake, Aurox), tworzymy odpowiedni pliczek ifcfg-eth1 w /etc/sysconfig/interfaces/. Ale możemy także ustawić całość ręcznie:
ifconfig wlan0 ADRES_IP netmask MASKA
route add default gw BRAMA
Poprawność instalacji można sprawdzić w następujący sposób:
# dldrconfig --info
Linuxant DriverLoader for Wireless LAN devices, version 1.38

Current parameters: ("dldrconfig --info")

Wireless interface name: eth1
        MAC address    : 00:50:FC:D0:90:E4
        Device instance: PCI-0000:02:06.0-10ec:8180-10ec:8180
        Device driver  : net8180
        License owner  : xxxx@xxx.pl
        License key    : C6-8F-D6-F2-37-50
        License status : OK (Expires 2003-12-12)
Nowe sterowniki umożliwiają nadawanie karcie parametrów za pomocą iwconfig (man iwconfig).
# iwconfig eth1
eth1      IEEE 802.11-DS  ESSID:"KOM11_2"  Nickname:"unknown"
          Mode:Managed  Access Point: 00:30:1A:09:37:B1  Bit Rate=11Mb/s
          Tx-Power=20 dBm
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:1/1  Signal level:-51 dBm  Noise level:-200 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
Jak widać driverloader, umożliwił także odczytanie poziomu sygnału i innych parametrów ze sterownika karty, czego nie umożliwiały sterowniki dla Linuxa. Oto łądny przykład screen1, screen2 :).

To wszystko, prawda że proste :), gdy pojawią się jakieś problemy polecam, najpierw zajrzeć do FAQ


6. NDISWRAPPER

Projekt jest w fazie developerskiej, na dzień 17.04.2004 istnieje wersja 0.6 i to co jest w repozytorium cvs. Osobiście polecam pociągnięcie tego co jest w cvsie.
Będzie do tego potrzebny klient cvs – http://www.cvshome.org/, oczywiście można go sobie zainstalować z zasobów danej dystrybucji.
Kiedyś próbowałem odpalić kartę na ndiswrapperze w wersji 0.6, ale mi się nie udało, wiec opis zacznę od zdobycia źródeł z repozytorium cvs. Zainteresowani mogą śledzić pracę nad projektem pod tym adresem http://cvs.sourceforge.net/viewcvs.py/ndiswrapper/ndiswrapper/. Do instalacji potrzebne będą źródła kernela i kompilator. Co do wersji jaja, osobiście używam 2.4.26 z smp, instalowałem także na 2.4.21 i 2.4.24. Czytając formu projektu, spotkałem się z przypadkami, w których ludzie chwalili się odpaleniem rtl8180l na 2.6.5, także co do kernela nie ma sztywnych ograniczeń.

Pracę będą prowadzone w ulubionym katalogu, /opt. Mając klienta cvs wykonujemy następujące komendy (komenda zawsze występuję po znaku [root@xhost opt]#, reszta to jej wynik).

[root@xhost /]# cd /opt
[root@xhost opt]# cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ndiswrapper login
Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/ndiswrapper
CVS password:

Hasło jest puste, wiec dajemy tylko ENTER.

[root@xhost opt]# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ndiswrapper co ndiswrapper
cvs server: Updating ndiswrapper
U ndiswrapper/AUTHORS
U ndiswrapper/ChangeLog
U ndiswrapper/INSTALL
U ndiswrapper/Makefile
U ndiswrapper/README
U ndiswrapper/ndiswrapper.spec.in
U ndiswrapper/version
cvs server: Updating ndiswrapper/driver
U ndiswrapper/driver/Makefile
U ndiswrapper/driver/coffpe.h
U ndiswrapper/driver/divdi3.c
U ndiswrapper/driver/hal.c
U ndiswrapper/driver/iw_ndis.c
U ndiswrapper/driver/iw_ndis.h
U ndiswrapper/driver/loader.c
U ndiswrapper/driver/loader.h
U ndiswrapper/driver/longlong.h
U ndiswrapper/driver/misc_funcs.c
U ndiswrapper/driver/ndis.c
U ndiswrapper/driver/ndis.h
U ndiswrapper/driver/ndiswrapper.h
U ndiswrapper/driver/ntoskernel.c
U ndiswrapper/driver/ntoskernel.h
U ndiswrapper/driver/proc.c
U ndiswrapper/driver/wrapper.c
U ndiswrapper/driver/wrapper.h
cvs server: Updating ndiswrapper/utils
U ndiswrapper/utils/Makefile
U ndiswrapper/utils/loadndisdriver.c
U ndiswrapper/utils/ndiswrapper
U ndiswrapper/utils/wlan_radio_averatec_5110hx.c

Przechodzimy do utwożonego katalogu i kompilujemy zawartość.

[root@xhost tmp]# cd ndiswrapper/
[root@xhost ndiswrapper]# make install
make -C driver install
make[1]: Wejście do katalogu `/opt/ndiswrapper/driver'
cc -DEXPORT_SYMTAB -DMODVERSIONS -include /lib/modules/2.4.26/build/include/linux/
modversions.h -DDRV_VERSION=\"0.6+CVS\" -DLINUX -D__KERNEL__ -DMODULE -I/lib/modul
es/2.4.26/build/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strict
-aliasing -pipe -mpreferred-stack-boundary=2 -O2   -c -o wrapper.o wrapper.c
[...]
cc -DEXPORT_SYMTAB -DMODVERSIONS -include /lib/modules/2.4.26/build/include/linux/
modversions.h -DDRV_VERSION=\"0.6+CVS\" -DLINUX -D__KERNEL__ -DMODULE -I/lib/modul
es/2.4.26/build/include -Wall -Wstrict-prototypes -fomit-frame-pointer -fno-strict
-aliasing -pipe -mpreferred-stack-boundary=2 -O2   -c -o hal.o hal.c
ld -r -o ndiswrapper.o wrapper.o iw_ndis.o loader.o ntoskernel.o ndis.o misc_funcs
.o proc.o divdi3.o hal.o
mkdir -p /lib/modules/2.4.26/misc
install -m 0644 ndiswrapper.o /lib/modules/2.4.26/misc
/sbin/depmod -a
make[1]: Opuszczenie katalogu `/opt/ndiswrapper/driver'
make -C utils install
make[1]: Wejście do katalogu `/opt/ndiswrapper/utils'
cc -Wall -g   -c -o wlan_radio_averatec_5110hx.o wlan_radio_averatec_5110hx.c
gcc -o wlan_radio_averatec_5110hx wlan_radio_averatec_5110hx.o
cc -Wall -g   -c -o loadndisdriver.o loadndisdriver.c
gcc -o loadndisdriver loadndisdriver.o
install -m 755 loadndisdriver /sbin
install -m 755 ndiswrapper /usr/sbin
install -m 755 wlan_radio_averatec_5110hx /usr/sbin
make[1]: Opuszczenie katalogu `/opt/ndiswrapper/utils'

Teraz należy ściągnąć najnowsze sterowniki dla rtl8180l pod Windows XP i rozpakować je.

[root@xhost ndiswrapper]# wget "ftp://152.104.125.40/cn/wlan/rtl8180l/winxp-8180(168).zip"
[root@xhost ndiswrapper]# unzip winxp-8180\(168\).zip
Archive:  winxp-8180(168).zip
  inflating: Release.txt
  inflating: Net8180.cat
  inflating: NET8180.INF
  inflating: rtl8180.sys

Następnie inicjujemy ndiswrappera za pomocą ściągniętych sterowników i sprawdzamy wynik instalacji

[root@xhost ndiswrapper]# ndiswrapper -i NET8180.INF
ls: /etc/ndiswrapper: Nie ma takiego pliku ani katalogu
Installing rtl8180.sys
[root@xhost ndiswrapper]# ndiswrapper -l
Installed ndis drivers:
rtl8180.sys

Czas na załadowanie modułu do pamięci. Za pomocą komendy dmesg można sprawdzić wynik całej operacji.
Po załadowaniu w niektórych systemach i przy niektórych modelach kart, może wystąpić niepożądany Segmentation Fault, albo jakiś inny błąd ochrony pamięci (jednym słowem. wysypka), który może spowodować zwis kompa.

[root@xhost ndiswrapper]# modprobe ndiswrapper
[root@xhost ndiswrapper]# dmesg
[...]
ndiswrapper version 0.6+CVS loaded
ndiswrapper adding rtl8180.sys
wlan0: ndiswrapper ethernet device 00:50:fc:d0:90:e4 using driver rtl8180.sys

Taki komunikat wskazuje na prawidłowo zainstalowane sterowniki.

Następną czynnością jest skonfigurowanie nowo powstałego interfejsu sieciowego wlan0 za pomocą komend iwconfig i ifconfig. Niewtajemniczonym polecam, wpierw zajrzeć do instrukcji systemowej “man iwconfig” i “man ifconfig”. Cały ten proces na pewno ułatwi napisanie skryptu uruchamianego przy każdym starcie systemu, bądź po prostu dopisanie paru linijek do /etc/rc.d/rc.local.

modprobe ndiswrapper
iwconfig wlan0 mode Managed
iwconfig wlan0 essid NAZWA_SSID

ifconfig wlan0 IP_KOMPUTERA netmask MASKA
route add default gw IP_BRAMY

Oczywiście każdy konfiguruję połączenie wg parametrów swojej sieci. Podane wartości są tylko przykładem.
To by było na tyle, bardziej ambitnym użytkownikom polecam zaglądanie od czasu do czasu na forum projektu http://sourceforge.net/forum/?group_id=93482 lub zapisanie się na grupę mailingową.



have fun ...

[uho]