# Opis sterowników do PCMCIA

## Autor: David Hinds, dhinds@hyper.stanford.edu
v1.105, 9 Września 1997
Wersja polska: Bartosz Maruszewski B.Maruszewski@jtz.org.pl
v2.0, 13 Grudnia 1997

Dokument ten opisuje jak zainstalować i używać Card Services PCMCIA w Linux-ie oraz odpowiada na niektóre często zadawane pytania. Najnowszą wersję oryginału tego dokumentu można zawsze znaleźć pod adresem hyper.stanford.edu. Wersja HTML znajduje się pod adresem hyper.stanford.edu/HyperNews/get/pcmcia/home.html Dokument ten został napisany w standardzie ISO-8859-2. Nowsza wersja zawiera uaktulanione wskazania na katalog zawierający jądro na ftp.icm.edu.pl. Kolejna wersja jest uaktualnieniem do obecnej wersji oryginału.

## 1. Informacje ogólne i wymagania sprzętowe.

## 1.1 Wprowadzenie.

Card Services dla Linux-a to kompletny pakiet obsługujący PCMCIA. Zawiera on zestaw ładowalnych modułów jądra, które tworzą wersję aplikacji interfejsowych dla PCMCIA Card Services, zestaw sterowników klientów dla specyficznych kart, oraz demona-menedżera do kart, który może reagować na wkładanie kart i ich wyjmowanie poprzez ładowanie i usuwanie odpowiednich modułów. Obsługuje on także tzw. "gorące wymiany" kart PCMCIA, tak że karty mogą być wkładane i wyjmowane w każdej chwili.

Oprogramowanie to jest w ciągłym rozwoju. Zawiera przypuszczalnie błędy i należy go używać ostrożnie. Zrobię co w mojej mocy, żeby poprawić błędy zgłaszane do mnie, ale jeśli nie powiesz mi o takim, to mogę się o nim nigdy nie dowiedzieć. Jeśli już użyjesz tego oprogramowania, mam nadzieję, że wyślesz mi swoje doświadczenia, złe czy dobre !

Jeśli masz jakieś sugestie na temat polepszenia tego dokumentu, daj mi znać dhinds@hyper.stanford.edu.

## 1.2 Prawa autorskie i Disclaimer.

Copyright (c) 1996, 1997 David A. Hinds

Dokument tez może być reprodukowany lub dystrybuowany bez mojej wyraźnej zgody. Wersje zmodyfikowane, włączając tłumaczenia na inne języki, mogą być wolno dystrybuowane, zakładając, że są jasno identyfikowane jako takie, i ta uwaga o prawach autorskich jest w nich zawarta.

Dokument ten może być zawarty w dystrybucjach komercyjnych bez mojej wyraźnej zgody. Ponieważ nie jest to wymagane chciałbym być powiadomiony o takowych działaniach. Jeśli zamierzasz rozprowadzać ten dokument jako pracę wydawaną, skontaktuj się ze mną, aby upewnić się, że masz najnowszą wersję.

Dokument ten jest rozprowadzany "takim jakim jest", bez wyraźnych czy wynikających gwarancji. Używaj informacji zawartych tutaj na swoje własne ryzyko.

## 1.3 Jaka jest najnowsza wersja i skąd mogę ją wziąć ?

Bieżącą główną wersją Card Services jest wersja 2.9, a pomniejsze uaktualnienia czy poprawki błędów są numerowane jako 2.9.1, 2.9.2 itd.

Kod źródłowy najnowszej wersji jest dostępny pod adresem hyper.stanford.edu. Nazywa się pcmcia-cs-2.9.?.tar.gz. Będzie tam przeważnie kilka wersji. Z reguły trzymam najnowszą podwersję wersji głównej. Nowe wersje główne mogą zawierać względnie nieprzetestowany kod, tak więc trzymam także najnowszą wersję poprzedniej wersji głównej jako względną stabilną wersję, do której można się cofnąć; bieżącą taką wersją jest 2.8.23. To już zależy od ciebie czy zdecydujesz się na wersję najnowszą z 2.9.x czy na 2.8.23; w pliku CHANGES znajdują się najważniejsze różnice.

Adres `hyper.stanford.edu` jest mirrorowany pod adresem `sunsite.unc.edu` w katalogu `/pub/Linux/kernel/pcmcia`. [Od tłumacza.]Serwer ten z kolei jest mirrorowany w Polsce pod adresem ftp.icm.edu.pl.
Postaram się też umieszczać główne wersje na `tsx-11.mit.edu` w katalogu `/pub/linux/packages/laptops/pcmcia` teraz i później.

Jeśli nie czujesz się na siłach, żeby skompilować sterowniki do PCMCIA, w wersji bieżącej są zawarte pre-kompilowane sterowniki w najpopularniejszych dystrybucjach: Slackware, Red Hat, Caldera i Yggdrasil, między innymi.

## 1.4 Jakie systemy są obsługiwane ?

Kod ten powinien działać na prawie wszystkich laptopach nadających się do Linux-a. Obsługiwane są wszystkie popularne kontrolery PCMCIA włączając w to Intel, Cirrus, Vadem, VLSI, Ricoh i Databook. Kontrolery ustawiane używane w IBM i Toshiba-ch także są obsługiwane. Doki (docks) kart PCMCIA dla systemów typu desktop także powinny działać tak długo, dopóki są tego typu, że wkłada się je bezpośrednio do szyny ISA, niż poprzez kontrolery SCSI-PCMCIA czy IDE-PCMCIA.

Kontroler Motorola 6AHC05GA używany w niektórych laptopach Hyundaia nie jest obsługiwany. Kontrolery ustawiane w HP Omnibook 600 nie są obsługiwane. Kontroler mostka PCI-CardBus (od SMC, Ricoh-a, Cirrus-a i TI) jest obecnie obsługiwany tylko w przypadku trybu 16-bitowego, a i tak obsługa ta jest ciągle trochę eksperymentalna.

## 1.5 Jakie karty PCMCIA są obsługiwane?

Wersja obecna zawiera sterowniki dla różnych kart ethernetowych, sterownik do modemu, kart portów szeregowych, niektórych kontrolerów SCSI, sterownik do kart ATA/IDE oraz sterowniki do kart pamięci które powinny obsługiwać większość kart SRAM i niektóre karty flash. Plik SUPPORTED.CARDS zawarty w każdej wersji Card Services zawiera wszystkie karty jakie działają w przynajmniej jednym właściwym systemie.

Prawdopodobieństwo tego, że karta nie wymieniona w tym pliku będzie działać zależy od typu tej karty. Zasadniczo wszystkie modemy powinny działać z zawartym sterownikiem. Niektóre karty sieciowe mogą działać jeśli są wersjami OEM karty obsługiwanej. Inne typy kart IO (bufory ramkowe, karty dźwiękowe itd.) nie będą działać dopóki ktoś nie napisze odpowiednich sterowników.

## 1.6 Kiedy moja nowa karta będzie obsługiwana ?

Niestety, nikt mi z reguły nie płaci za pisanie sterowników, tak więc jeśli chcesz mieć sterownik do swojej ulubionej karty, będziesz przypuszczalnie musiał zrobić część roboty na własną rekę. W wersji idelanej, chciałbym się kierować w stronę modelu zbliżonego do jądra Linux-a, gdzie będę głównie odpowiedzialny za "rdzeń" kodu do PCMCIA a inni autorzy pisaliby sterowniki do konkretnych urządzeń. W pliku `SUPPORTED.CARDS` wspomniane są niektóre karty, dla których sterownik jest w trakcie pisania. Będę się starał pomóc gdzie tylko mogę ale miej na uwadze, że śledzenie (debugging) sterowników do urządzeń w jądrze poprzez e-mail nie jest zbytnio efektywne.

Producenci zainteresowani pomocą w tworzeniu obsługi ich urządzeń mogą się ze mną skontaktować w sprawie konkretów.

## 1.7 Listy dyskusyjne.

Kiedyś zajmowałem się bazą danych i listą dyskusyjną na temat użytkowników Linux-a na PCMCIA. Ostatnio zmieniłem swoją stronę WWW z informacjami na temat PCMCIA w stronę "HyperNews", ze zbiorem wiadomości na temat PCMCIA w Linux-ie. Są listy na temat instalacji i konfiguracji, na temat różnych typów kart oraz na temat programowania i śledzenia (debug) pod PCMCIA. Strona z informacjami na temat PCMCIA jest pod adresem http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html. Użytkownicy mogą ustawić sobie opcję informowania poprzez email o nowych odpowiedziach na konkretne pytania, albo o wszystkich nowych wiadomościach w danej kategorii. Mam nadzieję, że stanie się to użytecznym archwium informacji dla pytań, które wychodzą poza treść tego HOWTO.

Jest lista dyskusyjna, której tematem jest Linux na laptopie - lista "linux-laptop". Aby uzyskać więcej informacji, wyślij list zawierający słowo "help" na adres majordomo@vger.rutgers.edu. Aby zapisać się na tę listę, wyślij list zawierający łańcuch "subscribe linux-laptop" na ten sam adres. Lista ta może być dobrym forum dyskusyjnym na temat Linux-a na PCMCIA.

Na Stronie Domowej Linux-a na Laptopy http://www.cs.utexas.edu/users/kharker/linux-laptop znajduje się wiele odwołań do adresów, na których są informacje na temat konfigurowania Linux-a na konkretnych typach laptopów. Jest także przeszukiwalna baza danych na temat konfiguracji systemu.

## 2. Kompilacja, instalacja i konfiguracja.

## 2.1 Wymagania i ustawienia jądra.

Zanim zaczniesz, powinieneś pomyśleć czy rzeczywiście musisz samemu skompilować pakiet PCMCIA. Wszyskie popularne dystrybucje Linux-a są dostarczane wraz z pakietami zawierającymi skompilowane sterowniki dla PCMCIA. Ogólnie musisz tylko zainstalować od nowa sterowniki jeśli potrzebujesz jakiejś nowej cechy obecnych sterowników albo jeśli zaktualizowałeś czy przekonfigurowałeś jądro tak, że przestało być kompatybilne ze sterownikami przychodzącymi z dystrybucją. Chociaż kompilacja pakietu PCMCIA nie jest trudna technicznie, to wymaga jednak pewnego obycia z Linux-em.

Następujące elementy powinny być zainstalowane w twoim systemie zanim zaczniesz instalować PCMCIA:

- Jedno z następujących jąder: 1.2.8 do 1.2.13, 1.3.30, 1.3.37, 1.3.39 do 1.3.99, 1.99.* (czyli, pre-2.0), 2.0.* lub 2.1.*.
- Bieżąca wersja pakietu z modułami i narzędziami do nich.
- (Opcjonalnie) "Forms" - interface dla użytkownika pod X11.

Wersja najnowsza wymaga jądra w wersji 1.2.8 lub wyższej, albo jądra z serii testowych 1.3.30 lub wyższe, 1.3.38 jest definitywnie popsute, a 1.3.31 do 1.3.36 nie są przetestowane. Wymaga także względnie świeżej wersji narzędzi do modułów. Nie ma łat na jądro specyficznych dla PCMCIA.

Musiz mieć pełne drzewo źródeł jądra, nie tylko aktualny obraz jądra, aby skompilować pakiet PCMCIA. Moduły PCMCIA zawierają niektóre odwołania do plików ze źródeł jądra. O ile ty możesz chcieć skompilować nowe jądro, żeby usunąć niepotrzebne sterowniki, instalacja PCMCIA nie wymaga tego.

Bieżące stabilne wersje źródeł jądra oraz łaty do niego są dostępne pod adresem ftp://ftp.icm.edu.pl/pub/Linux/kernel/v2.0. Bieżąca wersja narzędzi jest pod tym samym adresem w pliku `modules-2.0.0.tgz`. Jądra w wersji rozwojowej znajdują się pod adresem ftp://ftp.icm.edu.pl/pub/Linux/kernel/v2.1.

W pliku `Documentation/Changes` znajdują się opisy wersji wszystkich rodzajów innych składników systemu, które są wymagane dla tej wersji jądra. Możesz sprawdzić tę listę i upewnić się czy twój system jest aktualny, szczególnie jeśli ostatnio uaktualniałeś jądro. Jeśli używasz jądra 2.1, upewnij się, że używasz poprawnej kombinacji bibliotek dzielonych i narzędzi do modułów. Najnowsze wersje narzędzi do modułów, tak samo jak wersje dla starszych jąder można znaleźć pod adresem http://www.pi.se/blox/modules.

Jeśli planujesz używanie karty ethernetowej PCMCIA podczas konfigurowania twojego jądra powinieneś włączyć obsługę sieci, ale wyłącz obsługę zwykłych kart sieciowych, włączając w to "pocket and portable adapters". Sterowniki do kart sieciowych PCMCIA są zaimplementowane jako ładowalne moduły. Jakiekolwiek sterowniki wkompilowane w twoje jądro będą tylko zabierać miejsce.

Jeśli chcesz używać SLIP-a, PPP czy PLIP-a musisz albo skonfigurować twoje jądro z włączonymi tymi opcjami, albo użyć modułów ładowalnych tych sterowników. Niestety w jądrze w wersji 1.2.X nie można skompilować pewnych opcji jako moduły ładowalne (jak np. kompresja SLIP-a) więc najlepiej będzie jeśli wkompilujesz ten sterownik do jądra jeśli go potrzebujesz.

Jeśli chcesz używać kontrolera Token Ring do PCMCIA, musisz wkompilować obsługę Token Ring do swojego jądra - "Token Ring driver support", ale powinieneś wyłączyć `CONFIG_IBMTR`.

