Igorka Лекция №19 - Linux модули

Модулите са много важна част от операционната система Linux. Модулите разширяват функционалността на ядрото Linux. Модулите представляват специални файлове, които изпълняват определена функционалност. Драйверите за устройствата - също от вида на модула. Модулите могат да бъдат независими - самодостатъчна за извършване на присъщите им функции и могат да бъдат зависими от други модули.

Модулите са поставени в директория / ИЪ / модули / ядро ​​версия. Ако имате няколко версии на ядрото, то обикновено е в директорията / ИЪ / модули / е е един и същ брой каталози. Например:

/ Linux $ ли -1 / ИЪ / модули /
2.6.31-14-родово
2.6.31-15-родово
2.6.31-16-родово

Модулите са много тясно си взаимодействат с ядрото, така че всяко ядро ​​редакция генерирани поддиректория модули. скриптове за зареждане със uname -r команда се изчислява версия на ядрото и модули са заредени от указателя с подходящо име.

Модул Размер Използва се от
nfs_acl 2844 0
sunrpc 191 712 1 nfs_acl
qnx4 8576 0

В примера виждаме, че работата nfs_acl sunrpc модул зависи от модула.

За да заредите модула в паметта (и на ядрото може да използвате функциите си), можете да използвате командата insmod. Командата се управлява като корен и като параметър трябва да посочите името на модула файл с пълния път до файла:

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

Зареждаеми модул отговаря за оперативна съвместимост с QNX на ядрото на файловата система. Ще проверим дали модула е зареден:

/ Linux $ lsmod | Впиши QNX
qnx4 8576 0

За да се разтоварят на модул памет е rmmod команда. Като параметър rmmod команда приема името на модула във формата, в която е издала заповед lsmod. При задаване на името на модула, можете да използвате клавиша TAB, за да допълнят първите букви на името.

/ Linux $ Sudo rmmod qnx4
Igor @ Ubuntu:

/ Linux $ lsmod | Впиши QNX

Ако се опитате да се разтоварят модул на работата, която зависи от всеки модул е ​​получил предупреждение, че някои модули използват модул за ядрото и на модула се разтоварва:

/ Linux $ Sudo rmmod sunrpc
ГРЕШКА: Модул sunrpc се използва от nfs_acl

insmod командата е проста команда, а не изцяло лесен за употреба, така че често се използва в по-напреднала modprobe команда. За да използвате командата modprobe да заредите модула трябва да й даде името на модула. Например:

/ Linux $ Sudo modprobe qnx4
Igor @ Ubuntu:

/ Linux $ lsmod | Впиши QNX
qnx4 8576 0

Основното предимство на modprobe команда е, че тя е в контраст с insmod знае как да се разглоби на модула за зависимости. В началото казах, че модулите могат да зависят от други модули, и ако се опитате да insmod команда за зареждане на модул, който е зависим от друг модул (и това не е заредена), вие ще получите съобщение за грешка. Например:

/ Linux $ Sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
insmod: грешка вмъкване "/lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko": -1 файл символ в модул

modprobe команда може да използвате файл / ИЪ / модули / ядро ​​версия / modules.dep който описва зависимости на модули. Ако отворите файла и намерете реда за nfs_acl.ko модул. можем да видим, че това зависи от sunrpc.ko модул. insmod командата в този случай би трябвало да се използва два пъти: първо, за да изтеглите sunrpc.ko модул. и след това да nfs_acl.ko модул:

/ 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

modprobe самата команда прави разбор зависимости и зарежда необходимите модули:

/ Linux $ Sudo modprobe nfs_acl
Igor @ Ubuntu:

/ Linux $ lsmod
Модул Размер Използва се от
nfs_acl 2844 0
sunrpc 191 712 1 nfs_acl

File / ИЪ / модули / версия на ядрото / modules.dep генериран и се обновява depmod команда. depmod команда сканира информацията за всеки модул и генерира зависимости, които са написани на файл / ИЪ / модули / версия на ядрото / modules.dep.

Друга полезна команда, когато се работи с команда този модул modinfo. modinfo - това гласи информацията за модула и го насочва към екрана:

/ Linux $ modinfo nfs_acl
име на файла: /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
Лиценз: GPL
srcversion: F7BFA9B63618825ED524789
зависи: sunrpc
vermagic: 2.6.31-16-генерични ОМП mod_unload modversions 586

Наред с другите неща, ще видим информация за името на модула файл (името на файла ред), и зависимости (зависи ред).

Важното за разбирането на моделите е, че модула по време на зареждане може да отнеме параметри, които могат да повлияят на неговото действие. Тази тема не е лесно и ние няма да го разгледа в тази глава, но трябва да знаете за това. Какви параметри могат да получат модула могат да се видят modinfo команда. Не всички единици могат да приемат параметри (напр нашия модул nfs_acl такива параметри не е), но в примера по-долу, които параметрите на модула могат да се прехвърлят:

/ Linux $ modinfo Snd-bt87x
име на файла: /lib/modules/2.6.31-16-generic/kernel/sound/pci/snd-bt87x.ko
Лиценз: GPL
PARM: индекс: Стойност на показателя за Bt87x звукова карта (масив от вътр)
PARM: ID: ID низ за Bt87x звуковата карта (масив от charp)
PARM: позволи: Активиране Bt87x звуковата карта (масив от BOOL)
PARM: digital_rate: Digital скорост вход за Bt87x звуковата карта (масив на междинно съединение)
PARM: load_all: Оставете да се зареди без белия списък карти (булев)

Линии, започващи с PARM е описание на параметрите.