Opis sterowników do PCMCIA
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, 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:
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.
Wyszukiwarka