Jeśli chcesz używać kontrolera IDE PCMCIA, musisz włączyć opcję `CONFIG_BLK_DEV_IDE_PCMCIA`, w jądrach w wersji 1.3.72 do 2.1.7. Starsze jądra nie obsługują urządzeń IDE. nowsze jądra nie wymagają specjalnych ustawień.

Jeśli będziesz używał kontrolera SCSI PCMCIA, powinieneś włączyć opcję `CONFIG_SCSI` podczas konfiguracji jądra. Włącz także wszelkie sterowniki "top level" (dyski SCSI, taśmy, CD-ROM-y, generic), których spodziewasz się używać. Wszystkie sterowniki "low level" dla konkretnych kontrolerów powinny być wyłączone, ponieważ będą tylko zajmować miejsce.

Jeśli chcesz zmodularyzować sterownik, który jest potrzebny do urządzenia PCMCIA, musisz zmodyfikować plik `/etc/pcmcia/config`, aby podać, które moduły mają być załadowane dla których typów kart. Na przykład, jeśli sterownik szeregowy jest zmodularyzowany, wtedy mógłbyś zmienić definicję urządzenia szeregowego na:

       device "serial_cs"
       class "serial" module "misc/serial", "serial_cs"

Pakiet ten zawiera narzędzie do podawania statusu karty oparte na X11 - `cardinfo`. Narzędzie to jest oparte na wolno dystrybuowanym interfejsie zwanym "Forms Library", które będziesz musiał zainstalować przed stworzeniem `cardinfo`. Dystrybucja binarna jest na hyper.stanford.edu. Są tam wersje a.out oraz ELF. Będziesz także musiał mieć wszystkie normalne pliki nagłówkowe pod X i biblioteki.

## 2.2 Instalacja.

Oto streszczenie procesu instalacji:

- Rozpakuj pcmcia-cs-2.9.?.tar.gz w /usr/src.
- Uruchom `make config` w nowym katalogu `pcmcia-cs-2.9.?`
- Uruchom `make all`, potem `make install`.
- Ustaw skrypty startowe dla PCMCIA i pliki opcji w `/etc/pcmcia` odpowiednio dla twojego systemu.

Jeśli planujesz zainstalować jakieś dodatkowe sterowniki klienta nie zawarte w dystrybucji PCMCIA, rozpakuj każdy z nich w głównym katalogu źródeł PCMCIA. Potem postępuj zgodnie z normalnymi instrukcjami kompilacji. Dodatkowe sterowniki zostaną skompilowane i zainstalowane automatycznie.

Uruchomienie `make config` zapyta o kilka opcji konfiguracyjnych i sprawdzi twój system, aby zweryfikować czy spełnia on wszystkie wymagania instalacji obsługi PCMCIA. W większości przypadków, będziesz po prostu akceptował wszystkie domyślne opcje. Upewnij się, że dokładnie sprawdziłeś komunikaty wyjściowe w razie błędów.

Jeśli kompilujesz zestaw PCMCIA do instalacji na inną maszynę, podaj alternatywny katalog docelowy kiedy zostaniesz zapytany przez skrypt konfiguracyjny. Powinna to być ścieżka bezwzględna. Wszystkie narzędzia do PCMCIA zostaną zainstalowane względem tego katalogu. Będziesz mógł następnie "zarchiwizować" ten katalog poleceniem `tar` i skopiować go na maszynę docelową, a następnie rozpakować względem jej katalogo głównego, aby zainstalować wszystko we właściwym miejscu.

Jeśli "cross-kompilujesz" na innej maszynie, możesz podać alternatywne nazwy kompilatora i linkera. Może to być także pomocne na systemach z pomieszaną architekturą a.out i ELF. Skrypt zapyta także o dodatkowe opcje śledzenia dla kompilatora.

Niektóre z narzędzi wspierających (`cardctl` i `cardinfo`) mogą być skompilowane w formie "safe" (bezpiecznej) lub "trusting" (ufającej). Forma bezpieczna nie pozwala użytkownikom innym niż root na modyfikację konfiguracji karty. Forma ufająca pozwala zwykłemu użytkownikowi na zawieszenie, odwieszenie i reset karty oraz na zmianę bieżącej konfiguracji. Skrypt konfiguracyjny zapyta cię czy chcesz skompilować narzędzia jako "safe" czy "trusting"; wartością domyślną jest "safe".

Jest kilka opcji konfiguracji jądra które mają wpływa na narzędzia do PCMCIA. Skrypt konfiguracyjny może je wywnioskować z działającego jądra (najpopularniejszy przypadek). Alternatywnie, jeśli kompilujesz do instalacji na inną maszynę może przeczytać konfigurację z drzewa źródeł jądra, albo każda opcja może być podana interaktywnie.

Uruchomienie `make all` a potem `make install` stworzy i następnie zainstaluje moduły do jądra i programy narzędziowe. Moduły do jądra są instalowane w `/lib/modules/<wersja>/pcmcia`. Programy `cardmgr` i `cardctl` są instalowane w `/sbin`. Jeśli tworzony jest `cardinfo`, to instalowany jest on w `/usr/bin/X11`.

Pliki konfiguracyjne zostaną zainstalowane w `/etc/pcmcia`. Jeśli instalujesz na starej wersji, twoje stare pliki konfiguracyjne zostaną zarchiwizowane przed skasowaniem ich. Zachowanym skryptom zostaną nadane rozszerzenia w stylu `*.~1~`, `*.~2~`.

Jeśli nie wiesz jakiego typu jest twój kontroler, to możesz użyć narzędzia `probe` z podkatalogu `cardmgr`, aby go wykryć. Są dwa główne typy: Databook TCIC-2 i kompatybilne z Intel i82365SL.

Demon na poziomie użytkownika obsługuje włożenie i wyjęcie karty. Nazywa się on `cardmgr`. Jest podobny w funkcjonowaniu do wcześniejszej wersji `pcmciad` Barry'ego Jaspana. `Cardmgr` czyta plik konfiguracyjny opisujący znane karty PCMCIA z `/etc/pcmcia/config`. W pliku tym zawarte jest jakie zasoby mogą być zaalokowane dla użycia przez urządzenia PCMCIA, i mogą być zmodyfikowane dla twojego systemu. Zobacz stronę w podręczniku systemowym "man" na temat `pcmcia`, aby dowiedzieć się więcej na temat tego pliku.

## 2.3 Post-instalacja dla systemów używających skryptów inicjacyjnych a'la BSD.

Niektóre dystrybucje Linux-a, włączając Slackware, używają systemu skryptów a'la BSD. Jeśli istnieje plik `/etc/rc.d/rc.M`, to twój system zalicza się do tej grupy.
Skrypt `rc.pcmcia`, zainstalowany w `/etc/rc.d` kontroluje startowanie i wyłączanie systemu PCMCIA.
`make install` użyje polecenia `probe`, aby wykryć typ twojego kontrolera i odpowiednio zmodyfikować `rc.pcmcia`. Powinieneś dodać do skryptu startowego `/etc/rc.d/rc.M` linię, która wywołuje skrypt startowy PCMCIA, np. tak:

         /etc/rc.d/rc.pcmcia start

Właściwie nie ma znaczenia, gdzie umieścisz ten plik, tak długo jak sterowniki PCMCIA są startowane po `syslogd`.

## 2.4 Post-instalacja dla systemów używających skryptów inicjacyjnych a'la SYS V.

Red Hat, Caldera i Debian mają ten właśnie system. Jeśli masz katalog `/etc/init.d` albo `/etc/rc.d/init.d`, to twój system jest w tej grupie. Skrypt `rc.pcmcia` zostanie zainstalowany jako `/etc/rc.d/init.d/pcmcia`, lub `/etc/init.d/pcmcia`. Nie ma potrzeby edytowania żadnego skryptu startowego, aby włączyć PCMCIA: zostanie to zrobione automatycznie.

Jeśli istnieje katalog `/etc/sysconfig`, wtedy zostanie utworzony oddzielny plik konfiguracyjny `/etc/sysconfig/pcmcia` z opcjami startowymi. Jeśli musisz zmienić jakiekolwiek opcje modułów (jak `PCIC=` czy `PCIC_OPTS=`) modyfikuj raczej ten plik konfiguracyjny aniżeli właściwy skrypt startowy PCMCIA. Plik ten nie zostanie skasowny przez kolejne instalacje.

Niektóre wcześniejsze wersje używały katalogu `/etc/sysconfig/pcmcia-scripts` zamiast `/etc/pcmcia` na tych platformach. Wersja bieżąca natomiast używa `/etc/pcmcia` dla wszystkich systemów, a istniejący `/etc/sysconfig/pcmcia-scripts` przeniesie do `/etc/pcmcia`.

## 2.5 Opcje konfiguracji specyficzne dla danego systemu.

Pakiet Card Services powinien automatycznie zapobiegać alokacji portów IO i przerwań, które są już używane przez inne urządzenia. Spróbuje on także wykryć konflikty z nieznanymi urządzeniami, ale nie jest to w pełni godne zaufania. W niektórych przypadkach, muisz wyraźnie podać zasoby, które mają być niedostępne dla danego urządzenia w pliku `/etc/pcmcia/config.opts`.

Oto niektóre ustawienia zasobów dla specyficznych typów laptopów.

- W AMS SoundPro wyłącz IRQ 10.
- W niektórych modelach TravelPro 5300 użyj adresów pamięci 0xc8000-0xcffff.
- W BMX 486DX2-66 wyłącz IRQ 5 i 9
- W Chicony NB5 użyj adresów pamięci 0xda000-0xdFFFF.
- Na Compaq Presario 1020, wyłącz porty 0x2F8-0x2FF, IRQ 3 i IRQ 5.
- W HP Omnibook 4000C wyłącz porty 0x300-0x30F.
- Na Micron Millenia Transport, wyłącz IRQ 5, IRQ 9.
- W NEC Versa M, wyłącz IRQ 9 i porty 0x2E0-2FF.
- W NEC Versa P/75 wyłącz IRQ 5 i 9.
- W NEC Versa S wyłącz IRQ 9 i 12.
- W NEC Versa seria 6000 wyłącz porty 0x300-0x33f, IRQ 9 i 10.
- W ProStar 9200, Altima Virage i Acquiline Hurricane DX4-100 wyłącz IRQ 5 i porty 0x330-0x35f. Użyj może adresów pamięci 0xd8000-0xdffff.
- W Siemens Nixdorf SIMATIC PG 720C użyj adresów pamięci 0xc0000-0xcffff i portów 0x300-0x3bf.
- W TI TravelMate 5000 użyj adresów pamięci 0xd4000-0xdffff.
- W Toshiba T4900 CT wyłącz IRQ 5, porty 0x2E0-0x2E8 i 0x330-0x338.
- W Twinhead 5100, HP 4000, Sharp PC-8700 i PC-8900 wyłącz IRQ 9 (dźwięk) i 12
- W MPC seria 800 wyłącz IRQ i porty 0x300-0x30f dla CD-ROM-u.

Niektóre kontrolery PCMCIA mają opcjonalne zalety, które mogą być zaimplementowane w danym systemie, ale nie muszą. Generalnie jest niemożliwe dla sterownika gniazdka (socket driver), aby wykryć czy te zalety są zaimplementowane. Sprawdź stronę w podręczniku systemowym na temat swojego sterownika, aby zobaczyć jakie opcjonalne zalety mogą być włączone.

W kilku przypadkach polecenie `probe` nie będzie w stanie wykryć automatycznie typu twojego kontrolera. Jeśli masz system Halikan NBD 486, to jego kontroler TCIC-2 znajduje się w niezwykłym miejscu: będziesz musiał zmodyfikować `rc.pcmcia`, aby załadować moduł `tcic` oraz ustawić `PCIC_OPTS` na `tcic_base=0x2C0`.

Sterowniki gniazda typu "low level" `tcic` i `i82365` mają liczne parametry do timing-ów szyny, które może będzie trzeba ustawić dla systemów ze szczególnie szybkimi procesorami. Symptomy problemów z timing-ami zawierają problemy z wykryciem karty, zawiśnięcia przy dużym załadowaniu systemu, duże średnie błędów, albo zła wydajność urządzeń. Sprawdź odpowiednie strony w podręczniku systemowym, aby dowiedzieć się więcej szczegółów. A tu jest krótkie podsumowanie:

- Kontrolery Cirrus mają liczne konfigurowalne parametry timing-ów. Najważniejszy wydaje się być `cmd_time`, który określa długość cyklu szyny PCMCIA. Szybkie systemy 486 (np. DX4-100) wydają się zwiększać wydajność przy zwiększeniu tego parametru z domyślnej wartości 6 na 12 czy 16.
- Kontroler Cirrus PD6729 PCI ma parametr `fast_pci`, który powinien być ustawiony jeśli szybkość szyny PCI jest większa niż 25 MHz.
- W kontrolerach Vadem VG-468 i Databook TCIC-2 parametr `async_clock` zmienia względne taktowanie szyny PCMCIA i cykle szyny host. Ustawienie tego parametru spowoduje dodanie stanów oczekiwania na niektóre operacje. Chociaż jeszcze nie słyszałem o jakimś laptopie, który by tego potrzebował.
- Moduł `pcmcia_core` posiada parametr `cis_speed`, który zmienia prędkość pamięci używaną dla dostępu do Card Information Structure (CIS). Na niektórych systemach z szybkimi zegarami szynowymi, zwiększanie tego parametru (czyli zwalnianie dostępu do kart) może przynieść pożytek przy problemach z rozpoznaniem karty.
- To nie jest sprawa timing-ów, ale jeśli masz więcej niż jeden kontroler PCMCIA w twoim systemie, albo jakieś dodatkowe gniazda w stacji dokowania (docking station), powinieneś załadować moduł `i82365` z parametrem `extra_sockets` ustawionym na 1.

