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.