Autorem tej sekcji jest Konrad Stępień i z nim się kontaktujcie, jak coś nie działa :-). Dzięki, Konrad!
W chwili obecnej każda dystrybucja Linuxa jest przygotowana tak, żeby
obsłużyć niemal każdy popularny sprzęt. Jądro dostarczane wraz z dystrybucją
posiada skompilowane do modułów sterowniki większości popularnych kart
sieciowych takich jak wszelkiego rodzaju NE-1000/2000,
3Com, SMC itd. Aby sprawdzić, jakie karty są wkompilowane
wystarczy obejrzeć zawartość katalogu /lib/modules/x.y.z/net/.
Bardzo popularne głównie ze względu na niskie ceny, są karty
NE-2000, dlatego dalszy opis będzie dotyczył tego typu kart.
Istnieje spora szansa, że Linux sam sobie wykryje i zainstaluje kartę
sieciową na etapie instalacji. Aby się o tym przekonać należy wydać
polecenie lsmod. Jako efekt jego działania otrzymujemy na ekranie listę
podobną do tej:
Module: #pages: Used by:
ip_alias 1 1 (autoclean)
ne 2 1 (autoclean)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8390 2 [ne] 0 (autoclean)
Jeśli jedna z linii zawiera ne, to znaczy, że nasza karta jest już widziana przez jądro i należy jedynie skonfigurować sieć (nadać adres IP, ustawić routing). Jeśli posiadamy np. kartę 3Com-509, zamiast ne będzie 3c509. Podobnie z innymi typami.
Jeżeli system nie rozpoznał karty w czasie startu, należy spróbować
załadować moduł ręcznie, pisząc modprobe ne (lub np. modprobe
3c509) Jeśli wyświetli się komunikat typu:
loading device 'eth0'...
ne.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
NE*000 ethercard probe at 0x300: 00 80 48 eb f2 11
eth0: NE2000 found at 0x300, using IRQ 10.
...to karta została zainstalowana.
modprobe nie chce załadować modułu, lub moduł jest ale karta nie działaNie zawsze autodetekcja działa poprawnie, czasem system nie jest w stanie znaleźć karty, albo znajduje ją źle. Należy wtedy dokładniej zapoznać się z konfiguracją systemu. Przede wszystkim sprawdzić należy na ustawienia karty (port i przerwanie czyli I/O i IRQ). Może się zdarzyć, że karta używa tych samych zasobów co inne urządzenia, wtedy należy zmienić konfigurację karty lub konfliktowego urządzenia.
Jeśli wszystko jest w porządku, ponawiamy próbę załadowania modułu, podając
dodatkowe informacje o adresie i przerwaniu wydając polecenie modprobe ne
io=0x300 irq=10
W pliku /etc/conf.modules zapisuje się konfigurację modułów jądra.
Należy dopisać tam linie odpowiadające konfiguracji naszej karty Przykładowy
taki plik może wyglądać następująco
options eth0 io=0x300 irq=10
alias eth0 ne
Jeśli to nie zadziała, (bardzo rzadkie przypadki), trzeba dopisać
odpowiednie komendy (insmod, modprobe) do któregoś z
plików startowych znajdujących się w /etc/rc.d/. Pliki te mogą się
znacznie różnić z zależności od dystrybucji.
Po pierwsze, trzeba sprawdzić wszystkie parametry, a także czy na pewno
ładujemy odpowiedni moduł. Np. niektóre karty SMC (EZ-Card) są to faktycznie
NE-2000 i tak należy je instalować. Sporo problemów sprawiały też klony
NE-2000 działające na szynie PCI. Oyrginalnie NE-2000 były wyłącznie
kartami ISA (wtedy zresztą nie było PCI). Pełna obsługa kart NE-2000 na
szynie PCI pojawiła się w jądrze 2.0.31. Wcześniejsze jądra mogą mieć
problemy. Najlepszym wyjściem jest zainstalowanie (naj)nowszego jądra. Jeśli
karta jest nowa/nietypowa, można jeszcze poszukać różnych nieoficjalnych łat
(patchy) na jądro. Zawsze warto też zajżeć na
http://cesdis.gsfc.nasa.gov/linux/drivers/
Do takich kart najczęściej dołączona jest dyskietka zawierająca różne sterowniki oraz program konfiguracyjny. Programy takie na ogół działają pod DOS-em. Jeśli można wyłączyć PnP na karcie lepiej to zrobić, a następnie ustawić wszystkie parametry i zapisać w pamięci karty.
W przypadku kart typowo PnP możliwe są trzy drogi.
Najpierw należy doprowadić do sytuacji, w której można załadować ręcznie
sterowniki obu kart. Jeśli wywołanie 2 razy modprobe (na ogół
trzeba podać dodatkowe paremetry) nie zgłasza błędów. Oczywiście konieczne
jest takie skonfigurowanie obu kart, aby korzystały z innych zasobów. Jeśli
Linuxa da się "ręcznie" przekonać do działanie z dwoma kartami,
Dalej postępujemy podobnie jak w przypadku jednej. Przykładowy plik
/etc/conf.modules dla 2 kart NE-2000 powinien wyglądać mniej więcej
tak:
options ne io=0x300,0x260 irq=5,10
alias eth0 ne
alias eth1 ne
Kwestia czy kompilować jako moduł, czy w jądro jest mocno "ideologiczna". Teoretycznie obsługa urządzenia wkompilowanego w jądro może być nieznacznie szybsza. W zasadzie dobry sterownik powinien działać i jako moduł i wkompilowany, jednak są sterowniki których nie można kompilować do modułu, lub takie które nie bardzo chcą jako moduł pracować. Moduły są jedynym wyjściem jeśli zachodzi potrzeba ładowania i usuwania sterownika w trakcie pracy systemu, lub gdzy trzeba urządzenie jakoś dodatkowo inicjalizować (np. PnP).
Parametry do driverów wkompilowanych przekazuje się przy starcie systemu przez podanie komendy:
LILO: ether=IRQ,IO_ADDR,PARAM1,PARAM1,NAME (wszystkie parametry są opcjonalne)
Żeby sobie zaoszczędić wpisywania, można dodać do lilo.conf:
append ether=5,0x300,eth0
W przypadku 2 kart podajemy ether=x,y,z,eth0 ethet=a,b,c,eth1
To co napisałem wynika z moich doświadczeń z kartami Compex RL2000, RL2000A RL2000 PCI, Genius GE-2000 kilka podwersji zworkowych i bez, a także 3Com 509 (ISA) i 590 (PCI), oraz SMC EZ-card.
Jeśli chodzi o karty PCI zgodne z NE, trenowałem to na mojej prywatnej RL2000 na jądrach poniżej i powyżej 2.0.30
Wszystko pisałem przy założeniu, że obsługa karty skompilowana jest jako moduł, bo tak są dostarczane "gotowe" dystrybucje