Wszystkie te opcje powinny być skonfigurowane przez modyfikowanie początku pliku `/etc/rc.d/rc.pcmcia`. Na przykład:

       # Albo i82365 albo tic
       PCIC=i82365
       # Wstaw tu parametry timing-ów dla sterownika gniazd
       PCIC_OPTS="cmd_time=12"
       # Wstaw tu opcje pcmcia_core
       CORE_OPTS="cis_speed=500"

Oto niektóre ustawienia timing-ów dla specyficznych sytemów:

- W ARM Pentium-90 albo Midwest Micro Soundbook Plus użyj `freq_bypass=1 cmd_time=8`.
- W Midwest Micro Soundbook Elite użyj `cmd_time=12`.
- W Gateway Liberty spróbuj `cmd_time=16`.

W niektórych systemach używających kontrolera Cirrusa, włączając NEC Versa M, BIOS ustawia kontroler w specyficzny stan zawieszenia podczas startu systemu. W tych systemach, polecenie `probe` nie powiedzie się. Jeśli tak się zdarzy, zmodyfikuj plik `/etc/rc.d/rc.pcmcia` ręcznie tak:

       # Wstaw tu parametry timing-ów dla sterownika gniazd
       PCIC=i82365
       # Wstaw tu opcje pcmcia_core
       PCIC_OPTS="wakeup=1"

## 2.6 Problemy podczas ładowania modułów jądra.

Skrypt konfiguracyjny normalnie upewni się czy moduły PCMCIA są kompatybilne z twoim jądrem. Tak więc, problemy podczas ładownia modułów wskazuje z reguły na to, że użytkownik ingerował w jakiś sposób w normalny proces instalacji. Niektóre z tych problemów są wysyłane bezpośrednio na konsolę Linux-a. Inne błędy są zapisywane w pliku "log-file", zwykle jest to `/usr/adm/messages` albo `/var/log/messages`. W zależności od konfiguracji twojego syslogd, niektóre komunikaty mogą być zapisane do innych plików, które zwykle znajdują się także w `/usr/adm` czy `var/log`. Aby wyśledzić problem, upewnij się, że sprawdziłeś obie lokalizacje.

Niektóre moduły PCMCIA wymagają serwisów jądra, które mogą, ale nie muszą być obecne, zależnie od konfiguracji jądra. Na przykład, sterowniki kart SCSI wymagają skonfigurowanej obsługi SCSI w jądrze, a sterowniki sieci wymagają skonfigurowania sieci w jądrze. Jeśli w jądrze brakuje potrzebnego serwisu `insmod` może twierdzić, że są niezdefiniowane symbole i nie załadować modułu.

Jeśli `insmod` zwraca błąd "wrong version", oznacza to, że moduł był skompilowany dla innej wersji jądra niż to, które akurat działa. Może to się pojawić jeśli moduły skompilowane na jednej maszynie są kopiowane na drugą z inną konfiguracją, albo jeśli jądro jest rekonfigurowane po tym, jak pakiet PCMCIA został zainstalowany.

Innym źródłem błędów podczas ładowana modułów może być to, że moduły i jądra były skompilowane z różnymi ustawieniami `CONFIG_MODVERSIONS`. Jeśli moduł z wkompilowanym sprawdzaniem wersji jest ładowany do jądra bez sprawdzania wersji, `insmod` zwróci błąd "undefined symbols".

Ostatecznie, względnie nowe wersje binutils są niekompatybilne ze starszymi wersjami narzędzi do modułów, i mogą powodować, że są zwracane takie właśnie błędy. Najczęstszym symptomem jest błąd o niezdefiniowaniu `gcc_compiled`. Jeśli masz takie błędy, odśwież narzędzia do modułów do najnowszej wersji, dostępnych z ftp.icm.edu.pl.

## 2.7 Problemy z przerwaniem zmiany statusu karty.

W większośći wypadków sterownik do gniazd (`i82365` albo `tcic`) automatycznie wykryje i wybierze odpowiednie przerwanie, aby sygnalizować zmiany statusu karty. Automatyczne wyszukiwanie przerwania nie działa na niektórych kontrolerach kompatybilnych z Intel-em, włączając Cirrus-a i niektóre IBM ThinkPad. Jeśli urządzenie nie jest aktywne w czasie sprawdzania, jego przerwanie może także pojawić się jako niedostępne. W takich przypadkach sterownik gniazd może wybrać przerwanie które jest używane przez inne urządzenie.

W sterownikach `i82365` i `tcic` można używać opcji `irq_list` aby ograniczyć ilość wyszukiwanych przerwań. Lista ta ogranicza zbiór przerwań, które mogą być użyte przez karty PCMCIA oraz do monitorowania zmian statusu karty. Opcja `cs_irq` może być użyta, aby wyraźnie określić przerwanie, którego należy użyć do monitorowania zmian statusu karty.

Jeśli nie możesz znaleźć numeru przerwania, które działa, jest jeszcze tryb statusu "polled": oba - `i82365` i `tcic` zaakceptują opcję `poll_interval=100`, aby sprawdzać zmiany statusu karty raz na sekundę. Opcja ta powinna być także używana jeśli w twoim systemie brakuje dostępnych przerwań dla kart PCMCIA. Szczególnie w systemach z więcej niż jednym kontrolerem PCMCIA, nie ma zbytnio sensu w przeznaczaniu przerwań na monitorowanie zmian statusu kart.

Wszystkie te opcje powinny być ustawiane w linii `PCIC_OPTS=` w pliku `/etc/rc.d/rc.pcmcia` albo `/etc/sysconfig/pcmcia` zależnie od twojego systemu.

## 2.8 Problemy z identyfikacją karty.

Domyślnie, sterowniki PCMCIA alokują okna pamięci w przestrzeni 0xC0000-0xFFFFF, po sprawdzeniu czy nie ma w niej jakichś konfliktów z ROM-em czy innymi urządzeniami. To okno pamięci jest podane w pliku `/etc/pcmcia/config.opts`. Sprawdzanie ma miejsce przy pierwszej próbie skonfigurowania nowej karty. Procedura sprawdzania nie jest idioto-odporna, więc możliwe jest niezidentyfikowanie konfliktu. Jeśli obszar ten jest używany przez inne urządzenia w twoim systemie, karty mogą nie zostać zidentyfikowane poprawnie. Przy układach które to obsługują, konflikt może też powstawać przy przesłanianiu tego obszaru pamięci.

Klasycznym symptomem problemu z konfiguracją okna pamięci jest zidentyfikowanie wszystkich kart jako karty pamięci. W nadzwyczajnych przypadkach konflikt taki może powstać z jakimś krytycznym serwisem systemowym, co może powodować zawieszenia czy restarty. Jeśli podejrzewasz taki konflikt, sprawdź najpierw czy wyłączone jest przesłanianie ROM-u w ustawieniach twojego sprzętu. Znalezienie dobrego okna może wymagać trochę eksperymentów. Kilka alternatywnych okien to: 0xD0000-0xDFFFF, 0xC9000-0xCFFFF i 0xD8000-0xDFFFF.

Jeśli masz sterowniki DOS-owe do PCMCIA, możesz zobaczyć jakich obszarów pamięci one używają. Zauważ, że adresy pamięci w DOS-ie są często podawane w formie segmentów, która to obcina ostatnią cyfrę szesnastkową (tak, że adres bezwzględny 0xD0000 byłby podany jako 0xD000. Upewnij się, że dodałeś tę jedną cyfrę kiedy wpisywałeś wartość do pliku `/etc/pcmcia/config.opts`.

Jeśli problem z identyfikacją karty nie został rozwiązany dopasowywaniem okien pamięci, to prawdopodobnie jest to problem z "timing-ami"

## 2.9 Dlaczego nie dystrybujesz binariów do PCMCIA ?

Dla mnie, dystrybucja binariów jest bardzo niewygodna. Jest to sprawa skomplikowana ponieważ niektóre zalety mogą być podane dopiero w czasie kompilacji, oraz dlatego, że moduły PCMCIA są zależne od "poprawnej" konfiguracji jądra. Więc musiałbym przypuszczalnie dystrybułować prekompilowane moduły wraz z odpowiednimi wersjami jąder. Idąc dalej, prekompilowane moduły są najbardziej potrzebne kiedy instalujemy Linux-a od początku. To z reguły wymaga ustawienia PCMCIA tak, żeby można jej było użyć w procesie instalacji dla konkretnej dystrybucji Linux-a. Każda dystrybucja Linux-a ma własną procedurę, i nie jest dla mnie wykonalnym udostępniać dyskietki "boot" i "root" chcociażby tylko dla tych najbardziej popularnych kombinacji sterowników i dystrybucji.

PCMCIA jest teraz częścią większości ważniejszych dystrybucji, włączając Red Hat, Caldera, Slackware, Yggdrasil, Craftworks oraz Nascent Technology.

## 2.10 Dlaczego ten pakiet jest taki wielki ?

No cóż, po pierwsze, to on wcale nie jest taki wielki. Wszystkie moduły sterowników razem wzięte zajmują jakieś 200k. Programy narzędziowe dodają jeszcze jakieś 70k, a rzeczy w /etc/pcmcia zajmują jakieś 30k. Podczas działania, rdzeń modułów PCMCIA zabiera około 48k pamięci systemowej. Demon cardmgr z reguły jest wyswapowywany oprócz momentów kiedy karty są wsadzane lub wyjmowane. Całkowita objętość pakietu nie wiele różni się od implementacji Card Services pod DOS-a.

W porównaniu z DOS-owymi "włącznikami", może się to wydawać trochę przesadzone, szczególnie dla ludzi, którzy nie planują używać tych wszystkich zalet jakie posiada PCMCIA, jak np. zarządzanie zasilaniem czy "gorące wymiany". "Włączniki" mogą być malutkie ponieważ generalnie obsługują one ograniczoną ilość kontrolerów PCMCIA. Jeśli ktoś miałby napisać autentycznie "ogólny" "włącznik" do modemu, skońyczłoby się na tym, że pojawiłaby się tam większość funkcji z Card Services, aby obsłużyć karty od różnych sprzedawców oraz pełny zakres różnych wariantów kontrolerów PCMCIA.

## 3. Stosowanie i zalety.

## 3.1 Narzędzia do monitorowania urządzeń PCMCIA.

Demon `cardmgr` normalnie wydaje sygnał dźwiękowy (beep) kiedy karta jest wsadzana, a ton tego dźwięku informuje nas o statusie nowo włożonej karty. Dźwięk wysoki a po nim niski informuje, że karta została zidentyfikowana, ale z jakiegoś powodu nie mogła zostać skonfigurowana. Jeden dźwięk niski informuje, że karta nie mogła zostać zidentyfikowana.

Jeśli wszystkie moduły są poprawnie załadowane, polecenie `lsmod` daje mniej więcej taki wynik (bez włożonych kart):

       Module:        #pages:  Used by:
       ds                 2
       i82365             3
       pcmcia_core        7    [ds i82365]

Wszystkie moduły PCMCIA oraz demon `cardmgr` wysyłają komunikaty o statusie do systemowego programu logującego. Będzie to z reguły `/var/log/messages` albo `/usr/adm/messages`. Powinno to być pierwsze miejsce, do którego należy zajrzeć kiedy coś nie działa. Kiedy wysyłasz mi wiadomość o jakimś błędzie, zawsze dołącz zawartość tego pliku. Jeśli nie możesz znaleźć komunikatów z twojego systemu, to sprawdź konfigurację w pliku `/etc/syslogd.conf`, aby zobaczyć do jakich plików są one zapisywane. `Cardmgr` także zapisuje niektóre bieżące informacje o urządzeniach dla każdego gniazda w pliku `/var/run/stab`. Oto przykładowa zawartość tego pliku:

       Socket 0: Adaptec APA-1460 SlimSCSI
       0       scsi    aha152x_cs      0       sda     8       0
       0       scsi    aha152x_cs      1       scd0    11      0
       Socket 1: Serial or Modem Card
       1       serial  serial_cs       0       ttyS1    5       65

W liniach opisujących urządzenia, pierwsze pole jest gniazdem, drugie - klasą urządzenia, trzecie - nazwą sterownika, czwarte jest używane, aby numerować urządzenia złożone (multiple devices) związane z tym samym sterownikiem, piąte - nazwą urządzenia, a ostatnie dwa pola są liczbą główną i poboczną dla danego urządzenia (jeśli jest dostępne).

Polecenie `cardctl` może służyć do sprawdzenia statusu gniazda, albo jego konfiguracji. Oto przykładowy rezultat polecenia "`cardctl config`":

> `

>     Socket 0:
>     Socket 1:
>       Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
>       Card type is memory and I/O
>       IRQ 3 is dynamic shared, level mode, enabled
>       Speaker output is enabled
>       Function 0:
>         Config register base = 0x0800
>           Option = 0x63, status = 0x08
>         I/O window 1: 0x0280 to 0x02bf, auto sized
>         I/O window 2: 0x02f8 to 0x02ff, 8 bit

> `

Jeśli masz uruchomione X-y, to narzędzie `cardinfo` wyświetla informacje o statusie wszystkich gniazd PCMCIA, podobną w zawartości do "`cardctl config`".

## 3.2 Przegląd skryptów konfiguracyjnych PCMCIA.

Każde urządzenie PCMCIA jest przyporządkowane jakiejś klasie, która opisuje jak powinno ono zostać skonfigurowane i jak nim zarządzać. Klasy są związane ze sterownikami urządzeń w `/etc/pcmcia/config`. Jest w tej chwili pięć klas urządzeń IO (sieć, SCSI, CD-ROM, dyski fixed i szeregowe) oraz dwie klasy urządzeń związanych z pamięcią (pamięć i FTL). Dla każdej klasy są dwa skrypty w `/etc/pcmcia/config`: główny skrypt konfiguracyjny (`/etc/pcmcia/scsi` dla urządzeń SCSI), i skrypt z opcjami (`/etc/pcmcia/scsi.opts`). Skrypt główny dla danego urządzenia zostanie wywołany, aby skonfigurować to urządzenie kiedy karta jest wkładana, i żeby wyłączyć dane urządzenie kiedy karta jest wyjmowana. Dla kart, z którymi jest związane kilka urządzeń, skrypt zostanie wywołany dla każdego urządzenia.

Skrypty konfiguracyjne zaczynają od wyciągnięcia pewnych informacji o danym urządzeniu z pliku `/var/run/stab`. Każdy skrypt konstruuje "adres urządzenia" w zmiennej `ADDRESS`, który jest unikatowy dla urządzenia, które ma być skonfigurowane. Jest to przekazywane do skryptu `*.opts`, który powinien zwrócić informację o tym, jak dane urządzenie z podanego adresu powinno zostać skonfigurowane. Dla niektórych urządzeń, adres ten jest po prostu numerem gniazda. Dla innych, zawiera on dodatkowe informacje, które mogą być przydatne do zadecydowania jak skonfigurować dane urządzenie. Na przykład, urządzenia sieciowe przekazują swój adres Ethernet-owy jako część swojego "adresu urządzenia", tak żeby skrypt `network.opts` mógł tego użyć, aby wybrać z kilku różnych konfiguracji.

Pierwszą częścią wszystkich adresów urządzeń jest bieżący schemat PCMCIA. Parametr ten jest używany do obsługi złożonych zbiorów konfiguracji urządzeń opartych na pojedynczej zewnętrznej zmiennej podanej przez użytkownika. Jeden ze sposobów użycia schematów to posiadanie schematu domowego, i schematu roboczego, który zawierałby różne zbiory parametrów konfiguracji sieci. Schemat bieżący jest wybierany przy pomocy polecenia `cardctl`. Domyślnym schematem, jeśli żaden nie jest podany, jest "default".

Jako zasada ogólna podczas konfiguracji Linux-a na laptopa, urządzenia PCMCIA powinny być konfigurowane tylko przy pomocy skryptów do urządzeń PCMCIA. Nie próbuj konfigurować urządzenia PCMCIA w ten sam sposób co urządzenie dołączone na stałe.

## 3.3 Adaptery sieciowe PCMCIA.

Normalnie interfejsy sieciowe typu Ethernet na Linux-ie mają nazwy `eth0`, `eth1` itd. Kontrolery Token-Ring są obsługiwane podobnie, chociaż nazywane są `tr0`, `tr1` itd. Polecenie `ifconfig` jest wywoływane, aby zobaczyć albo zmodyfikować stan urządzenia sieciowego. Własnością Linux-a jest to, że interfejsy sieciowe nie mają odpowiednich plików w katalogu `/dev`, więc nie bądź zaskoczony, że nie możesz ich znaleźć.

Kiedy zostanie wykryta karta Ethernet-owa PCMCIA, zostanie jej przydzielona pierwsza wolna nazwa interfejsu, którą będzie przypuszczalnie `eth0`. `Cardmgr` wykona skrypt `/etc/pcmcia/network`, aby skonfigurować ten interfejs.

Nie konfiguruj swojej karty Ethernet-owej w `/etc/rc.d/rc.inet1` ponieważ karty może nie być kiedy skrypt ten jest wykonywany. Wstaw w komentarz wszystko, oprócz urządzenia "loopback" w `rc.inet1`.
Jeśli twój system ma automatyczną procedurę konfiguracji sieci powinieneś zwykle wskazać, że nie masz zainstalowanej karty sieciowej. W zamian, zmodyfikuj plik `/etc/pcmcia/network.opts`, tak aby odpowiadał twojej lokalnej konfiguracji sieci. Skrypty `network` i `network.opts` zostaną wykonane tylko jeśli twoja karta Ethernet-owa jest obecna.

Adres urządzenia przekazany do `network.opts` składa się, z czterech pól oddzielonych przecinkami: schematu, numeru gniazda, numeru urządzenia i sprzętowego adresu karty Ethernet. Numer urządzenia jest używany do numerowania urządzeń dla kart, które mają kilka interfejsów sieciowych, tak więc zwykle będzie to 0. Jeśli masz kilka kart sieciowych używanych do różnych celów, jedną z opcji byłoby skonfigurowanie kart oparte na numerze gniazda, jak tu:

       case "$ADDRESS" in
       *,0,*,*)
           # definicje dla karty sieciowej w gnieździe 0
           ;;
       *,1,*,*)
           # definicje dla karty sieciowej w gnieździe 1
           ;;
       esac

