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:

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:

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.

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:

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 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.

Diagnozowanie problemów z kartami sieciowymi.

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.

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.

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.

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, uruchomrc.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:

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.