Igorka Curs №19 - module Linux

Modulele sunt o parte foarte importantă a sistemului de operare Linux. Modulele extind funcționalitatea kernel-ului Linux. Modulele reprezintă un dosar special, care implementează o funcționalitate specială. Drivere de dispozitiv - este, de asemenea, tipul de module. Modulele pot fi independente - de auto-suficient pentru a-și îndeplini funcțiile lor inerente, și pot fi dependente de alte module.

Modulele sunt plasate în directorul / lib / module / versiunea de kernel. Dacă aveți mai multe versiuni ale kernel-ului, acesta este de obicei în directorul / lib / module / este este același număr de cataloage. De exemplu:

/ Linux $ ls -1 / lib / module /
2.6.31-14-generic
2.6.31-15-generic
2.6.31-16-generic

Modulele sunt foarte interacționează strâns cu kernel-ul astfel încât fiecare revizuire a generat un nucleu de module subdirectoare. Script-urile de boot folosind comanda -r uname se calculează versiune a kernel-ului și modulele sunt încărcate din directorul cu numele corespunzător.

Modul Folosit de Dimensiune
nfs_acl 2844 0
sunrpc 191 712 1 nfs_acl
qnx4 8576 0

În exemplul vedem că lucrarea nfs_acl modulul sunrpc depinde de modul.

Pentru a încărca modulul în memorie (și kernel-ul poate folosi funcțiile sale), puteți utiliza comanda insmod. Comanda este rulat ca root și ca un parametru de care aveți nevoie pentru a specifica numele fișierului modulului cu calea completă către fișierul:

/ Linux $ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/qnx4/qnx4.ko

Modulul descărcabilă este responsabil pentru interoperabilitate cu QNX sistem de fișiere nucleu. Vom verifica dacă modulul este încărcat:

/ Linux $ lspci | grep QNX
qnx4 8576 0

Pentru a descărca un modul de memorie este comanda rmmod. Ca parametru rmmod comandă preia numele modulului în forma în care emite o comandă lspci. Când specificați numele modulului, puteți utiliza tasta TAB pentru a suplimenta primele litere ale numelui.

/ Linux $ sudo rmmod qnx4
igor @ ubuntu:

/ Linux $ lspci | grep QNX

Dacă încercați să descarce un modul de lucru care depind de fiecare modul a primit un avertisment că unele module folosesc un modul kernel, iar modulul este descărcat:

/ Linux $ sudo rmmod sunrpc
EROARE: Modulul sunrpc este utilizat de nfs_acl

comanda insmod este o simplă comandă, și nu în totalitate user-friendly, de aceea este adesea folosit la comanda mai avansate modprobe. Pentru a utiliza comanda modprobe pentru a încărca modulul pe care trebuie să-i dea numele modulului. De exemplu:

/ Linux $ sudo modprobe qnx4
igor @ ubuntu:

/ Linux $ lspci | grep QNX
qnx4 8576 0

Principalul avantaj al comenzii modprobe este că este în contrast cu insmod știe cum să demontați dependențele module. La început, am spus că modulele pot depinde de alte module, iar dacă încercați să insmod comanda pentru a încărca un modul care este dependent de un alt modul (și nu este încărcată), veți primi o eroare. De exemplu:

/ Linux $ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
insmod: eroare la inserarea „/lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko“: -1 Simbol necunoscut în modulul

comanda modprobe poate folosi fișierul / lib / modules / versiune kernel / modules.dep care descrie dependențe de module. Dacă deschideți fișierul și pentru a găsi linia de nfs_acl.ko modul. putem vedea că aceasta depinde de modul sunrpc.ko. comanda insmod în acest caz, ar fi trebuit să folosească de două ori: în primul rând pentru a descărca modulul sunrpc.ko. și apoi la nfs_acl.ko modul:

/ Linux $ sudo insmod /lib/modules/2.6.31-16-generic/kernel/net/sunrpc/sunrpc.ko
igor @ ubuntu:

/ Linux $ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko

comanda modprobe sine parses dependențelor și încarcă modulele necesare:

/ Linux $ sudo modprobe nfs_acl
igor @ ubuntu:

/ Linux $ lspci
Modul Folosit de Dimensiune
nfs_acl 2844 0
sunrpc 191 712 1 nfs_acl

Fișier / lib / module / versiune kernel / modules.dep generat și actualizat comanda depmod. comanda depmod scanează informația de pe fiecare modul și generează dependențe care sunt scrise în fișierul / lib / modules / versiune kernel / modules.dep.

O altă comandă utilă atunci când se lucrează cu comanda acest modul modinfo. MODINFO - citește informația despre modul și ieșirile l la ecran:

/ Linux $ modinfo nfs_acl
numele fișierului: /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
Licență: GPL
srcversion: F7BFA9B63618825ED524789
depinde: sunrpc
vermagic: 2.6.31-16-generic modversions SMP mod_unload 586

Printre altele, vom vedea informații despre numele fișierului modulului (linia nume de fișier), și dependențe (depinde rând).

Punctul important pentru înțelegerea modelelor este faptul că modulul în timpul încărcării sale poate lua parametri care pot afecta funcționarea acestuia. Această temă nu este ușor și nu îl va lua în considerare în acest capitol, dar trebuie să știți despre asta. Ce parametri pot primi modulul poate fi vizualizat MODINFO comanda. Nu toate unitățile pot accepta parametri (de exemplu, modulul nostru nfs_acl astfel de parametri nu este), dar în exemplul de mai jos, care parametrii de modul pot fi transferate:

/ Linux $ modinfo snd-bt87x
numele fișierului: /lib/modules/2.6.31-16-generic/kernel/sound/pci/snd-bt87x.ko
Licență: GPL
parm: index: Valoarea Index pentru Bt87x soundcard (matrice de int)
parm: id: string ID pentru Bt87x soundcard (matrice de charp)
parm: activați: Activați Bt87x soundcard (matrice de bool)
parm: digital_rate: Rata de intrare digitală pentru Bt87x soundcard (matrice de int)
parm: load_all: Se lasă să se încarce cardurile non-lista albă (bool)

Liniile care încep cu parm este descrierile parametrilor.