Alternatywnie mogłyby one być skonfigurowane używając ich adresów sprzętowych, jak tu:

       case "$ADDRESS" in
       *,*,*,00:80:C8:76:00:B1)
           # definicje dla karty D-Link
           ;;
       *,*,*,08:00:5A:44:80:01)
           # definicje dla karty IBM
       esac

Aby automatycznie zamontować i odmontować system plików NFS, najpierw dodaj te wszystkie systemy do `/etc/fstab`, ale w opcjach podaj noauto. W `network.opts` wpisz katalogi, w których mają być zamontowane systemy plików NFS w zmiennej `MOUNTS`. Jest tu szczególnie ważne, aby użyć albo `cardctl` albo `cardinfo`, aby wyłączyć kartę sieciową kiedy montowanie z NFS jest w ten sposób skonfigurowane. Nie jest możliwe czyste odmontowanie systemu plików NFS jeśli karta sieciowa jest po prostu wyrzucana bez ostrzeżenia.

Dodatkowo oprócz zwykłych parametrów konfiguracyjnych dla sieci, skrypt `network.opts` może podawać inne akcje, które mają mieć miejsce po tym jak interfejs został skonfigurowany, albo przed zamknięciem interfejsu. Jeśli w `network.opts` zdefiniowana jest funkcja `start_fn`, zostanie ona wywołana przez skrypt sieciowy po skonfigurowaniu interfejsu, a nazwa interfejsu zostanie przekazana do tej funkcji jako pierwszy i jedyny argument. Podobnie jeśli funkcja `stop_fn` jest zdefiniowana, to zostanie ona wywołana przed zamknięciem interfejsu.

### Wybór transceiver-a.

Typ transceiver-a można wybrać w `network.opts` przy pomocy ustawienia `IF_PORT`. Może to być zarówno wartość numeryczna jak we wcześniejszych wydaniach PCMCIA, jak i słowo kluczowe identyfikujące typ transceiver-a. Wartościami domyślnymi we wszystkich sterownikach sieciowych są: wykrywanie automatyczne interfejsu jeśli jest to możliwe, a w przeciwnym razie - 10baseT. Przy pomocy polecenia `ifport` można sprawdzić lub ustawić bieżący typ transceiver-a. Np.:

> `

>     # ifport eth0 10base2
>     #
>     # ifport eth0
>     eth0    2 (10base2)

> `

Obecne wersje sterownika 3c589 próbują automatycznie wykryć połączenie sieciowe, ale nie jest to jeszcze w pełni funkcjonalne. Aby automatyczne wykrywanie działało, kabel sieciowy powinien tkwić w karcie podczas jej konfiguracji. Alternatywnym rozwiązaniem jest zmuszenie sterownika do sprawdzenia połączenia przy pomocy polecenia:

> `

>     ifconfig eth0 down up

> `

### Komentarze na temat konkretnych kart.

- Przy kartach IBM CCAE i Socket EA musisz wybrać typ transceiver-a (10base2, 10baseT, AUI) gdy urządzenie sieciowe jest już skonfigurowane. Upewnij się, że typ transceiver-a zapisany w logach jest zgodny z rzeczywistym.
- Sterowniki dla kart SMC, Megahertz, Ositech i 3Com powinny automatycznie wykryć typ dołączonej sieci (10base2 lub 10baseT). Ustawienie typu transceiver-a kiedy sterownik jest już załadowany ma na celu zdefiniowanie pierwszej wartości sprawdzanej przez sterownik.
- Karta Farallon EtherWave jest właściwie zbudowana na bazie 3Com 3c589 ze specjalnym transceiver-em. Pomimo, iż EtherWave używa połączeń 10baseT jej transceiver wymaga, żeby 3c589 była skonfigurowana na tryb 10base2.
- Jeśli masz problemy z kartami IBM CCAE, NE4100, Thomas Conrad czy Kingston - spróbuj zwiększyć czas dostępu do pamięci opcją `mem_speed=#` dla modułu `pcnet_cs`. Przykład jak to zrobić znajdziesz w standardowym pliku `config.opts`. Wypróbuj prędkości do 1000 nanosekund.
- Na niektórych systemach przy karcie New Media Ethernet możliwe, że trzeba zwiększyć czas dostępu do portów IO opcją `io_speed=#` podczas ładowania modułu `pcmcia_core`. Aby ustawić tę opcję zmodyfikuj linijkę `CORE_OPTS` w skrypcie startowym.
- Obsługa muticastingu w sterowniku dla New media Ethernet nie jest pełna. Najnowszy sterownik będzie działał z jądrem skompilowanym do multicastingu, ale będzie ignorował takie pakiety. Tryb "promiscuous" powinien działać poprawnie.
- Wygląda na to, że sterownik używany przez karty IBM i 3Com token ring zachowuje się bardzo źle jeśli karty nie są połączone z pierścieniem podczas inicjalizacji. Zawsze podłączaj te karty do sieci kiedy są uruchamiane. Sterownik ten wymaga także wolnych portów w obszarze 0xA20-0xA27. Na niektórych systemach, automatyczne sprawdzanie konfliktów wśród portów IO błędnie określi ten obszar jako niedostępny. W tym wypadku, sprawdzanie może zostać wyłączone poprzez załadowanie modułu `pcmcia_core` z opcją `probe_io=0`.
- Nowsze karty Linksys i D-Link mają swój unikalny sposób wybierania typu transceiver-a, który nie jest obsługiwany przez sterowniki Linux-owe. Jednym ze sposobów na obejście tego jest wystartować DOS-a i użyć narzędzia dostarczonego przez sprzedawcę, aby wybrać transceiver i potem wystartować Linux-a na "ciepło". Szukam beta-testerów do narzędzia na Linux-a, które by umożliwiało taką funkcję.
- Jean Tourrilhes ( jt@hplb.hpl.hp.com napisał HOWTO na temat bezprzewodowych kart sieciowych WaveLAN.

### Diagnozowanie problemów z kartami sieciowymi.

- Czy twoja karta jest rozpoznawana jako karta etnernetowa? Sprawdź logi systemowe i upewnij się, że `cardmgr` identyfikuje twoją kartę poprawnie i startuje jeden ze sterowników sieciowych. Jeśli nie, to twoją kartę można wciąż użyć jeśli jest ona kompatybilna z jakąś obsługiwaną. Najprościej jest to zrobić jeśli karta "twierdzi", że jest kompatybilna z NE2000.
- Czy karta jest poprawnie skonfigurowana? Jeśli używasz obsługiwanej karty i została ona rozpoznana przez `cardmgr`, ale wciąż nie działa, to możliwy jest konflikt z przerwaniami lub portami. Zobacz jakich zasobów używa karta (z logów systemowych) i spróbuj wyłączyć je w `/etc/pcmcia/config.opts`, aby zmusić kartę do użycia innych.
- Jeśli twoja karta wydaje się być skonfigurowana poprawnie, ale czasami się zawiesza, szczególnie przy dużym obciążeniu systemu, możliwe, że musisz spróbować zmienić paramtery "timing-owe" gniazda dla sterownika. Więcej informacji znajdziesz w sekcji 2.3.
- Jeśli masz komunikaty w stylu "network unreachable" kiedy próbujesz dostać się do sieci, to przypuszczalnie błędnie ustawiłeś parametry w `/etc/pcmcia/network.opts`. Jednak z drugiej strony błędnie skonfigurowane karty z reguły nie zainicjują się i nie wyświetlą przy tym żadnych komunikatów
- Aby sprawdzić problemy z `/etc/pcmcia/network.opts`, zacznij od próby ping-owania innych systemów w tej samej podsieci uzywając ich adresów IP. Potem spróbuj ping-ować swój gateway, i maszyny w innych podsieciach. Ping-uj maszyny po ich adresach tylko po zrobieniu tych prostych testów.
- Upewnij się, że twój problem to naprawdę problem z PCMCIA. Sprawdzenie, czy karta działa pod DOS-em ze sterownikiem od sprzedawcy może pomóc. Sprawdź dwa razy modyfikacje w skrypcie `/etc/pcmcia/network.opts`. Upewnij się, że twoje kable, wtyczka "T", terminator itp. działają.

## 3.4 Urządzenia szeregowe i modemy PCMCIA.

Linux-owe urządzenia szeregowe są dostępne poprzez specjalne pliki `/dev/cua*` i `/dev/ttyS*`. Urządzenia `ttyS*` są dla połączeń przychodzących, jak np. bezpośrednio podłączone terminale. Urządzenia `cua*` są dla połączeń wychodzących, jak np. modemy. Każdy fizyczny port szeregowy ma plik urządzenia `ttyS` i `cua`: to już zależy od ciebie jaki plik wykorzystasz w swojej aplikacji. Konfiguracja urządzenia szeregowego może być sprawdzana i modyfikowana poprzez polecenie `setserial`.

Kiedy zostanie wykryta karta szeregowa lub modemowa PCMCIA, zostanie jej przypisany pierwszy dostępny slot urządzenia szeregowego. Będzie to zwykle `/dev/ttyS1` (`cua1`) albo `/dev/ttyS2` (`cua2`) w zależności od ilości wbudowanych portów szeregowych. Urządzenie `ttyS*` jest raportowane w pliku `/var/run/stab`. Domyślny skrypt z opcjami dla urządzenia szeregowego `/etc/pcmcia/serial.opts` podłączy odpowiedni w ramach udogodnienia plik urządzenia `cua*` do `/dev/modem`.

Nie próbuj używać `/etc/rc.d/rc.serial` do konfiguracji modemu PCMCIA. Skrypt ten powinien być używany tylko do konfiguracji urządzeń zainstalowanych na stałe. Modyfikuj `/etc/pcmcia/serial.opts` jeśli chcesz jakichś specjalnych ustawień dla swojego modemu. Nie próbuj także zmieniać portu IO czy IRQ szeregowego urządzenia PCMCIA programem `setserial`. Poinformowałoby to sterownik szeregowy, że karta jest w innym miejscu, ale nie zmieniłoby ustawień sprzętowych karty. Skrypt konfiguracyjny pozwala na podanie innych opcji `setserial` jak rownież to czy linia dla tego portu powinna zostać dodana do `/etc/inittab`.

Adres urządzenia przekazywany do `serial.opts` ma trzy pola odzielone przecinkami: pierwsze jest schematem, drugie - numerem gniazda, trzecie - numerem urządzenia. Numer urządzenia może przyjmować kilka wartości dla kart, które obsługują wieloportowe karty szeregowe, ale dla kart jednoportowych będzie to zawsze 0. Jeśli zwykle używasz więcej niż jednego modemu PCMCIA, możesz podać różne ustawienia oparte na numerze gniazda, jak tu:

       case "$ADDRESS" in
       *,0,*)
           # Opcje dla modemu w gnieździe 0
           LINK=/dev/modem0
           ;;
       *,1,*)
           # Opcje dla modemu w gnieździe 1
           LINK=/dev/modem1
           ;;
       esac

