12 августа 2011

Ubuntu: Управляем модулями драйверов

Kernel Panic (не имеет ни какого отношения к статье, просто ошибка ядра)

Модульное ядро — современная, усовершенствованная модификация архитектуры монолитных ядер операционных систем компьютеров.


В отличие от «классических» монолитных ядер, считающихся ныне устаревшими, модульные ядра, как правило, не требуют полной перекомпиляции ядра при изменении состава аппаратного обеспечения компьютера. Вместо этого модульные ядра предоставляют тот или иной механизм подгрузки модулей ядра, поддерживающих то или иное аппаратное обеспечение (например, драйверов). При этом подгрузка модулей может быть как динамической (выполняемой «на лету», без перезагрузки ОС, в работающей системе), так и статической (выполняемой при перезагрузке ОС после переконфигурирования системы на загрузку тех или иных модулей).
Все модули ядра работают в адресном пространстве ядра и могут пользоваться всеми функциями, предоставляемыми ядром. Поэтому модульные ядра продолжают оставаться монолитными. Модульность ядра осуществляется на уровне бинарного образа, а не на архитектурном уровне ядра, так как динамически подгружаемые модули загружаются в адресное пространство ядра и в дальнейшем работают как интегральная часть ядра. Модульные монолитные ядра не следует путать с архитектурным уровнем модульности, присущий микроядрам и гибридным ядрам. Практически, динамичная загрузка модулей, это просто более гибкий способ изменения образа ядра во время выполнения — в отличие от перезагрузки с другим ядром. Модули позволяют легко расширить возможности ядра по мере необходимости.
Модульные ядра удобнее для разработки, чем традиционные монолитные ядра, не поддерживающие динамическую загрузку модулей, так как от разработчика не требуется многократная полная перекомпиляция ядра при работе над какой-либо его подсистемой или драйвером. Выявление, локализация, отладка и устранение ошибок при тестировании также облегчаются.

Для выполнения этих команд требуется войти как root!

insmod - Загружает модуль;
rmmod - Выгружает модуль;
depmod - идентифицирует зависимость между модулями;
lsmod - Список загруженных модулей;
modinfo - Отображает информацию о модуле;
modprobe [-r] - Загружает или выгружает модуль или несколько модулей автоматически. (Например: Если модулю A нужен модуль B, то modeprobe автоматически загружает модуль B, а потом модуль A.)

Если вы введете команду lsmod, то в списке будут не только модули драйверов, но еще и системные. К примеру: Для файловой системы EXT3 загружены модули jbd и ext3.

Вы можете использование команду modprobe для ручной загрузки/выгрузки модуля. Достоинством этой команды является то, что вам не нужно беспокоится, если модулю A требуется загруженный модуль B, ведь команда сделает за вас все, что нужно.
Например: modprobe snd-card-0

Для того, чтобы выгрузить модуль нужно воспользоватся ключом -r этой команды.
Например: modprobe -r snd-card-0

Для того, чтобы связать короткое имя устройства к модулю нужно использовать команду alias.
Например: alias eth0 3c59x

Используем конфигурационный файл /etc/modprobe.conf:
Откуда команда узнала, что нужно загрузить модуль snd-intel8x0?
Очень просто: ответ хранится в конфигурационном файле /etc/modprobe.conf.
Давайте посмотрим на содержимое этого файла:
cat /etc/modprobe.conf
И увидим:
...

alias snd-card-0 snd-intel8x0
...

В Ubuntu все хранится в директории /etc/modprobe.d/.
 
Copyright © Alex.Devil.LX 2011 Лицензия Creative Commons