Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Денис Колисниченко
В этой статье мы рассмотрим основные операции с модулями ядра Linux, а также создание собственного модуля, позволяющего расширить возможности ядра операционной системы.
Прежде чем сказать, что же такое модуль, поговорим о драйверах устройств. В Windows мы часто сталкиваемся с установкой, удалением и обновлением драйверов. Драйвером устройства называется определенная программа, позволяющая операционной системе (и пользовательским программам) работать с данным устройством. Операционная система Windows (имеется в виду ME/2000/XP) содержит драйверы для работы с наиболее распространенными устройствами, но если вы хотите установить какое-нибудь экзотическое устройство (драйвера которого нет в базе драйверов операционной системы), вам нужен драйвер этого устройства – без него система не сможет работать с устройством. В Windows установка драйверов выполняется достаточно просто – запустил программу установки драйвера, подождал, пока драйверы будут установлены, и после перезапуска компьютера уже можно работать с новым устройством. Конечно, при условии, что вы выбрали подходящий драйвер.
В Linux «драйверы»
Ядро Linux содержит только самый необходимый код, чтобы только загрузиться. Поддержку остальных устройств обеспечивают модули, которые встраиваются в ядро при загрузке системы. В принципе можно вкомпилировать в ядро все необходимые модули, тогда у нас будет система, не использующая модули, но мы сейчас не будем говорить о таких системах. С помощью пакета modutils, который будет рассмотрен ниже, вы можете добавить нужный вам модуль в ядро во время работы системы. При этом перезагружать систему не нужно – устройство начнет работать сразу же после загрузки модуля. Раньше, в первых версиях ядра Linux, механизм работы с модулями не был предусмотрен, и ядра тех времен содержали в себе код драйверов для всех поддерживаемых устройств.
Такое решение нельзя назвать рациональным. Мы не можем предусмотреть, какие устройства будут установлены у конечного пользователя, даже если включить в состав ядра драйверы всех возможных устройств. Предположим, что у нашего пользователя установлена звуковая плата Yamaha, а наше ядро «знает» еще с десяток звуковых плат. Получится, что один код будет работать всегда, а остальные десять драйверов будут просто использовать оперативную память. Кстати, об оперативной памяти: вы представляете размер ядра, если оно будет содержать драйверы всех устройств?
Исходя из всего этого, разработчики ядра Linux «изобрели» механизм динамически загружаемых модулей. Модули хранятся на диске в виде объектных файлов (*.o). При необходимости ядро загружает необходимый ему модуль. Откуда ядро знает, какой модуль нужно загружать, а какой – нет? Список модулей, а также передаваемые им параметры хранятся в файле /etc/modules.conf (или /etc/conf.modules – в зависимости от дистрибутива и версии ядра). Вот пример этого файла:
Листинг 1. Файл /etc/modules.conf (Linux Red Hat 7.3)
alias sound-slot-0 i810_audio
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1
Подробнее о формате файла /etc/modules.conf вы можете прочитать в справочной системе, введя команду man modules.conf.
При загрузке система читает этот файл и загружает указанные в нем модули. В нашем случае загружается только модуль i810_audio.
Примечание: загрузка модулей из файла modules.conf обеспечивается программой modprobe, которая вызывается из сценария инициализации системы /etc/rc.d/rc.sysinit.
Во время работы системы мы сами можем загрузить нужный нам модуль. Для этого нужно использовать программу insmod, входящую в состав пакета modutils. Использовать программу очень просто:
insmod <имя_файла_модуля>
Чтобы использовать программу insmod, вы должны обладать привилегиями суперпользователя – пользователя root.
Просмотреть список загруженных модулей можно с помощью команды lsmod. Вот вывод этой программы:
Module Size Used by Not tainted
autofs 12164 0 (autoclean) (unused)
nls_koi8-r 4576 2 (autoclean)
nls_cp866 4576 2 (autoclean)
vfat 12092 2 (autoclean)