Jeśli modem PCMCIA jest już skonfigurowany gdy Linux startuje, może zostać źle zidentyfikowany jako zwykły wbudowany port szeregowy. Jest to nieszkodliwe, chociaż, kiedy sterowniki PCMCIA przejmują kontrolę nad modemem, będzie mu nadany inny slot. Najlepiej albo zmodyfikować `/var/run/stab` albo użyć `/dev/modem` niż liczyć na to, że modem PCMCIA będzie zawsze miał przypisane to samo urządzenie.

Jeśli skonfigurujesz twoje jądro, aby ładowało podstawowy sterownik do portów szeregowych jako moduł, musisz zmodyfikować `/etc/pcmcia/config`, aby wskazać, że ten moduł ma być ładowany. Zmień pozycję urządzenia szeregowego tak:

       device "serial_cs"
         class "serial" module "char/serial", "serial_cs"

### Diagnozowanie problemów z urządzeniami szeregowymi.

- Czy twoja karta jest rozpoznawana jako modem? Sprawdź log systemowy i upewnij się, że `cardmgr` identyfikuje kartę poprawnie i startuje sterownik `serial_cs`. Jeśli nie, to możliwe, że musisz dodać jeszcze jedną pozycję do swojego pliku `/etc/pcmcia/config` tak, że zostanie ona poprawnie zidentyfikowana. Więcej szczegółów w sekcji 3.6.
- Czy modem został poprawnie skonfigurowany przez serial_cs? Znowu, sprawdź logi systemowe i poszukaj komunikatów pochodzących od sterownika serial_cs. Jeśli zobaczyś "register_serial() failed()", to możesz mieć konflikt portów IO. Inną wskazówką na konflikt jest zgłoszenie urządzenia 8250; większość nowoczesnych modemów PCMCIA powinna być identyfikowana jako UART 16550A. Jeśli sądzisz, że masz do czynienia z konfliktem portów, zmodyfikuj `/etc/pcmcia/config.opts` i wyłącz obszar portów, który został zaalokowany dla modemu.
- A może jest konflikt przerwań? Jeśli log systemowy wygląda na dobry, ale modem po prostu nie działa, to spróbuj użyć `setserial`, aby zmienić IRQ na 0 i sprawdź czy modem działa. Wywołanie takie wymusza na sterowniku użycie wolniejszego trybu "polled" zamiast użycia przerwań. Jeśli to naprawia problem, to całkiem możliwe, że jakieś inne urządzenie w twoim systemie używa przerwania wybranego przez serial_cs. Powinieneś dodać linię do pliku `/etc/pcmcia/config.opts` wyłączające to przerwanie.
- Jeśli modem zdaje się działać, ale bardzo, bardzo wolno, to jest prawie pewne, że jest konflikt przerwań.
- Upewnij się, że twój problem, to rzeczywiście problem z PCMCIA. Pomocne może być sprawdzenie, czy karta działa pod DOS-em używając sterownika dostarczonego przez sprzedawcę. Nie testuj także karty w skomplikowanych warunkach jak SLIP czy PPP dopóki nie jesteś pewnien, że możesz nawiązywać proste połączenia. Jeśli proste rzeczy działają a SLIP - nie, to problem jest ze SLIP-em, a nie PCMCIA.
- Jeśli otrzymujesz komunikaty od jądra wskazujące na to, że moduł serial_cs nie może być załadowany, to znaczy, że jądro nie ma obsługi dla urządzeń szeregowych. Jeśli skompilowałeś sterownik szeregowy jako moduł, to musisz zmodyfikować `/etc/pcmcia/config`, aby zaznaczyć, że moduł `serial` powinien być załadowany przed `serial_cs`.

## 3.5 Adaptery PCMCIA SCSI.

Wszystkie obecnie obsługiwane karty PCMCIA SCSI są podobne w działaniu do jednej z następujących kart: Qlogic, Adaptec AHA-152X albo Future Domain TMC-16x0. Sterowniki PCMCIA są stworzone przez dołączanie części specyficznego dla PCMCIA kodu (w `qlogic_cs.c`, `toaster_cs.c` albo `fdomain_cs.c`) do normalnego sterownika SCSI dla Linux-a.

Kiedy wykryty zostanie nowy kontroler SCSI, sterowniki do SCSI będą szukać urządzeń. Sprawdź logi systemowe, aby upewnić się, że twoje urządzenia zostały wykryte poprawnie. Nowym urządzeniom SCSI zostanie przypisany pierwszy wolny plik urządzenia SCSI. Pierwszy dysk SCSI będzie `/dev/sda`, pierwsza taśma SCSI będzie `/dev/st0`, a pierwszy CD-ROM SCSI będzie `/dev/scd0`.

Rdzeniowe sterowniki PCMCIA są w stanie dowiedzieć się od jądra 1.3.X i późniejszego, które urządzenia SCSI są podłączone do karty. Będą one wymienione w `/var/run/stab`, a skrypt konfiguracyjny SCSI `/etc/pcmcia/scsi` będzie wywołany jeden raz dla każdego dołączonego urządzenia, aby je albo skonfigurować albo wyłączyć. Skrypt domyślny nie robi nic, aby skonfigurować urządzenia SCSI, ale poprawnie odmontuje systemy plików z urządzeń SCSI kiedy karta zostanie usunięta.

Sterowniki PCMCIA z jądrem w wersji 1.2.X nie potrafią automatycznie wykryć , które urządzenia są przypisane konkretnemu sterownikowi. W zamian za to, jeśli masz jedną normalną konfigurację urządzenia SCSI, możesz wymienić te urządzenia w `/etc/pcmcia/scsi.opts`. Na przykład: jeśli normalnie masz dysk i CD-ROM SCSI, użyłbyś:

       # Dla jądra 1.2: lista urządzeń dołączonych
       SCSI_DEVICES="sda scd0"

Adresy urządzeń przekazywane do `scsi.opts` są skomplikowane, z powodu dużej ilości urządzeń, które mogą być dołączone do kontrolera SCSI. Adresy składają się albo z sześciu albo z siedmiu pól oddzielonych przecinkami: bieżący schemat, typ urządzenia, numer gniazda, kanał SCSI, ID, numer logicznej jednostki i opcjonalnie numer partycji. Typ urządzenia będzie jednym z: "sd" dla dysków, "st" dla taśm, "sr" dla CD-ROM-ów i "sg" dla ogólnych urządzeń SCSI. W większości ustawień, kanał SCSI oraz numer logicznej jednostki będzie 0. Dla urządzeń dyskowych z kilkoma partycjami, `scsi.opts` zostanie najpierw wywołany dla całego urządzenia, z pięciopolowym adresem. Skrypt ten powinien ustawić w zmiennej `PARTS` listę partycji. Potem, `scsi.opts` zostanie wywołany dla każdej partycji, z dłuższymi - siedmiopolowymi adresami. Na przykład: oto skrypt do konfiguracji urządzenia dyskowego pod SCSI ID = 3 z dwiema partycjami oraz CD-ROM pod SCSI ID = 6:

    case "$ADDRESS" in
    *,sd,*,0,3,0)
        # To urządzenie ma dwie partycje...
        PARTS="1 2"
        ;;
    *,sd,*,0,3,0,1)
        # Opcje dla partycji nr 1:
        # zaktualizuj /etc/fstab i zamontuj system plików ext2 na /usr1
        DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
        FSTYPE="ext2"
        OPTS=""
        MOUNTPT="/usr1"
        ;;
    *,sd,*,0,3,0,2)
        # Opcje dla partycji nr 2:
        # zaktualizuj /etc/fstab i zamontuj system plików ext2 na /usr2
        DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
        FSTYPE="msdos"
        OPTS=""
        MOUNTPT="/usr2"
        ;;
    *,sr,*,0,6,0)
        # Opcje dla CD-ROM-u ID = 6
        PARTS=""
        DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
        FSTYPE="iso9660"
        OPTS="ro"
        MOUNTPT="/cdrom"
        ;;
    esac

Jeśli twoje jądro nie posiada sterownika "top-level" (do dysku, taśmy itp.) dla konkretnego urządzenia SCSI, wtedy urządzenie to nie zostanie skonfigurowane przez sterownik PCMCIA. Jako efekt uboczny, nazwa urządzenia w `/var/run/stab` będzie wyglądać mniej więcej tak: "sd#nnnn", gdzie "nnnn" jest czterocyfrową liczbą szesnastkową. Zdarza się to, jeśli `cardmgr` nie jest w stanie przetłumaczyć ID urządzenia SCSI na odpowiadającą mu nazwę urządzenia Linux-owego.

Możliwe jest zmodularyzowanie sterowników "top-level" do SCSI, tak aby były ładowane tylko wtedy kiedy zostanie wykryty kontroler SCSI. Aby tak zrobić, musisz zmodyfikować `/etc/pcmcia/config`, aby poinformować `cardmgr`, które dodatkowe moduły muszą być załadowane kiedy dany kontroler jest konfigurowany.
Na przykład:

    device "aha152x_cs"
      class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"

Taka zawartość pliku spowodowałaby załadowanie rdzennego modułu SCSI oraz modułu sterownika "top-level" do dysków przed ładowaniem normalnego modułu sterownika PCMCIA. Skrypt Configure nie wykryje automatycznie zmodularyzowanych sterowników SCSI, tak więc będziesz musiał włączyć obsługę SCSI ręcznie używając opcji konfiguracyjnych.

Zawsze włączaj swoje urządzenia przed włączeniem laptopa, albo przed włożeniem karty kontrolera, tak aby szyna SCSI została poprawnie zakończona podczas konfiguracji kontrolera. Bądź także bardzo ostrożny przy wyjmowaniu kontrolera SCSI. Przed wyjęciem karty upewnij się, że wszystkie urządzenia do niej przydzielone zostały odmontowane i wyłączone. Najlepiej przed wyjęciem karty skorzystać z programu `cardctl` albo `cardinfo` i zażądać usunięcia karty z systemu. W chwili obecnej wszystkie urządzenia SCSI powinny być włączane przed włożeniem karty sterownika SCSI i powinny pozostać podłączone do momentu wyjęcia karty sterownika lub wyłączenia laptopa.

Korzystanie z tych kart niesie za sobą potencjalne komplikacje nieznane w przypadku korzystania ze zwykłych sterowników ISA. Szyna SCSI przenosi sygnał "termination power" niezbędny do prawidłowego działania zwykłych pasywnych terminatorów SCSI. Sterowniki SCSI standardu PCMCIA nie dostarczają sygnału "power termination", jeśli jest on wymagany musi zostać dostarczony przez urządzenie zewnętrzne. Niektóre zewnętrzne urządzenia SCSI mogą zostać skonfigurowane w taki sposób, aby dostarczały wspomnianego sysgnału. Inne, jak np. Zip Drive czy Syquest EZ-Drive używają aktywnych terminatorów, przez co nie są zależne od sygnału podawanego na szynie SCSI. W niektórych przypadkach może okazać się konieczne skorzystanie ze specjalnego bloku terminatora, np. APS SCSI Sentry 2, który posiada niezależne, zewnętrzne źródło zasilania. Konfigurując łańcuch urządzeń SCSI musisz sobie zdawać sprawę, które z nich wymagają lub dostarczają sygnał "power termination".

Kontroler Adaptec APA-460 SlimSCSI nie jest obsługiwany. Kartę tę sprzedawano oryginalnie pod nazwą Trantor, a kiedy Adaptec połączył się z Trantor-em, kontynuowano sprzedaż Trantora z nazwą Adaptec. APA-460 nie jest kompatybilny z jakimkolwiek istniejącym sterownikiem Linux-owym. Nie jestem pewien jak trudno byłoby napisać sterownik; nie sądzę, żeby ktoś był w stanie wyciągnąć jakiekolwiek informacje od Adaptec-a.

(Nieobsługiwany) Trantor SlimSCSI może zostać zidentyfikowany następująco:

       Trantor / Adaptec APA-460 SlimSCSI
       FCC ID: IE8T460
       Shipped with SCSIworks! driver software

