- Установка модуля для linux
- Как загружать и выгружать модули ядра в Linux
- Список всех загруженных модулей ядра в Linux
- Как загрузить или выгрузить (удалить) модули ядра в Linux
- Управление модулями ядра с помощью команды modprobe
- Загружаемые модули ядра Linux
- Зачем нужны загружаемые модули ядра?
- Особенности работы с модулями ядра Linux
- Загрузка и подключение модулей ядра
Установка модуля для linux
В этом документе описывается установка и использование модулей ядра Linux.
This document is covered by the terms of the GNU General Public Licence (GPL), and all terms and limitations therein apply.
Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: > , или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу >
В процессе моей работы с Linux и модулями ядра, я столкнулся с тем, что ни в одном документе нет удовлетворительного описания того, как настроить и использовать модули ядра Linux. Советы, приведенные в этом документе, проверялись и использовались не один раз как на моей машине, так и на многих других машинах, разбросанных по Internet. Здесь я опишу, как пользоваться тем или иныи устройством, драйвер которого может быть собран только в виде модуля.
На моей машине установлен RedHat Linux 4.1, и я использовал именно этот дистрибутив для проверки советов, приведенных в этом документе. Я проверил эти советы и на различных версиях дистрибутива Slackware, а также на Debian. Все необходимые коррективы, связанные с различием дистрибутивов, также приведены в этом документе.
Объем ОЗУ | Значение коэффициента |
---|---|
16 Мб | 3 |
24 Мб | 4 |
32 Мб | 5 |
40 Мб | 6 |
48 Мб | 7 |
56 Мб | 8 |
64 Мб | 9 |
80 Мб | 11 |
96 Мб | 13 |
112 Мб | 15 |
128 Мб | 17 |
После того, как вы выберете для себя значение коэффициента, откройте файл /usr/src/linux/Makefile и найдите строку, в которой написано следующее:
И замените ее на:
где N — это значение коэффициента ускорения.
Почти все функции ядра могут быть собраны в виде модулей. Исключением является драйвер файловой системы, на которой находится корневой раздел (обычно это файловая система ext2)
Однако, некоторые вещи очень сложно настроить, если их поддержка собрана в виде модуля, и я бы рекомендовал встроить в ядро:
Драйверы сетевых карт Ethernet.
Драйверы SCSI CD-ROM.
С другой стороны, существуют такие комбинации драйверов, которые работают ТОЛЬКО если они собраны в виде модулей, особенно если их несколько:
Драйвер принтера на параллельном порту,
Драйвер внешнего дисковода, подключаемого к параллельному порту (такие как IOMEGA ZipDrive или JazzDrive, или BackPack CD-ROM), и
Вам надо самим решить, что вы встроите в ядро, а что соберете в виде модулей. Не забудьте про то, что я вам говорил выше. Выбирать вы будете в процессе исполнения второй из следующих трех команд:
cd /usr/src/linux make menuconfig make dep clean modules modules_install zImage
После этого надо обновить зависимости модулей. Это делается следующей командой:
Теперь новое ядро надо включить в процедуру загрузки системы. Я предполагаю, что вы для этого используете LILO , потому что это единственный загрузчик, с которым я имел дело.
Я настоятельно рекомендую вам НЕ использовать автоматическую процедуру установки нового ядра в процедуру загрузки, потому что, если это ядро не загрузится, вам будет очень сложно восстановить систему без полной переустановки, что не очень приятно. По этой причине у меня в файле /etc/lilo.conf есть следующие строки:
image=/usr/src/linux/arch/i386/boot/zImage label=new alias=n read-only vga=ask optional
Здесь указано, что существует еще один ВАРИАНТ загрузки системы (который не будет работать, если образ этого ядра не существует), при котором ядро загружается из файла /boot/newlinux . При его запуске система предложит вам выбрать видеорежим, в котором будет загружаться ядро.
Я предполагаю, что у вас есть подобные строки в файле /etc/lilo.conf , и что вы поместили в вышеуказанное место правильно собранное ядро. Теперь его можно установить в процедуру загрузки командой:
После этого вам надо перейти к одному из следующих разделов (это зависит от того, какой дистрибутив у вас установлен):
Перед тем, как переходить к исполнению советов, приведенных в этой главе, убедитесь в том, что вы проделали все, что описано в разделе » Пересобираем ядро для включения поддержки модулей » .
Процедуры загрузки системы дистрибутивов Debian и RedHat идентичны, поэтому у них совпадает и процедура настройки модулей.
Зайдите в систему в качестве root-а, и, при помощи вашего любимого текстового редактора, создайте файл /etc/rc.d/init.d/modules.init , написав в нем следующее:
# Modules initialisation. # Инициализация модулей. # # Start up the module auto-loading daemon. # Запуск демона автозагрузки модулей /sbin/kerneld # Mount all currently unmounted auto-mounted partitions. # подключаем все неподключенные разделы. /sbin/mount -a
После создания этого файла в качестве root-а сделайте следующее:
cd /etc/rc.d chmod 755 init.d/* cd rc3.d ln -s ../init.d/modules.init 05modules.init
Теперь систему можно перезагрузить, и, если все пойдет хорошо, то модули будут прекрасно работать.
Перед тем, как переходить к исполнению советов, приведенных в этой главе, убедитесь в том, что вы проделали все, что описано в разделе » Пересобираем ядро для включения поддержки модулей » .
Теперь вам надо отредактировать файл /etc/rc.d/rc.M примерно следующим образом:
В районе строки 18 есть раздел, содержащий следующее:
# Экран отключается после 15 минут простоя # Screen blanks after 15 minutes idle time. /bin/setterm -blank 15
Сразу после этого раздела вставьте следующее:
# Load the kernel module auto-loader. # Загружаем демон автозагрузки модулей. /sbin/kerneld
Примерно через 12 строк вы увидите следующее:
# if there is no /etc/HOSTNAME, fall back on this default: # если файл /etc/HOSTNAME не существует, то используем значение по умолчанию:
Непосредственно перед этими строками вставьте следующее (не забывайте про пустые строки):
# Mount remaining unmounted auto-mount drives. # Подключаем оставшиеся неподключенные разделы. /sbin/mount -a
После внесения этих изменений запишите файл.
Более никаких изменений в Slackware не требуется.
Перед тем, как переходить к исполнению советов, приведенных в этой главе, убедитесь в том, что вы проделали все, что описано в разделе » Пересобираем ядро для включения поддержки модулей » .
Точная последовательность действий в других дистрибутивах, конечно же, не может быть определена, но, скорее всего, она будет совпадать с одной из вышеописанных. Для того, чтобы определить, которая из них вам подходит, вы можете просмотреть содержимое каталога /etc/rc.d , следующим образом:
cd /etc/rc.d ls -l *.d rc.*
В зависимости от того, что вы увидите на экране, у вас есть три варианта действий:
Если в этом списке есть каталог init.d и несколько каталогов с именем вида rc?.d , где вместо знака вопроса стоят различные цифры, и в этом списке НЕТ файла с именем rc.M , то этот дистрибутив можно настроить так, как описано в главе » Настройка поддержки модулей в дистрибутивах Debian и RedHat » .
Если в этом списке НЕТ каталога init.d , но есть файл rc.M , то этот дистрибутив можно настроить так, как описано в главе » Настройка поддержки модулей в дистрибутиве Slackware » .
Если ваш список не удовлетворил предыдущим двум вариантам, то процедура загрузки вашей системы не описана в этом HowTo. В этом случае вы можете связаться с автором этого документа, и он вам поможет настолько, насколько это возможно.
Источник
Как загружать и выгружать модули ядра в Linux
Оригинал: How to Load and Unload Kernel Modules in Linux
Автор: Aaron Kili
Дата публикации: 13 июня 2017 года
Перевод: А. Кривошей
Дата перевода: июль 2017 г.
Модуль ядра — это программа, которая может быть загружена в ядро операционной системы, или выгружена из него по запросу без перекомпиляции ядра или перезагрузки системы. Модули предназначены для расширения функциональности ядра. Другими словами можно сказать, что модули похожи на плагины к программам, например к WordPress. Плагины расширяют функциональность программы без включения их в исходный код.
Аналогично, без модулей ядро должно быть собрано с включением всей необходимой функциональности непосредственно в образ ядра. Это приводит к увеличению его размеров, кроме того, для добавления любой новой функциональности системным администраторам необходимо перекомпилировать ядро.
Простой пример модуля — драйвер, который предоставляет ядру доступ к аппаратному устройству, подключенному к компьютеру.
Список всех загруженных модулей ядра в Linux
В Linux названия всех модулей заканчиваются расширением .ko, и обычно они загружаются автоматически при обнаружении оборудования во время загрузки системы. Однако системный администратор может управлять модулями с помощью специальных команд.
Для вывода списка всех загруженных модулей в Linux может использоваться команда lsmod (list modules), которая читает содержимое /proc/modules.
Как загрузить или выгрузить (удалить) модули ядра в Linux
Для загрузки модуля ядра мы можем использовать команду insmod (insert module). Здесь необходимо задать полный путь к модулю. Приведенная ниже команда загружает модуль speedstep-lib.ko.
Для выгрузки модуля ядра мы будем использовать команду rmmod (remove module). Следующая команда выгрузит модуль speedstep-lib.ko.
Управление модулями ядра с помощью команды modprobe
modprobe — это интеллектуальная команда для чтения списка, загрузки и выгрузки модулей ядра. Она производит поиск всех модулей и соответствующих файлов в директории /lib/modules/$(uname -r), но не включает в поиск альтернативные конфигурационные файлы в директории /etc/modprobe.d. Таким образом, здесь вам не нужно вводить полный путь к модулю — в этом преимущество modprobe по сравнению с ранее описанными командами.
Для загрузки модуля просто введите его имя.
Для выгрузки модуля используется флаг -r.
Замечание: в modprobe выполняется автоматическое преобразование подчеркивания, поэтому при вводе названий модулей нет никакой разницы между _ и -.
Более подробно ознакомиться с опциями можно на man-странице modprobe.
Источник
Загружаемые модули ядра Linux
Системное ядро Linux способно к модификации за счёт расширения функциональных возможностей. Это достигается несколькими способами, но самым оптимальным является подключение загружаемых модулей ядра. Этот способ позволяет вести разработку нужного функционала для ядра независимо от самого ядра. Процесс подключения модулей к ядру, как правило, никаких трудностей не вызывает (в отличие от конфигурирования и компиляции). Если конечно модули разработаны грамотно и должным образом протестированы. Системным администраторам стоит помнить, что если нужно «расширить» ядро под требуемый функционал, то в первую очередь следует воспользоваться вариантом в виде загружаемых модулей ядра.
Зачем нужны загружаемые модули ядра?
С помощью загружаемых модулей ядра довольно просто добавлять в систему драйверы, поддержку новых технологий и возможностей для архитектуры Linux. Это не требует затрагивания компонентов, уже включенных в ядро. Не нужно модифицировать исходный код ядра и возиться с его компиляцией. К тому же, это экономит память и дисковое пространство под само ядро. Ведь можно загружать только те модули, которые используются фактически.
Однако среди всех неоспоримых и весомых плюсов в использовании загружаемых модулей ядра, существуют и определённые минусы — необходима стопроцентная уверенность в том, что конкретный загружаемый модуль надёжный и стабильный. Иначе при загрузке и выгрузке этого модуля велика вероятность нарушить работоспособность ядра. И его нужно будет конфигурировать заново.
Среди всех UNIX-подобных операционных систем наиболее приспособленными для работы с загружаемыми модулями ядра (а также поддерживающими самый широкий спектр оборудования и аппаратных платформ, в том числе и новинок) являются системы Linux и Solaris.
Особенности работы с модулями ядра Linux
Как уже было отмечено, Linux способна предоставить системным администраторам довольно широкие возможности для работы с загружаемыми модулями ядра. Так например в Linux любой системный компонент возможно сделать загружаемым модулем за исключением двух системных объектов: драйвера устройства, используемого для работы корневой файловой системы (ФС) и драйвера мыши типа PS/2.
Все загружаемые модули хранятся (и устанавливаются) в каталог /lib/modules/версия_ядра. Здесь версия_ядра может определена командой:
Для то, чтобы получить список загруженных и используемых в данный момент модулей ядра, можно воспользоваться командой lsmod:
Как видно из данного вывода, в системе настроена поддержка брандмауэра iptables, а также используются модули для интеллектуального управления платформой IMPI – Intelligent Platform Management Interface. В колонке «Size» указывается размер в байтах, а в колонке «Used by» (кем используется) приводится количество связей на данный модуль от других компонентов, а также список самих этих компонентов.
Даже если системное ядро было сконфигурировано и скомпилировано с настройками и комплектностью по-умолчанию, то при использовании команды lsmod, как правило будет выведен довольно длинный список модулей. Если известно точное или примерное имя модуля, который необходимо проверить (используется он или нет), то вместе с командой lsmod удобно использовать и команду grep:
В данном выводе показаны результаты для используемых ядром модулях драйвера amdgpu.
Загрузка и подключение модулей ядра
Пусть имеется загружаемый модуль ядра для некоторого устройства. Например есть файл модуля somedevice.ko для устройства somedevice. Чтобы загрузить этот модуль для ядра прямо во время работы системы следует использовать команду insmod:
При помощи этой же команды можно также и задавать конфигурационные параметры, необходимые для требуемых или специфических режимов работы модулей:
Для удаления модуля нужно либо перезапустить систему или указать в явном запросе выгружаемый модуль с помощью команды rmmod:
Следует заметить, что несмотря на то, что команду rmmod хоть и можно использовать в любой момент времени, однако модуль может быть удалён только в случае, если с ним не связано ни одной действующей ссылки, которые указываются в столбце «Used by» вывода команды lsmod.
Чтобы каждый раз поле перезапуска системы не загружать требуемые модули, в Linux существует возможность подключать их автоматически с помощью файла /etc/modprobe.conf и соответствующей команды modprobe. Эта команда является «обёрткой» команды insmod. Она способна определять порядок загрузки и выгрузки модулей, их параметры, а также зависимости от других модулей и/или параметров. Всю эту информацию команда modprobe читает из файла /etc/modprobe.conf, который, кстати способна и сама генерировать.
Чтобы сгенерировать файл modprobe.conf в соответствии с текущим набором загруженных модулей (которые необходимо загрузить заранее), нужно использовать команду:
В результате будет создан достаточно длинный файл, содержимое которого может выглядеть примерно так:
Ключевые слова path определяют расположение конкретных модулей в файловой системе, а aliases задают привязку файловых систем, сетевых протоколов, старших номеров блочных и символьных устройств к требуемому модулю.
Значения для строк options администраторы должны задавать самостоятельно, поскольку эти инструкции командой modprobe автоматически не генерируются. Например, чтобы задать для модуля устройства somedevice адрес его ввода-вывода, а также вектор прерываний, можно это сделать таким образом:
Стоит отметить также, что для команды modprobe доступны ключевые слова install и remove, при помощи которых можно указывать команды, которые будут выполняться во время загрузки и установки модулей ядра соответственно.
Как можно видеть, в процедуре управления модулями нет ничего слишком сложного, однако это тот случай, когда системным администраторам следует проявлять особую аккуратность и осторожность, проверяя каждый модуль, который планируется использовать в системе.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник