|
Określenie modułu dla urządzenia
W zależności od
naszych wymagań oraz zastosowania systemu operacyjnego, będzie
się zmieniać liczba wymaganych sterowników, w większości wypadków
będzie to wartość od kilku do kilkunastu modułów. Jeśli tych
modułów jest mało to samodzielne ładowanie może być lepszym
rozwiązaniem.
Aby wskazać odpowiedni moduł, musimy poznać dane urządzenia.
Najbardziej interesującymi informacjami są: producent i
model urządzenia lub użyty chipset. W większości wypadków te
informacje znajdują się w dokumentacji urządzenia. Jeśli tak
nie zdobędziemy szukanych informacji to możemy spróbować użyć
którąś z poniższych metod:
-
Organoleptycznie - jeśli mamy dostęp do
sprzętu to możemy obejrzeć urządzenie, opis
może być umieszczony na płytce drukowanej
lub na chipsecie (zwykle największy układ
scalony).
-
lshw - zaawansowany program
służący do wyświetlania szczegółowych danych o sprzęcie,
jego zaletą jest duża ilość sprawdzanych podsystemów
i wyświetlanie nazw używanych modułów przez konkretne urządzenie.
-
lspci - program ten wyświetla listę
wykrytych urządzeń PCI/AGP wraz z dodatkowymi informacjami.
Warto użyć tu dodatkowo opcji
"-v" - "-vv" w celu zwiększenia ilości danych.
Program ten znajdziemy w pakiecie pciutils.
-
Komunikaty jądra - są to dosyć cenne informacje, możemy
je odczytać w dzienniku kernela: /var/log/kernel
lub przejrzeć to co zwraca program dmesg:
Kiedy uzyskaliśmy informacje o sprzęcie, pozostaje nam odnaleźć moduł:
-
pcidev - program z pakietu
pci-database - stara się wykryć
używany przez nas sprzęt
oraz podaje nazwę sugerowanego modułu. Należy wywołać program z
parametrem wskazującym o interesujące nas urządzenie np:
# pcidev agp
10de01e0 nvidia-agp nVidia Corporation|nForce2 AGP (different version?) |
drugi zwrócony łańcuch jest nazwą szukanego modułu. Aby
otrzymać listę parametrów jakie przyjmuje program należy uruchomić
go bez parametru. Uwaga: w celu określenia modułu
kontrolera dysku nie należy używać parametru 'ide',
tylko 'sata', gdyż linia
sterowników IDE jest przestarzała. Zamiast niej należy używać
tych opartych na libata.
-
Internet - można założyć, że ktoś się już spotkał z podobnym
problemem. Mamy do dyspozycji sporą skarbnicę wiedzy:
WWW, listy i grupy dyskusyjne.
-
Po nazwie modułu: modprobe -l {$słowo_kluczowe}
- tak możemy próbować odnaleźć moduł wg. szukanego klucza np:
# modprobe -l *snd*
/lib/modules/2.6.11.6-4/kernel/sound/pcmcia/pdaudiocf/snd-pdaudiocf.ko.gz
/lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vxp440.ko.gz
/lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vx-cs.ko.gz
/lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vxpocket.ko.gz
/lib/modules/2.6.11.6-4/kernel/sound/drivers/snd-serial-u16550.ko.gz
/lib/modules/2.6.11.6-4/kernel/sound/drivers/mpu401/snd-mpu401-uart.ko.gz
/lib/modules/2.6.11.6-4/kernel/sound/drivers/mpu401/snd-mpu401.ko.gz
|
-
modinfo - program ten zwraca informacje o
module, którego nazwę podajemy jako parametr. Program jest
pomocny jeśli zawęziliśmy listę pasujących modułów do kilku
pozycji.
Kiedy sądzimy że odnaleźliśmy właściwy moduł możemy go bez obaw wczytać
i przetestować nasze urządzenie, jeśli próba zakończyła się sukcesem to
możemy zapisać jego nazwę do odpowiedniego pliku aby został
załadowany przy każdym starcie systemu. Opis tego znajduje się w dalszej
części rozdziału.
Zarządzanie modułami
Moduły są ze sobą powiązane i załadowanie danego modułu załaduje
moduły od niego zależne (jeśli takie są), podobnie jest z ich usuwaniem z pamięci.
Do zarządzania modułami zaleca się używanie programu modprobe
z odpowiednimi parametrami zamiast programów insmod i
rmmod
Listę załadowanych modułów i zależności między nimi otrzymamy
po wydaniu polecenia lsmod np:
# lsmod
Module Size Used by
lp 8644 0
parport 29896 1 lp
ext3 119304 1
amd74xx 11676 0 [permanent]
psmouse 34840 0
ide_core 109560 2 ide_disk,amd74xx
ide_disk 14336 9 |
Wczytanie modułu do pamięci:
Usuwanie modułu z pamięci (możliwe tylko jeśli nie jest używany):
Wyświetlenie listy modułów zależnych od podanego:
# modprobe --show-depends ne2k-pci
insmod /lib/modules/2.6.11.6-4/kernel/drivers/net/8390.ko.gz
insmod /lib/modules/2.6.11.6-4/kernel/drivers/net/ne2k-pci.ko.gz |
Wyświetlenie listy dostępnych modułów:
Po "ręcznym" załadowaniu modułu do pamięci będzie on
dostępny do czasu ponownego uruchomienia komputera, aby
moduł był automatycznie ładowany przy starcie systemu musimy
użyć opisanych dalej plików: /etc/modules
lub /etc/modprobe.conf.
/etc/modules
Plik ten zawiera listę modułów, które zostaną załadowane podczas
startu systemu (przez rc-skrypty). Znając nazwę modułu możemy dodać
ją do tego pliku np:
echo "via82cxxx_audio" >> /etc/modules |
/etc/modprobe.conf
W tym dokumencie powiedzieliśmy, że
plik /etc/modprobe.conf służy do konfiguracji
modułów, jednak za pomocą pewnej sztuczki będziemy mogli wskazywać
moduły do załadowania. Polega ona na utworzeniu aliasów o ustalonych
nazwach i które będą ładowane np. przez rc-skrypty. Przykładowo utworzenie
aliasu eth0 do odpowiedniego modułu karty sieciowej
spowoduje załadowanie danego modułu przy próbie podniesienia interfejsu
pierwszego interfejsu Ethernet. Przykładowy alias:
spowoduje załadowanie modułu 8139too. Nic nie stoi na przeszkodzie żeby
taki moduł został dopisany do /etc/modules, jednak
metoda oparta na aliasach jest bardziej czytelna i elegancka (zwłaszcza
przy większej ilości kart sieciowych).
Poniżej została przedstawiona lista takich aliasów:
-
eth{$Nr} - opisany powyżej
alias dla karty sieciowej typu Ethernet.
-
ide_hostadapter,
scsi_hostadapter - aliasy do
modułów kontrolerów pamięci masowych, używane są
m.in. przez skrypt geninitrd.
-
char-major-116,
snd-card-{$Nr},
char-major-14,
sound-* - aliasy dla modułów
kart muzycznych (ALSA).
Przykładowa konfiguracja:
alias eth0 8139too
alias scsi_hostadapter sata_sil
alias char-major-116 snd
alias snd-card-0 snd-intel8x0 |
|
|