(Obsługiwany) Adaptec SlimSCSI może zostać zidentyfikowany następująco:

       Adaptec APA-1460 SlimSCSI
       FCC ID: FGT1460
       P/N: 900100
       Shipped with EZ-SCSI driver software

### Diagnozowanie problemów z kartami SCSI.

- Przy sterowniku `aha152x_cs` (używanym przez Adaptec-a, New Media i kilka innych) źródłem częstych problemów w napędach taśm wydaje się być obsługa odłączania/podłączania SCSI. Aby wyłączyć, tę właściwość dodaj następującą linię do pliku `/etc/pcmcia/config.opts`:

  > `

  >     module "aha152x_cs" opts "reconnect=0"

  > `

- Jeśli skompilowałeś obsługę SCSI jako moduł (`CONFIG_SCSI` to "m"), podczas konfiguracji PCMCIA, musisz wyraźnie zaznaczyć, że chcesz, aby sterownik został skompilowany. Musisz zmodyfikować plik `/etc/pcmcia/config`, aby ładować moduł SCSI przed odpowiednim sterownikiem `*_cs`.

## 3.6 Karty pamięci PCMCIA.

Sterownik `memory_cs` obsługuje wszystkie typy kart pamięci, jak również dostarcza bezpośredniego dostepu do obszaru adresowego pamięci PCMCIA dla kart, które mają inne funkcje. Po załadowaniu tworzy kombinację urządzeń znakowych i blokowych. Przeczytaj stronę podręcznika na temat modułów, aby dowiedzieć się więcej o schemacie nazewnictwa urządzeń. Urządzenia blokowe są używane do dostępu a'la dysk (tworzenie i montowanie systemów plików itp.) Urządzenia znakowe służą do bezpośredniego (raw) niebuforowanego czytania i pisania do jakiegoś miejsca.

Adres urządzenia przekazany do `memory.opts` składa się z dwóch pól: schematu i numeru gniazda. Opcje odnoszą się do pierwszej zwykłej partycji pamięci na odpowiedniej karcie pamięci. Oto przykład skryptu, który automatycznie montuje karty pamięci w zależności od złącza, w które zostaną karty włożone:

       case "$ADDRESS" in
       *,0,0)
           # Zamontuj systemy plików, ale nie uaktualniaj /etc/fstab
           DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="ext2" ; OPTS=""
           MOUNTPT="/mem0"
           ;;
       *,1,0)
           # Zamontuj systemy plików, ale nie uaktualniaj /etc/fstab
           DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="ext2" ; OPTS=""
           MOUNTPT="/mem0"
           ;;
       esac

Niektóre starsze karty pamięci i większość prostych statycznych kart RAM nie posiadają "Card Information Structure" (CIS), która jest schematem używanym przez karty PCMCIA do identyfikowania się. Normalnie `cardmgr` założy, że każda karta, w której brakuje owej struktury jest prostą kartą pamięci i załaduje sterownik `memory_cs`. I tak, częstym skutkiem ubocznym ogólnego identyfikowania kart jest identyfikacja innego typu kart jako karty pamięci.

Sterownik `memory_cs` używa heurystyki, aby zgadnąć pojemność tych kart. Heurystyka nie działa jednak dla kart zabezpieczonych przed zapisem i może czynić błędy także w innych przypadkach. Jeśli karta została źle zidentyfikowana, jej rozmiar powinien być wyraźnie podany podczas używania takich poleceń jak `dd` czy `mkfs`.

### Używanie kart pamięci "flash".

Adres urządzenia przekazywany do `ftl.opts` składa się z trzech lub czterech pól: schematu, numeru gniazda, numeru regionu i opcjonalnie numeru partycji. Większość kart "flash" ma tylko jeden region pamięci "flash", więc numerem regionu zwykle będzie zero.

Aby użyć karty pamięci "flash" jako zwykłego urządzenia blokowego jak dysk, stwórz najpierw partycję "flash translation layer" na tym urządzeniu poleceniem `ftl_format`:

> `

>     ftl_format -i /dev/mem0c0c

> `

Zauważ, że polecenie to uzyskuje dostęp do karty przez bezpośredni interfejs pamięci karty. Raz sformatowana karta może być używana jako zwykłe urządzenie blokowe przy pomocy sterownika `ftl_cs`. Na przykład:

> `

>     mke2fs /dev/ftl0c0
>     mount -t ext2 /dev/ftl0c0 /mnt

> `

Nazewnictwo dla urządzeń FTL jest trochę pokręcone. Poboczne liczby urządzeń mają trzy części: numer karty, numer regionu na tej karcie i opcjonalnie partycję w tym regionie. Region może być traktowany jako pojedyncze urządzenie blokowe bez tablicy partycji (jak dyskietka) albo można go podzielić na partycje tak jak dysk twardy. Urządzenie "ftl0c0" jest kartą 0 o numerze regionu 0 i całym regionem. Urządzenia od "ftl0c0p1" do "ftl0c0p4" są głównymi partycjami 1 do 4 jeśli region został podzielony.

Są dwa główne formaty dla kart pamięci flash: styl "flash translation layer", i styl "Microsoft Flash File System". Format FTL jest ogólnie bardziej elastyczny ponieważ pozwala na użycie każdego zwykłego wysokopoziomowego systemu plików (ext2, ms-dos itp.) na kartach pamięci "flash" tak jakby były one na zwykłym urządzeniu dyskowym. FFS jest całkiem odmiennym systemem plików. Linux nie umie w tej chwili obługiwać kart sformatowanych w tym systemie.

## 3.7 Karty PCMCIA napędów ATA/IDE.

Obsługa napędów ATA/IDE wymaga jadra 1.3.72 lub nowszego. Specyficzna dla PCMCIA część sterownika to `fixed_cs`. Pamiętaj żeby używać `cardctl` albo `cardinfo` do wyłączania karty ATA/IDE przed wyjęciem jej, ponieważ sterownik nie jest odporny na "gorące zmiany".

Adresy urządzenia przekazywane do `fixed.opts` składają się z trzech albo czterech pól: bieżący schemat, numer gniazda, numer seryjny napędu i opcjonalny numer partycji. Tak samo jak w przypadku urządzeń SCSI, `fixed.opts` jest najpierw wywoływany dla całego urządzenia. Jeśli `fixed.opts` zwróci listę partycji w zmiennej `PARTS`, skrypt zostanie wtedy wywołany dla każdej partycji.

Oto przykład pliku `fixed.opts`, który montuje pierwszą partycję jakiejkolwiek karty ATA/IDE na `/mnt`.

       case "$ADDRESS" in
       *,*,*)
           PARTS="1"
           ;;
       *,*,*,1)
           DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="msdos"
           OPTS=""
           MOUNTPT="/mnt"
           ;;
       esac

Zauważ, że domyślny plik `fixed.opts` posiada te linie, ale są one w komentarzu. Jeśli chcesz, możesz mieć oddzielne konfiguracje dla konkretnych kart oparte na ich numerach seryjnych. Aby odszukać numer seryjny napędu, użyj narzędzia `ide_info`. Wtedy część `fixed.opts` może wyglądać tak:

       case "$ADDRESS" in
       *,*,Z4J60542)
           # To są moje rzeczy DOS-owe
           PARTS="1"
           ;;
       *,*,Z4J60542,1)
           DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="msdos"
           OPTS=""
           MOUNTPT="/mnt"
           ;;
       esac

### Diagnozowanie problemów z adapterami ATA/IDE.

- Niektóre napedy IDE zaburzają specyfikację PCMCIA przez żądanie dłuższego czasu na "rozkręcenie się" niż maksymalny dozwolony czas na setup. Aby używać tych kart załaduj moduł `pcmcia_core` z opcją:

  > `

  >     CORE_OPTS="unreset_delay=400"

  > `

- Aby używać urządzenia ATA/IDE CD-ROM, twoje jądro musi być skompilowane z włączoną opcją `CONFIG_BLK_DEV_IDECD`. Będzie to zwykle przypadek dla standardowych jąder, chociaż jest to coś o czymś powinieneś wiedzieć jeśli kompilujesz jądro z własną konfiguracją.

## 3.8 Karty wielofunkcyjne.

Od jądra w wersji 1.3.73 pojedyncze przerwanie może być dzielone między kilka sterowników jak sterownik szeregowy i ethernetu. Jeśli używasz wielofunkcyjnej karty z nowszym jądrem, to wszystkie funkcje tej karty są dostępne bez potrzeby przeładowywania sterowników.

Symultaniczne użycie dwóch funkcji karty wymaga trochę sprytu i różni sprzedawcy sprzętu zaimplementowali dzielenie przerwań na swój, niekompatybilny (i czasem nieudokumentowany) sposób. Sterowniki do niektórych kart (Ositech Jack of Diamonds, 3Com 3c562, Linksys) udostępniają poprawnie symultaniczność, ale inne (szczególnie Megahertz) - nie.

Wcześniejsze jądra nie obsługiwały dzielenia przerwań pomiędzy różne sterowniki urządzeń, więc jest niemożliwe skonfigurowanie kart modemu i ethernetu do działania symultanicznego. Sterowniki ethernetowy i modemowy są ładowane jednocześnie automatycznie. Chociaż sterownik ethernetowy przejmuje przerwanie domyślnie. Aby użyć modemu możesz usunąć sterownik ethernetowy z pamięci i zrekonfigurować port szeregowy czymś takim:

> `

>     ifconfig eth0 down
>     rmmod 3c589_cs
>     setserial /dev/modem autoconfig auto_irq
>     setserial /dev/modem

> `

Drugie polecenie `setserial` powinno zweryfikować czy port został skonfigurowany tak, aby użyć przerwania poprzednio używanego przez sterownik ethernetowy.

## 3.9 Kiedy można bezpiecznie włożyć albo wyjąć kartę PCMCIA ?

Teoretycznie możesz wkładać i wyjmować karty PCMCIA w każdym momencie. Chcociaż, generalnie dobrze jest nie wyjmować karty jeśli jest ona akurat używana przez jakąś aplikację. Jądra starsze niż 1.1.77 często zawieszałyby się podczas wyjmowania kart szeregowych lub modemowych, ale to powinno już być naprawione.

## 3.10 Card Services i Advanced Power Management.

Pakiet Card Services może zostać skompilowany z obsługą APM (Advanced Power Management) jeśli zainstalowałeś ten pakiet w swoim systemie. APM jest dołączony do jąder 1.3.46 i nowszych. Opiekunem tego pakietu jest obecnie Rick Faith (faith@cs.unc.edu), a narzędzia do APM można uzyskać z ftp.cs.unc.edu. Moduły PCMCIA zostaną skonfigurowane automatycznie pod względem APM jeśli na twoim systemie zostanie wykryta wersja kompatybilna.

Aby poprawnie zakończyć działanie i ponownie wystartować karty PCMCIA, możesz wykonać `cardctl suspend` przed zawieszeniem twojego laptopa i `cardctl resume` po przywróceniu go do pracy bez zmian w APM. Niezadziała to jednak z modemem PCMCIA, który jest właśnie używany, ponieważ sterownik szeregowy nie jest w stanie zachować i odtworzyć parametrów operacyjnych modemu.

APM wydaje się być niepewne na niektórych systemach. Jeśli masz problemy z APM i PCMCIA w twoim systemie, spróbuj zawęzić problem do jednego albo drugiego pakietu zanim wyślesz list z raportem o błędzie.

Niektóre sterowniki, szczególnie sterowniki PCMCIA SCSI, nie mogą się odtworzyć ze stanu zawieś/odtwórz. Kiedy używasz karty PCMCIA SCSI, użyj `cardctl eject` zanim zawiesisz system.

## 3.11 Jak mam wyłączyć kartę PCMCIA bez wyjmowania jej ?

Użyj polecenia `cardctl` albo `cardinfo`. Polecenie `cardctl suspend #` zawiesi jedno gniazdo, i wyłączy jego zasilanie. Odpowiednie polecnie `resume` obudzi kartę w stan poprzedni.

## 3.12 Jak usuwam sterowniki PCMCIA z pamięci ?

Aby usunąć cały pakiet PCMCIA, uruchom`rc.pcmcia` tak:

    /etc/rc.d/rc.pcmcia stop

Uruchomienie tego skryptu zajmie kilka sekund, ponieważ daje on czas wszystkim sterownikom-klientom na poprawne zakończenie działania. Jeśli jakieś urządzenie PCMCIA jest akurat używane, zakończenie będzie niekompletne, i niektóre moduły jądra mogą nie zostać usunięte. Aby tego uniknąć użyj `cardctl eject`, aby zamknąć wszystkie gniazda przed uruchomieniem `rc.pcmcia`. Status wyjściowy polecenia `cardctl` określi czy jakieś gniazdo nie mogło być zamknięte.

## 4. Zaawansowane tematy.

## 4.1 Alokoacja zasobów dla urządzeń PCMCIA.

Teoretycznie nie powinno mieć znaczenia które przerwanie jest alokowane dla którego urządzenia tak długo jak dwa urządzenia nie są skonfigurowane, aby używać tego samego przerwania. W pliku `/etc/pcmcia/config.opts` znajdziesz miejsce na wyłączenie przerwań, które są używane przez inne urządzenia niż PCMCIA.

Podobnie, nie ma sposobu, aby bezpośrednio podać adresy IO, które mają byc używane przez karty PCMCIA. Plik `/etc/pcmcia/config.opts` pozwala na podanie obszaru portów dostępnego dla wszystkich sterowników PCMCIA, albo wyłączyć obszary, które powodują konflikty.

Po zmodyfikowaniu pliku `/etc/pcmcia/config.opts` możesz zrestartować `cardmgr` poleceniem "`kill -HUP`".

