Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

19 - Модули Linux

Лекция



Сразу хочу сказать, что здесь никакой воды про модули linux, и только нужная информация. Для того чтобы лучше понимать что такое модули linux , настоятельно рекомендую прочитать все из категории Операционная система LINUX.

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

Расположены модули в каталоге /lib/modules/версия ядра. Если у вас установлено несколько версий ядра, то, как правило, в каталоге /lib/modules/ будет находится такое же количество каталогов. Например:

igor@ubuntu:~/linux$ ls -1 /lib/modules/
2.6.31-14-generic
2.6.31-15-generic
2.6.31-16-generic

Модули очень тесно взаимодействуют с ядром поэтому для каждой ревизии ядра генерируется свой подкаталог с модулями. В загрузочных скриптах с помощью команды uname -r вычисляется версия ядра и модули загружаются из каталога с соответствующим названием.

Для того чтобы просмотреть список загруженных модулей предназначена команда lsmod. Команда выводит информацию в трех столбцах: имя модуля, размер модуля и зависимые модули. в третьем столбце указаны модули работа которых зависит от модуля, который указан в первом столбце.

Module Size Used by
nfs_acl 2844 0
sunrpc 191712 1 nfs_acl
qnx4 8576 0

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

Чтобы загрузить модуль в оперативную память (и ядро могло использовать его функции) можно использовать команду insmod. Выполняется команда от имени суперпользователя и в качестве параметра нужно указать название файла модуля с указанием полного пути к файлу:

igor@ubuntu:~/linux$ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/qnx4/qnx4.ko

Загружаемый модуль отвечает за возможность взаимодействия ядра с файловой системой qnx. Проверим загружен ли модуль:

igor@ubuntu:~/linux$ lsmod | grep qnx
qnx4 8576 0

Модуль загружен.

Чтобы выгрузить модуль из памяти предназначена команда rmmod. Об этом говорит сайт https://intellect.icu . В качестве параметра команда rmmodпринимает имя модуля в том виде в котором выдает его команда lsmod. При указании имени модуля можно пользоваться клавишей TAB для дополнения имени по первым буквам.

igor@ubuntu:~/linux$ sudo rmmod qnx4
igor@ubuntu:~/linux$ lsmod | grep qnx

Если попытаться выгрузить модуль от работы которого зависят другие модули получим предупреждение о том, какие модули используют выгружаемый модуль, и модуль не будет выгружен:

igor@ubuntu:~/linux$ sudo rmmod sunrpc
ERROR: Module sunrpc is in use by nfs_acl

Команда insmod является очень простой командой и не совсем удобной для пользователя, поэтому чаще всего используется более продвинутая команда modprobe. Чтобы с помощью команды modprobe загрузить модуль необходимо передать ей имя модуля. Например:

igor@ubuntu:~/linux$ sudo modprobe qnx4
igor@ubuntu:~/linux$ lsmod | grep qnx
qnx4 8576 0

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

igor@ubuntu:~/linux$ sudo insmod /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
insmod: error inserting ‘/lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko’: -1 Unknown symbol in module

Команда modprobe может воспользоваться файлом /lib/modules/версия ядра/modules.dep в котором описаны все зависимости модулей. Если открыть этот файл и найти строку для модуля nfs_acl.ko, то можно увидеть, что он зависит от модуля sunrpc.ko. Командой insmod в данном случае пришлось бы воспользоваться дважды: сначала для загрузки модуля sunrpc.ko, а затем уже для модуля nfs_acl.ko:

igor@ubuntu:~/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 сама разбирает зависимости и загружает необходимые модули:

igor@ubuntu:~/linux$ sudo modprobe nfs_acl
igor@ubuntu:~/linux$ lsmod
Module Size Used by
nfs_acl 2844 0
sunrpc 191712 1 nfs_acl

Файл /lib/modules/версия ядра/modules.dep генерируется и обновляется командой depmod. Командаdepmod просматривает информацию о каждом модуле и генерирует зависимости, которые записываются в файл/lib/modules/версия ядра/modules.dep.

Еще одна полезная команда при работе с модулями это команда modinfomodinfo - считывает информацию о модуле и выдает ее на экран:

igor@ubuntu:~/linux$ modinfo nfs_acl
filename: /lib/modules/2.6.31-16-generic/kernel/fs/nfs_common/nfs_acl.ko
license: GPL
srcversion: F7BFA9B63618825ED524789
depends: sunrpc
vermagic: 2.6.31-16-generic SMP mod_unload modversions 586

Среди прочей видим информацию об имени файла модуля (строка filename), и зависимостях (строка depends).

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

igor@ubuntu:~/linux$ modinfo snd-bt87x
filename: /lib/modules/2.6.31-16-generic/kernel/sound/pci/snd-bt87x.ko
license: GPL
parm: index:Index value for Bt87x soundcard (array of int)
parm: id:ID string for Bt87x soundcard (array of charp)
parm: enable:Enable Bt87x soundcard (array of bool)
parm: digital_rate:Digital input rate for Bt87x soundcard (array of int)
parm: load_all:Allow to load the non-whitelisted cards (bool)

Строки начинающиеся с parm и есть описания параметров.

Для передачи модулю параметров (и не только) существует файл /etc/modprobe.conf, который перед запуском и выгрузкой модуля просматривает программа modprobe и если для модуля описаны определенные дополнительные действия они будут выполнены. В некоторых дистрибутивах файл /etc/modprobe.confотсутствует, вместо него команда modprobe использует конфигурационные файлы из каталога/etc/modprobe.d/. Подробнее об этом файле читайте в справке man modprobe.conf.

Пожалуйста, пиши комментарии, если ты обнаружил что-то неправильное или если ты желаешь поделиться дополнительной информацией про модули linux Надеюсь, что теперь ты понял что такое модули linux и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Операционная система LINUX

Из статьи мы узнали кратко, но содержательно про модули linux
создано: 2014-09-13
обновлено: 2024-11-14
234



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Операционная система LINUX

Термины: Операционная система LINUX