|
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.
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.
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.
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.
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.
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.
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.
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.
Oto streszczenie procesu instalacji:
make config
w nowym katalogu pcmcia-cs-2.9.?
make all
, potem make install
./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.
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
.
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
.
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:
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.fast_pci
, który
powinien być ustawiony jeśli szybkość szyny PCI jest większa niż
25 MHz.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ł.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.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:
freq_bypass=1 cmd_time=8
.cmd_time=12
.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"
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.
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.
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"
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.
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.
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
".
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.
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.
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
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.io_speed=#
podczas ładowania modułu pcmcia_core
. Aby ustawić tę opcję
zmodyfikuj linijkę CORE_OPTS
w skrypcie startowym.pcmcia_core
z opcją probe_io=0
.
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.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./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/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./etc/pcmcia/network.opts
. Upewnij się, że twoje kable,
wtyczka "T", terminator itp. działają.
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"
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./etc/pcmcia/config.opts
i wyłącz obszar
portów, który został zaalokowany dla modemu.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./etc/pcmcia/config
,
aby zaznaczyć, że moduł serial
powinien być załadowany przed
serial_cs
.
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
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"
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
.
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
.
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.
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
pcmcia_core
z opcją:
CORE_OPTS="unreset_delay=400"
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ą.
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.
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.
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.
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.
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.
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.
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
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 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
'.
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.
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=
.
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.
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.
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).
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.
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:
probe
./etc/pcmcia
albo rc.pcmcia
.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ć.
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.
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
.
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.
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. # # # #
Hosting by: Hurra Communications Sp. z o.o.
Generated: 2007-01-26 18:02:22