Przerwanie używane do monitorowania statusu zmian karty jest wybierane przez moduł sterownika niskiego poziomu (`i82365` lub `tcic`) przed zinterpretowaniem pliku `/etc/pcmcia/config` przez `cardmgr`, więc plik ten nie ma wpływu na wybór tego właśnie przerwania. Aby ustawić to przerwanie użyj opcji `cs_irq=` podczas ładowania sterownika gniazd, przez ustawienie zmiennej `PCIC_OPTS` w pliku `/etc/rc.d/rc.pcmcia`.

Wszystkie sterowniki kart klientów mają parametr `irq_list` do podawania, które przerwania mogą próbować one zaalokować. Te opcje powinny być ustawione w pliku `/etc/pcmcia/config`. Np.:

> `

>     device "serial_cs"
>       module "serial_cs" opts "irq_list=8,12"
>       ...

> `

wymusiłoby użycie tylko przerwań IRQ 8 i 12. Nie zależnie od usatwień `irq_list`, Card Services nigdy nie zaalokuje przerwania, które jest już używane przez inne urządzenie albo przerwania, które jest wyłączone w pliku konfiguracyjnym.

## 4.2 Jak zrobić dwie różne konfiguracje urządzeń do domu i pracy ?

Jest to całkiem proste używając schematów PCMCIA.
Użyj dwóch schematów konfiguracyjnych o nazwie "dom" i "praca". Oto przykład skryptu `network.opts` z konkretnymi ustawieniami dla różnych schematów:

       case "$ADDRESS" in
       praca,*,*,*)
           # definicje dla kart sieciowych w pracy
           ...
           ;;
       dom,*,*,*|default,*,*,*)
           # definicje dla kart sieciowych w domu
           ...
           ;;
       esac

Pierwszą częścią adresu urządzenia PCMCIA jest zawsze schemat konfiguracyjny. W tym przykładzie, drugi przypadek w "case" wybierze oba schematy: domowy i domyślny. Więc jeśli schemat nie jest ustawiony, domyślnym będzie schemat domowy.

Teraz, aby wybrać pomiędzy tymi dwoma ustawieniami uruchom albo:

       cardctl scheme dom

albo

       cardctl scheme praca

Polecenie `cardctl` wyłącza wszystkie twoje karty i inicjuje je ponownie. Polecenie to może być bezpiecznie używane, nie zależnie od tego czy system PCMCIA jest załadowany czy nie, ale polecenie to może się nie powieść jeśli używasz innych urządzeń PCMCIA w tym samym czasie (nawet jeśli ich konfiguracje nie różnią się wyraźnie od ustawień schematów).

Aby zobaczyć bieżące ustawienia schematu PCMCIA uruchom:

       cardctl scheme

## 4.3 Startowanie z urządzenia PCMCIA.

Posiadanie głównego systemu plików na urządzeniu PCMCIA jest trochę kłopotliwe, bo system PCMCIA na Linux-a nie został przystosowany do włączenia do jądra. Główne składniki, ładowalne moduły i uruchamiany w trybie użytkownika demon cardmgr, zależą od już działającego systemu. Możliwość startu przy pomocy "initrd" pozwala obejść ten problem pozwalając Linux-owi wystartować używając tymczasowego ramdysku jako minimalnego obrazu katalogu głównego, załadować sterowniki i potem ponownie zamontować inny system plików jako katalog główny. Tymczasowy katalog główny może skonfigurować urządzenia PCMCIA i potem zamontować urządzenie PCMCIA jako katalog główny.

Niektóre dystrybucje Linux-a pozwalają na instalację na urządzeniu podłączonym do kontrolera SCSI PCMCIA, jako niezamierzony skutek uboczny możliwości instalacji z CD-ROM-ów podłączonych do SCSI PCMCIA. Aczkolwiej w tej chwili żadne narzędzie instalacyjne dla Linux-a nie pozwala na konfigurację odpowiedniego "initrd" do startu z głównym systemem plików na PCMCIA. Dlatego też konfiguracja takiego systemu wymaga użycia drugiego Linux-a, aby stworzyć obraz "initrd". Jeśli nie masz dostępu do drugiego Linux-a, to inną możliwością jest tymczasowe zainstalowanie minimalnego Linux-a na napędzie nie będącym urządzeniem PCMCIA, stworzenie obrazu initrd i zainstalowanie na PCMCIA.

W Bootdisk-HOWTO znajdują się ogólne informacje jak zrobić dyskietki startowe, ale nic konkretnego na temat initrd. Główny dokument opisujący initrd zawarty jest w ostatnich źródłach jądra Linux-a w katalogu `linux/Documentation/initrd.txt`. Zanim zaczniesz powinieneś to przeczytać. Pomocna jest też znajomość `lilo`. Użycie initrd wymaga także włączonych opcji `CONFIG_BLK_DEV_RAM` i `CONFIG_BLK_DEV_INITRD` w jądrze.

### Skrypt-pomocnik pcinitrd.

Skrypt `pcinitrd` tworzy podstawowy obraz initrd do startowania z głównej partycji na PCMCIA. W obrazie tym zawarte są: minimalna struktura katalogów, potrzebne pliki urządzeń, kilka programów, biblioteki dzielone i zbiór sterowników-modułów PCMCIA. Podczas uruchamiania `pcinitrd` podajesz sterowniki-moduły, które mają być zawarte w obrazie. Główne składniki PCMCIA, `pcmcia_core` i `ds` są dołączane automatycznie.

Na przykład powiedzmy, że twój laptop używa kontrolera PCMCIA kompatybilnego z i82365 i chcesz startować Linux-a z głównym systemem plików na dysku twardym przyłączonym do kontrolera Adpatec SlimSCSI. Możesz stworzyć odpowiedni obraz przy pomocy;

> `

>     pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o

> `

Aby ustawić sobie start initrd wedle swojego uznania, możesz zamontować obraz używając urządzenia "loopback" poleceniem:

> `

>     mount -o loop -t ext2 initrd /mnt

> `

i potem zmodyfikuj skrypt `linuxrc`. Pliki konfiguracyjne PCMCIA zostaną zainstalowane w obrazie w katalogu `/etc` i także mogą być ustawione wedle własnego uznania. Więcej informacji znajdziesz w podręczniku '`man pcinitrd`'.

### Tworzenie dyskietki startowej z initrd.

Po stworzeniu obrazu skryptem `pcinitrd`, możesz stworzyć dyskietkę startową kopiując jądro, skompresowany obraz initrd i kilka pomocniczych programów dla `lilo` na czystą dyskietkę. W następującym przykładzie zakładamy, że główny system plików znajduje się na `/dev/sda1`:

> `

>     mke2fs /dev/fd0
>     mount /dev/fd0 /mnt
>     mkdir /mnt/etc /mnt/boot /mnt/dev
>     cp -a /dev/fd0 /dev/sda1 /mnt/dev
>     cp [jądro] /mnt/vmlinuz
>     gzip < [obraz-initrd] > /mnt/initrd

> `

Stwórz `/mnt/etc/lilo.conf` z taką zawartością:

> `

>     boot=/dev/fd0
>     compact
>     image=/vmlinuz
>         label=linux
>        initrd=/initrd
>         read-only
>         root=/dev/sda1

> `

Na końcu uruchom:

> `

>     lilo -r /mnt

> `

Jeśli `lilo` uruchomione jest z parametrem `-r`, wszystkie akcje wykonywane są z podanym katalogiem jako główny system plików. Powodem utworzenia plików urządzeń w `/mnt/dev` było to, że `lilo` nie będzie w stanie użyć plików w `/dev` kiedy będzie uruchomione z alternatywnym katalogiem głównym.

### Instalacja obrazu initrd na napędach bez Linux-a.

Jednym z popularnych zastosowań initrd są systemy gdzie wewnętrzny dysk twardy jest dedykowany dla innego systemu operacyjnego. Jądro Linux-a i obraz initrd mogą zostać umieszczone na partycji bez Linux-a a `lilo` lub `LOADLIN` mogą zostać skonfigurowane, aby ładowały Linux-a z tych obrazów.

Zakłądając, że twoje jądro jest skonfigurowane na odpowiednie urządzenie z głównym systemem plików i masz stworzony obraz initrd na innym Linux-ie, najprostszym sposobem aby zacząć, to wystartowanie Linux-a używając `LOADLIN`-a w ten sposób:

> `

>     LOADLIN <kernel> initrd=<initrd-image>

> `

Jak już możesz wystartować Linux-a na swojej maszynie, możesz wtedy zainstalować `lilo` aby umożliwić startowanie Linux-a bezpośrednio.
Na przykład powiedzmy, że `/dev/hda1` jest partycją bez Linux-a i `/mnt` można użyć jako katalog do montowania. najpierw utwórz podkatalog na partycji docelowej dla plików Linux-a:

> `

>     mount /dev/hda1 /mnt
>     mkdir /mnt/linux
>     cp [obraz-jądra] /mnt/linux/vmlinuz
>     cp [obraz-initrd] /mnt/linux/initrd

> `

W tym przykładzie, powiedzmy, że `/dev/sda1` jest partycją na której ma się znaleźć główny system plików, dysk twardy SCSI zamontowany przez kontroler SCSI PCMCIA. Aby zainstalować `lilo`, stwórz plik `lilo.conf` z taką zawartością:

> `

>     boot=/dev/hda
>     map=/mnt/linux/map
>     compact
>     image=/mnt/linux/vmlinuz
>             label=linux
>             root=/dev/sda1
>             initrd=/mnt/linux/initrd
>             read-only
>     other=/dev/hda1
>             table=/dev/hda
>             label=windows

> `

Linia `boot=` informuje, żeby zainstalować program ładujący system do Master Boot Record podanego urządzenia. Linia `root=` identyfikuje konkretny główny system plików, który ma zostać użyty po załadowaniu obrazu initrd, parametr ten może być niepotrzebny jeśli jądro jest już skonfigurowane w ten sposób. Sekcja `other=` używana jest do opisania innego systemu operacyjnego zainstalowanego na `/dev/hda1`.

Aby zainstalować `lilo` w tym przypadku użyj:

> `

>     lilo -C lilo.conf

> `

Zauważ, że w tym przypadku plik `lilo.conf` używa scieżek absolutnych, które zawierają `/mnt`. Zrobiłem tak w przykładzie ponieważ docelowy system plików może nie umieć tworzyć urządzeń Linux-a dla parametrów `boot=` i `root=`.

## 5. Jak radzić sobie z nieobsługiwanymi kartami.

## 5.1 Konfiguracja nieobsługiwanych kart.

Zakładając, że twoja karta jest obsługiwana przez istniejący sterownik, wszystko co trzeba zrobić, to dodać pozycję do `/etc/pcmcia/config`, która poinformuje `cardmgr` jak zidentyfikować kartę i który(e) sterownik(i) dołączyć do tej karty. Więcej informacji na temat formatu pliku konfiguracyjnego na stronie podręcznika "man" na temat `pcmcia`. Jeśli włożysz nieznaną kartę, to `cardmgr` z reguły zapisze trochę informacji identyfikacyjnych w logu systemowym, który może zostać użyty do konfiguracji.

Oto przykład raportu `cardmgr` w `/usr/adm/messages` na temat nieznanej karty:

       cardmgr[460]: unsupported card in socket 1
       cardmgr[460]: version info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA
       MODEM"

Odpowiadająca pozycja konfiguracyjna w `/etc/pcmcia/config` wyglądałoby tak:

       card "Megahertz XJ2288 V.34 Fax Modem"
         version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
         bind "serial_cs"

Możesz użyć "*", aby oznaczyć łańcuchy, które nie muszą się dokładnie zgadzać, jak np. numery wersji. Kiedy robisz nową pozycję konfiguracyjną, zwróć uwagę na to, żeby dokładnie skopiować łańcuchy, zachowując wszelkie duże i małe litery oraz przerwy (spacje). Upewnij się także, że pozycja konfiguracyjna ma taką samą ilość łańcuchów jak to stwierdzono w logach.

Po tym jak zmodyfikujesz `/etc/pcmcia/config`, możesz poinformować `cardmgr`, aby przeładował plik konfiguracyjny:

       kill -HUP `cat /var/run/cardmgr.pid`

Jeśli uda ci się ustawić jakąś pozycję konfiguracyjną dla nowej karty, przyślij mi kopię proszę, tak żebym mógł ją dołączyć do standardowego pliku konfiguracyjnego.

## 5.2 Jak mam dodać obsługę dla karty kompatybilnej z NE2000 ?

Najpierw sprawdź, czy karta nie została już rozpoznana przez `cardmgr`. Niektóre karty nie wymienione w `SUPPORTED.CARDS` są wersjami OEM kart obsługiwanych. Jeśli znajdziesz taka kartę, daj mi znać, żebym mógł ją dodać do listy.

Jeśli twoja karta nie została rozpoznana, postępuj zgodnie z instrukcjami w sekcji 3.6, aby stworzyć pozycję konfiguracyjną dla twojej karty oraz powiąż swoją kartę ze sterownikiem `pcnet_cs`. Zrestartuj `cardmgr`, aby użyć nowego zaktualizowanego pliku konfiguracyjnego.

Jeśli sterownik `pcnet_cs` twierdzi, że nie może określić adresu sprzętowego twojej karty ethernet-owej, to zmodyfikuj nowy plik konfiguracyjny, aby powiązać kartę ze sterownikiem karty pamięci - `memory_cs`. Zrestartuj `cardmgr`, aby użyć nowego zaktualizowanego pliku konfiguracyjnego. Będziesz musiał znać adres sprzętowy swojej karty sieciowej. Adres ten jest serią dwucyfrowych szesnastkowych liczb, często wydrukowanych na karcie. Jeśli go tam nie ma, możesz użyć sterownika DOS-owego, aby go wyświetlić. W każdym razie, jak go już znasz to uruchom:

       dd if=/dev/mem0a count=20 | od -Ax -t x1

i poszukaj linijki z twoim adresem. Tylko parzyste bajty są zdefiniowane, wiec zignoruj bajty nieparzyste w wyniku. Zapisz szesnastkowy offset pierwszego bajtu adresu. Teraz wyedytuj `modules/pcnet_cs.c` i znajdź strukturę `hw_info`. Będziesz musiał utworzyć nową pozycję dla twojej karty. Pierwsze pole jest offsetem pamięci. Następne trzy pola to pierwsze trzy bajty adresu sprzętowego. Ostatnie pole zawiera flagi dla konkretnych cech karty; na początek spróbuj ustawić tu 0.

Po edycji `pcnet_cs.c`, skompiluj i zainstaluj nowy moduł. Zmodyfikuj jeszcze raz `/etc/pcmcia/config` i zmień powiązania karty z `memory_cs` na `pcnet_cs`. Postępuj zgodnie z instrukacjami dla przeładowywania pliku konfiguracyjnego i wszystko powinno być ustawione. Przyślij mi proszę kopie twoich nowych pozycji konfiguracyjnych i `hw_info`.

Jeśli nie możesz znaleźć adresu sprzętowego swojej karty w formie szesnastkowej, ostateczną metodą może okazać się jawne podanie adresu w czasie inicjacji modułu `pcnet_cs`. Popraw plik `/etc/pcmcia/config` dodając opcję `hw_addr=`:

       module "pcnet_cs" opts "hw_addr=0x00,0x80,0xc8,0x01,0x02,0x03"

Oczywiście zamiast podanego adresu podaj adres swojej karty w odpowiednim miejscu.

## 5.3 Interfejs PCMCIA do dyskietek.

Pakiet ten nie obsługuje jeszcze interfejsów używanych przez Compaq Aero i kilka innych laptop-ów. Kruczkiem w obsłudze dyskietek w Aero jest to, że Aero wydaje się używać ustawianego kontrolera PCMCIA, aby obsługiwać DMA dla dyskietek. Nie wiedząc jak to jest dokładnie robione, nie ma sposobu, aby zaimplementować to w Linux-ie.

Jeśli kontroler dyskietek jest obecny podczas startowania Aero, BIOS Aero skonfiguruje kartę i Linux zidentyfikuje ją jako normalną stację dyskietek. Kiedy załadowane są sterowniki Linux-owe PCMCIA, zauważą, że karta jest już skonfigurowana i skojarzona ze sterownikiem Linux-owym i zostawią to gniazdo w spokoju. Tak więc napęd może być używany jeśli jest obecny podczas startu, ale nie może być wymieniany podczas pracy (hot swapping).

## 5.4 Co jest z obsługą kart Xircom ?

Dzięki pracy Wernera Kocha w aktualnej wersji pakietu PCMCIA zawarty jest sterownik do kart ethernetowej i ethernet/modem firmy Xircom. Specjalnie dla dyskusji na temat rozwoju sterownika Xircom ustawiłem forum HyperNews pod adresem `hyper.stanford.edu/HyperNews/get/pcmcia/xircom.html`.

Przez długi czas karty Xircom nie były obsługiwane ponieważ Xircom miał taką zasadę, żeby nie ujawniać technicznych informacji o swoich kartach. Jednak trochę zmienili zasady i teraz rozprowadzają informacje o sterowniku.

## 6. Wskazówki do śledzenia (debugging) i informacje do programowania.

## 6.1 Jak mogę wysłać pomocny list o błędzie ?

Najlepszym sposobem na zgłaszanie błędów jest użycie listy komunikatowej na HyperNews-ach na stronie dotyczącej PCMCIA na Linux-ie. W ten sposób inni także mogą śledzić bieżące problemy (i poprawki czy obejścia jeśli są dostępne).

Oto rzeczy, które powinny być zawarte w każdym liście na temat błędu:

- Typ twojego systemu i wynik polecenia `probe`.
- Jakich kart PCMCIA używasz.
- Wersja twojego jądra i wersja PCMCIA.
- Jakiekolwiek zmiany, jakie zrobiłeś w pliku `/etc/pcmcia` albo `rc.pcmcia`.
- Wszystko co jest związane z kartami PCMCIA z log-ów systemowych.

Przed wysłaniem listu o błędzie, upewnij się proszę, że używasz najnowszej wersji sterowników do PCMCIA. Szczerze powiem, że czytanie o czymś, co już naprawiłem nie jest najbardziej konstruktywnym sposobem na spędzanie czasu.

Jeśli twój problem związany jest także z nagłym przerwaniem działania jądra, podczas którego wyświetlane są zawartości rejestrów, to zawartość ta jest przydatna tylko wtedy jeśli możesz wskazać adres EIP. Jeśli jest on w głównym jądrze, sprawdź ten adres w `System.map`, aby zidentyfikować funkcję, która była w tym momencie wykonywana. Jeśli przerwa nastąpiła podczas działania jakiegoś modułu ładowalnego, jest to trochę trudniejsze do prześledzenia. W bieżącej wersji narzędzi do modułów program `ksyms -m` wyświetli adres podstawowy każdego modułu. Weź moduł, który zawiera podane EIP, i odejmij jego adres podstawowy od EIP, aby otrzymać w ten sposób offset w module. Uruchom wtedy `gdb` z tym modułem jako parametr i sprawdź otrzymany offset poleceniem `list`. Zadziała to tylko wtedy kiedy dany moduł był skompilowany z opcją `-g`, czyli z informacjami dla debugger-a.

Jeśli nie masz dostępu do WWW, informacje o błędach można wysyłać do mnie na adres dhinds@hyper.stanford.edu. Chociaż wolę, aby informacje takie były wysyłane na mojej stronie WWW, tak żeby inni także mogli je widzieć.

## 6.2 Informacje na temat niskopoziomowego śledzenia PCMCIA.

Moduły PCMCIA zawierają dużo warunkowo skompilowanego kodu śledzenia. Większość tego kodu jest pod kontrolą definicji preprocesora `PCMCIA_DEBUG`. Jeśli jest to niezdefiniowane, to kod do śledzenia nie zostanie wkompilowany. Jeśli jest utawione na 0, kod ten jest wkompilowany, ale nieaktywny. Im większe poziomy tym więcej informacji. Każdy moduł stworzony ze zdefiniowanym symbolem `PCMCIA_DEBUG` będzie miał parametr typu Integer, `pc_debug`, który kontroluje ilość pojawiających się informacji. Może to być ustawiane wtedy, kiedy moduł jest ładowany, tak więc wyjście może być kontrolowane, na zasadzie "dla każdego modułu" bez potrzeby przekompilowywania.

Jest kilka narzędzi do śledzenia w podkatalogu `debug_tools/` w dystrybucji PCMCIA. Narzędzia `dump_tcic` i `dump_i365` generują kompletny zrzut rejestrów kontrolera PCMCIA i dekodują dużo informacji z rejestrów. Są najbardziej pożyteczne wtedy, gdy masz dostęp do schematu danych konkretnego układu scalonego kontrolera. Narzędzie `dump_tuples` wyświetla CIS-y (Card Information Structure) danej karty i dekoduje niektóre z najważniejszych bitów. A narzędzie `dump_cisreg` wyświetla rejestry lokalnej konfiguracji karty.

Sterownik `memory_cs` do karty pamięci jest także czasami przydatny do śledzenia. Może on zostać powiązany z każdą kartą PCMCIA i nie wpływa to negatywnie na inne sterowniki. Może on zostać użyty do bezpośredniego dostępu do pamięci atrybutowej karty albo zwykłej pamięci.

## 6.3 Jak mam napisać sterownik Card Services dla nowej karty ?

Najlepszą dokumentacją dla interfejsu PCMCIA dla Linux-a jest "The Linux PCMCIA Programmer's Guide". Najnowsza wersja jest zawsze dostępna z hyper.stanford.edu albo na WWW - hyper.stanford.edu/HyperNews/get/pcmcia/home.html.

Dla urządzeń, które są względnie podobne do normalnych urządzeń kart ISA, będziesz mógł przypuszczalnie użyć fragmentów sterowników Linux-a, które już istnieją. W niektórych przypadkach, największym problem będzie takie przerobienie już istniejącego sterownika, aby mógł on sobie poradzić z wkładaniem i wyjmowaniem danej karty. W bieżącej wersji, sterownik do karty pamięci jest jedynym sterownikiem, który nie zależy od żadnej części innego sterownika, który wykonywałby za niego brudną robotę.

Napisałem szkielet sterownika z dużą ilością komentarzy, które wyjaśniają jak sterownik się komunikuje z Card Sevices; znajdziesz ten szkielet w dystrybucji źródłowej PCMCIA w podkatalogu `modules/skeleton.c`.

## 6.4 Wskazówki dla autorów sterowników klientów PCMCIA.

Zdecydowałem, że nie jest rozsądne dla mnie, abym rozprowadzał wszystkie sterowniki klientów PCMCIA jako część pakietu PCMCIA. Każdy nowy sterownik czyni główny pakiet trudniejszym do utrzymania i, co można było przewidzieć, dołączenie sterownika przenosi trochę pracy opiekuna z autora na mnie. W zamian za to, zdecyduję osobno dla każdego przypadku (case by case) czy włączyć czy nie sterowniki pisane przez osoby trzecie, w zależności od żądań użytkowników jak i możliwości utrzymywania. Sugeruję, żeby autorzy sterowników, które nie dostały się do głównego pakietu, zaadoptowali następujący schemat przy przygotowywaniu ich sterowników do dystrybucji.

Pliki sterownika powinny być ułożone w takiej samej strukturze katalogów jak w głównej dystrybucji, tak, żeby można było rozpakować sterownik ten w głównym katalogu źródeł głównej dystrybucji. Sterownik powinien posiadać pliki źródłowe (w `./modules/`), stronę do podręcznika systemowego (w `./man/`) i pliki konfiguracyjne (w `./etc/`). Katalog główny powinien zawierać także plik README.

W katalogu głównym powinien się także znajdować makefile, ustawiony w taki sposób, że "`make -f ...` all" i "`make -f ... install`" skompiluje sterownik i zainstaluje wszystkie potrzebne pliki. Jeśli plik ten posiada rozszerzenie `.mk`, to zostanie on automatycznie wykonany przez główny pliku `Makefile` dla celów `all` i `install`.
Oto przykład jak taki plik mógłby być skonstruowany.

> `

>     # Przykładowy Makefile dla sterowników pisanych przez osoby trzecie
>     FILES = sample_cs.mk README.sample_cs \
>             modules/sample_cs.c modules/sample_cs.h \
>             etc/sample etc/sample.opts man/sample_cs.4
>     all:
>             $(MAKE) -C modules MODULES=sample_cs.o
>     install:
>             $(MAKE) -C modules install-modules MODULES=sample_cs.o
>             $(MAKE) -C etc install-clients CLIENTS=sample
>             $(MAKE) -C man install-man4 MAN4=sample_cs.4
>     dist:
>             tar czvf sample_cs.tar.gz $(FILES)

> `

Plik ten używa celów install zdefiniowanych w pakiecie PCMCIA 2.9.10 i późniejszych. Zawiera on także cel "dist" dla wygody autora sterownika. Przypuszczalnie będziesz chciał dodać numer wersji do ostatecznego pakietu (np. `sample_cs-1.5.tar.gz`). Pełna dystrybucja mogłaby wyglądać tak:

> `

>     sample_cs.mk
>     README.sample_cs
>     modules/sample_cs.c
>     modules/sample_cs.h
>     etc/sample
>     etc/sample.opts
>     man/sample_cs.4

> `

Z takim układem katalogów, po rozpakowaniu sterownik staje się częścią głównej dystrybucji. Może korzystać z plików nagłówkowych PCMCIA, tak jak i z możliwości sprawdzania konfiguracji systemu użytkownika i automatycznego sprawdzania zależności tak samo jak "normalny" sterownik klienta.

Będę akceptował sterowniki przygotowane zgodnie z tą specyfikacją i umieszczał je w katalogu `/pub/pcmcia/contrib` na moim serwerze FTP - `hyper.stanford.edu`. Plik README w tym katalogu będzie opisywał jak rozpakować sterownik pisany przez trzecią osobę.

Interfejs sterownika PCMCIA nie zmienił się wiele przez ten czas i prawie zawsze zachowywał wsteczną kompatybilność. Sterownik klienta nie będzie musiał być aktualizowany dla pobocznych wersji w pakiecie głównym PCMCIA. Spróbuję powiadamiać autorów sterowników o zmianach, które wymagają uaktualnienia ich sterowników.

## 6.5 Od tłumacza.

Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.

Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:

B.Maruszewski@jtz.org.pl A możesz tu znaleźć dość dużo może nie błędów, ale konstrukcji, które nie są podobne do języka polskiego. Ale to wszystko dlatego, że jest trochę ciężko przetłumaczyć zdanko z angielskiego jeśli jest obok siebie 4 czy czasami nawet 6 rzeczowników ;) Jeśli zauważysz taki stwór i wpadniesz na lepsze określenie, napisz. Jeśli będzie to w miarę sensowne, to napewno tego nie zignoruję.

Oficjalną stroną tłumaczeń HOWTO jest http://www.jtz.org.pl/

Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem ftp.jtz.org.pl w katalogu `/HOWTO/`.

Przetłumaczone przeze mnie dokumenty znajdują się także na mojej stronie WWW. Są tam też odwołania do Polskiej Strony Tłumaczeniowej.

Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to wyślij list o treści `subscribe jtz Imię Nazwisko` na adres `majordomo@ippt.gov.pl`

Zmiany w tym dokumencie wprowadzone przez tłumacza to odwołania do polskich serwerów ftp.